Yüksek Kullanılabilirlik, Olağanüstü Durum Kurtarma için SqlClient Desteği

Bu makalede, SQL Server 2012 veya sonraki sürümleriyle yüksek kullanılabilirlik, Always On özellikleriyle olağanüstü durum kurtarma -- Always On kullanılabilirlik grupları (AG' ler) ve Always On yük devretme kümesi örnekleri (FCI) için SqlClient desteği (.NET Framework 4.5'e eklenmiştir) açıklanmaktadır.

Artık bağlantı özelliğinde bir kullanılabilirlik grubu dinleyicisi veya FCI adı belirtebilirsiniz. SqlClient uygulaması yük devreden bir veritabanına bağlıysa, özgün bağlantı kesilir ve yük devretmeden sonra çalışmaya devam etmek için uygulamanın yeni bir bağlantı açması gerekir.

BIR AG veya FCI'ya bağlanmıyorsanız ve bir konak adıyla birden çok IP adresi ilişkilendirildiyse, SqlClient DNS girişiyle ilişkili tüm IP adresleri üzerinden sırayla yinelenir. DNS sunucusu tarafından döndürülen ilk IP adresi herhangi bir ağ arabirimi kartına (NIC) bağlı değilse bu işlem zaman alabilir. Bir FCI'yı veya kullanılabilirlik grubunun dinleyicisine bağlarken, SqlClient tüm IP adreslerine paralel olarak bağlantı kurmayı dener. Bağlantı girişimi başarılı olursa, sürücü bekleyen bağlantı girişimlerini atar.

Not

Bağlantı zaman aşımının artırılması ve bağlantı yeniden deneme mantığının uygulanması, bir uygulamanın kullanılabilirlik grubuna bağlanma olasılığını artırır. Ayrıca, yük devretme nedeniyle bağlantı başarısız olabileceğinden bağlantı yeniden deneme mantığını uygulamanız ve yeniden bağlanana kadar başarısız bağlantıyı yeniden denemeniz gerekir.

.NET Framework 4.5'te SqlClient'a aşağıdaki bağlantı özellikleri eklendi:

  • ApplicationIntent

  • MultiSubnetFailover

Şu bağlantı dizesi anahtar sözcüklerini program aracılığıyla değiştirebilirsiniz:

Not

true.NET Framework 4.6.1 ve sonraki sürümlerde ayarı MultiSubnetFailover gerekli değildir. .NET Core ve .NET 5+ için gereklidir.

MultiSubnetFailover ile Bağlan

FCI'ya veya ag dinleyicisine bağlanırken her zaman belirtin MultiSubnetFailover=True . MultiSubnetFailover SQL Server 2012 veya sonraki sürümlerinde tüm AG'ler ve veya FC'ler için daha hızlı yük devretmeyi etkinleştirir ve tek ve çok alt ağlı AlwaysOn topolojileri için yük devretme süresini önemli ölçüde azaltır. Çok alt ağlı yük devretme sırasında istemci paralel olarak bağlantı kurmaya çalışır. Alt ağ yük devretmesi sırasında istemci TCP bağlantısını agresif bir şekilde yeniden dener.

MultiSubnetFailover Bağlantı özelliği, uygulamanın AG veya FCI kullandığını ve SqlClient'ın tüm IP adreslerine bağlanmaya çalışarak birincil SQL Server örneğindeki veritabanına bağlanmaya çalışacağını gösterir. MultiSubnetFailover=True Bir bağlantı için belirtildiğinde, istemci TCP bağlantısını yeniden dener ve işletim sisteminin varsayılan TCP yeniden aktarım aralıklarından daha hızlı çalışır. Bu, AG veya FCI yük devretmesi sonrasında daha hızlı yeniden bağlantı sağlar ve hem tek hem de çok alt ağlı AG'ler ve FC'ler için geçerlidir.

SqlClient'da bağlantı dizesi anahtar sözcükleri hakkında daha fazla bilgi için bkzConnectionString. .

MultiSubnetFailover=True AG veya FCI dışında bir şeye bağlanırken belirtme olumsuz performans etkisine neden olabilir ve desteklenmez.

Always On özelliklerinden birini kullanarak bir sunucuya bağlanmak için aşağıdaki yönergeleri kullanın:

  • MultiSubnetFailover Tek bir alt ağa veya çok alt ağa bağlanırken bağlantı özelliğini kullanın; her ikisi için de performansı artırır.

  • Ag'ye bağlanmak için kullanılabilirlik grubunun dinleyicisini bağlantı dizesi sunucu olarak belirtin.

  • 64'ten fazla IP adresiyle yapılandırılmış bir SQL Server örneğine Bağlan bağlantı hatasına neden olur.

  • Bağlantı özelliğini kullanan MultiSubnetFailover bir uygulamanın davranışı, kimlik doğrulaması türüne göre etkilenmez: SQL Server Kimlik Doğrulaması, Kerberos Kimlik Doğrulaması veya Windows Kimlik Doğrulaması.

  • Yük devretme süresine uyum sağlamak için değerini Connect Timeout artırın ve uygulama bağlantısı yeniden deneme girişimlerini azaltın.

  • Dağıtılmış işlemler desteklenmez.

Salt okunur yönlendirme etkin değilse, ikincil çoğaltma konumuna bağlanma aşağıdaki durumlarda başarısız olur:

  • İkincil çoğaltma konumu bağlantıları kabul etmek üzere yapılandırılmamışsa.

  • Bir uygulama kullanıyorsa ApplicationIntent=ReadWrite (aşağıda açıklanmıştır) ve ikincil çoğaltma konumu salt okunur erişim için yapılandırılmışsa.

SqlDependency salt okunur ikincil çoğaltmalarda desteklenmez.

Birincil çoğaltma salt okunur iş yüklerini reddedecek şekilde yapılandırılırsa ve bağlantı dizesi içerirse ApplicationIntent=ReadOnlybağlantı başarısız olur.

Veritabanı Yansıtmasından Çok Alt AğLı Kümeleri Kullanmaya Yükseltme

ve Failover Partner bağlantı anahtar sözcükleri bağlantı dizesi varsa veya TCP dışında bir protokol kullanılıyorsa MultiSubnetFailover=True bir bağlantı hatası (ArgumentException) oluşurMultiSubnetFailover. Kullanılırsa MultiSubnetFailover bir hata (SqlException) oluşur ve SQL Server bunun bir veritabanı yansıtma çiftinin parçası olduğunu belirten bir yük devretme iş ortağı yanıtı döndürür.

Şu anda çok alt ağlı bir senaryoya veritabanı yansıtması kullanan bir SqlClient uygulamasını yükseltiyorsanız, bağlantı özelliğini kaldırmanız Failover Partner ve MultiSubnetFailover bağlantı dizesi sunucu adını bir kullanılabilirlik grubu dinleyicisi ile değiştirip olarak değiştirmeniz True gerekir. bir bağlantı dizesi ve MultiSubnetFailover=TruekullanıyorsaFailover Partner, sürücü bir hata oluşturur. Ancak, bir bağlantı dizesi ve MultiSubnetFailover=False (veya ApplicationIntent=ReadWrite) kullanıyorsaFailover Partner, uygulama veritabanı yansıtmayı kullanır.

AG'deki birincil veritabanında veritabanı yansıtması kullanılıyorsa ve kullanılabilirlik grubu dinleyicisi yerine birincil veritabanına bağlanan bağlantı dizesi kullanılıyorsa MultiSubnetFailover=True sürücü bir hata döndürür.

Uygulama Amacını Belirtme

olduğunda ApplicationIntent=ReadOnly, istemci AlwaysOn özellikli bir veritabanına bağlanırken okuma iş yükü isteğinde bulunur. Sunucu amacı bağlantı zamanında ve USE veritabanı deyimi sırasında zorlar, ancak yalnızca Always On etkin bir veritabanına uygular.

Anahtar ApplicationIntent sözcük eski, salt okunur veritabanlarıyla çalışmaz.

Veritabanı, hedeflenen AlwaysOn veritabanındaki okuma iş yüklerine izin verebilir veya izin verebilir. (Bu işlem ve SECONDARY_ROLETransact-SQL deyimlerinin PRIMARY_ROLE yan tümcesiyle ALLOW_CONNECTIONS yapılır.)

ApplicationIntent anahtar sözcüğü salt okunur yönlendirmeyi etkinleştirmek için kullanılır.

Salt Okunur Yönlendirme

Salt okunur yönlendirme, bir veritabanının salt okunur çoğaltmasının kullanılabilirliğini sağlayabilen bir özelliktir. Salt okunur yönlendirmeyi etkinleştirmek için:

  1. Always On Kullanılabilirlik Grubu kullanılabilirlik grubu dinleyicisine bağlanmanız gerekir.

  2. ApplicationIntent bağlantı dizesi anahtar sözcüğü olarak ReadOnlyayarlanmalıdır.

  3. Salt okunur yönlendirmeyi etkinleştirmek için Kullanılabilirlik Grubu veritabanı yöneticisi tarafından yapılandırılmalıdır.

Salt okunur yönlendirme kullanan birden çok bağlantının tümü aynı salt okunur çoğaltmaya bağlanmayabilir. Veritabanı eşitlemesindeki değişiklikler veya sunucunun yönlendirme yapılandırmasındaki değişiklikler, istemcinin farklı salt okunur çoğaltmalara bağlanmasına neden olabilir. Tüm salt okunur isteklerin aynı salt okunur çoğaltmaya bağlandığından emin olmak için, bağlantı dizesi anahtar sözcüğüne bir kullanılabilirlik grubu dinleyicisi Data Source geçirmeyin. Bunun yerine salt okunur örneğin adını belirtin.

Salt okunur yönlendirme birincile bağlanmaktan daha uzun sürebilir çünkü salt okunur yönlendirme önce birincile bağlanır ve ardından kullanılabilir en iyi okunabilir ikincil değeri arar. Bu nedenle oturum açma zaman aşımınızı artırmalısınız.

Ayrıca bkz.