sql >> Databáze >  >> RDS >> Database

Směrování pouze pro čtení pro Always On

Jako správci databází se obvykle setkáváme s tím, že si naši klienti stěžují, že současný produkční server není schopen udržet zátěž na serveru a zda může být zátěž vyvážena se sekundárním serverem. To je možné s databází na serveru DR s databází pouze pro čtení v Log Shipping a sekundárními replikami SQL Serveru ve skupině Always On Availability Group. Největší výhodou Always On Groups je, že nám umožňuje nastavit HA na úrovni skupiny pro libovolný počet databází a můžeme vytvořit až čtyři sekundární repliky, což je kombinace Clustering, Log Shipping a Database Mirroring, kde probíhá přenos dat. flexibilnější a funkčnější.

Sekundární replika Always On Readable má funkci pro zpracování konkrétních požadavků na připojení pouze pro čtení nazývané směrování pouze pro čtení. Obecně platí, že ve výchozím nastavení je čtení i záměr čtení směrováno na primární repliku a pro sekundární repliky není nic určeno. Nyní lze sekundární repliky používat nejen pro účely zálohování, DBCC a vytváření sestav, ale lze je také v budoucnu dotazovat pomocí „ReadOnly“ jako jejich aplikačního záměru v připojovacím řetězci aplikace.

V clusteru převzetí služeb při selhání Windows máme tři repliky SQL1, SQL2 a SQL3. Každý uzel má nainstalovanou samostatnou instanci SQL Server 2012 a nakonfigurovanou s Always On AG. Vždy jsme ve skupině AG s názvem „CODEAG“ s názvem posluchače „CODELIS“

Na následujícím snímku obrazovky je SQL1 primární replika, SQL2 je sekundární replika, SQL3 je sekundární replika.

Jak nakonfigurovat seznam směrování pouze pro čtení ve skupinách dostupnosti vždy v dostupnosti

Krok 1:

Spojení se skupinou dostupnosti se uskutečňují pomocí jména nebo IP adresy posluchače. Chcete-li nyní vytvořit více posluchačů pro jednu skupinu dostupnosti, postupujte podle níže uvedeného postupu.

Ruční vytvoření nebo konfigurace posluchače pro skupinu dostupnosti

  1. V Průzkumníku objektů se připojte k instanci, která obsahuje primární repliku skupiny dostupnosti.
  2. Rozbalte skupinu AON a klikněte na skupinu dostupnosti, pro kterou se pokoušíme ručně nakonfigurovat posluchače a pokračovat.
  3. Klikněte pravým tlačítkem na uzel skupinových posluchačů dostupnosti a vyberte příkaz Nový posluchač. Tím se otevře nové dialogové okno pro konfiguraci posluchače.
  4. Číslo portu existujícího posluchače lze změnit rozbalením uzlu skupiny posluchačů dostupnosti a následným kliknutím pravým tlačítkem na posluchače a výběrem vlastností.
  5. Nyní zadejte nové číslo portu a klikněte na OK.

Identifikujte název posluchače nakonfigurovaný pro replikaci Always On dotazem DMV, jak je uvedeno níže.

SELECT AV.name AS AVGNname, AVGLis.dns_name AS ListenerName, AVGLis.ip_configuration_string_from_cluster AS ListenerIPFROM sys.availability_group_listeners AVGLisINNER JOIN sys.availability_groups AV na AV.group_id =AV.group_id
Na následujícím snímku obrazovky je název skupiny AG CODEAG a IP posluchače AG je CODELIS.

Krok 2:

Abychom nakonfigurovali směrování pouze pro čtení, musíme repliky nakonfigurovat tak, aby umožňovaly pouze čtení se sekundárními replikami.

  1. Připojte se k instanci, která obsahuje primární repliku.
  2. Rozbalte uzel AON High Availability Node a poté uzel AG Group.
  3. Klikněte na skupinu AG, jejíž replika by měla být změněna.
  4. Klikněte pravým tlačítkem na repliku a vyberte vlastnosti, chcete-li změnit přístup k připojení pro primární a sekundární roli, a to následovně.

Sekundární role má novou hodnotu z čitelného sekundárního rozevíracího seznamu.

Pouze pro čtení

Tato volba umožňuje přístup ke čtení sekundárních databází této repliky. Jsou povolena pouze připojení pouze pro čtení.

Ano

Tato volba umožňuje přístup pouze pro čtení, ale všechna připojení jsou povolena pro sekundární repliku.

Ne

To zastaví všechna uživatelská připojení k sekundární replice a nedovolí vám ani číst.

Nastavte čitelné sekundární vlastnosti na Pouze pro čtení

Na následujícím snímku obrazovky jsou vlastnosti Readable Secondary každé sekundární repliky nastaveny na hodnotu Read-intent only.

Krok 3:

Každé čitelné sekundární replice lze přiřadit směrovací adresu URL určenou pouze pro čtení, která bude použita pro směrování požadavků na připojení se záměrem čtení na konkrétní čitelnou sekundární repliku.

Pomocí T-SQL zadejte směrovací adresu URL pouze pro čtení pro všechny repliky v naší skupině dostupnosti.

ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]UPRAVIT REPLICU ONN'SQL1' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =POUZE ČTENÍ));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]ZMĚNIT REPLICU ONN'SQL1' WITH (SECONDARY'RTCING_OUTURL_URL_URL .abc.com:17999'));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]ZMĚNIT REPLICU ONN'SQL2' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =POUZE ČTĚTE));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]ZMĚNIT 2'REPLICA ONNING_URL_SQL (CONDARY_URL) N'TCP://SQL2.abc.com:17999'));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]UPRAVIT REPLIKA ONN'SQL3' WITH(SEKUNDÁRNÍ_ROLE (ALLOW_CONNECTIONS =POUZE ČTĚTE));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]ZMĚNIT ZMĚNIT SQL' ' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://SQL3.abc.com:17999'));

Krok 4:

U repliky, kterou označujeme jako směrování pouze pro čtení, když se jedná o primární repliku, je potřeba zadat seznam směrování pouze pro čtení a to se projeví pouze tehdy, když místní replika běží pod primární rolí.

ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]ZMĚNIT REPLICU ONN'SQL1' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3')));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]MODIFIKOVAT REPLICU ONN'SQL1' (READ_ONLY_ROUTING_LIST=('SQL2','SQL3'))); =('SQL2','SQL1')));ZMĚNIT SKUPINU DOSTUPNOSTI [CODEAG]UPRAVIT REPLIKU ONN'SQL2' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1')));

Ve výše uvedeném skriptu, v příkladu, kdy je SQL1 primární replikou, bude pracovní zátěž pouze pro čtení přesměrována na čitelné sekundární repliky; SQL2 a SQL3:podobně, pokud je SQL3 primární replikou, pracovní zátěž pouze pro čtení bude přesměrována na čitelné sekundární repliky; SQL2 a SQL1.

Provoz řízený pouze pro čtení bude směrován na první dostupnou repliku, dokud nebude dostupná, bude směrovat provoz na další dostupnou repliku v seznamu směrování. Když máte více než jednu repliku, není možné sdílet zátěž mezi replikami až do SQL Server 2012 a 2014. Ale SQL server 2016 vám umožňuje vyvážit zátěž mezi replikami pouze pro čtení.

Příklad:

ZMĚŇTE SKUPINU DOSTUPNOSTI [CODEAG]UPRAVTE REPLIKACI ONN'SQL2' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('SQL3','SQL1'), 'SQL2')));

Toto chování seznamu směrování „vyrovnává zatížení“ připojení pouze pro čtení mezi SQL3 a SQL1. Výše máme dva vložené seznamy v seznamu směrování:

Seznam 1:‚SQL3‘, ‚SQL1‘

Seznam 2:‚SQL2‘

Nasměrujte na repliky v prvním seznamu. SQL3 a SQL1 jsou přístupné pro připojení pouze pro čtení. První příchozí připojení pouze pro čtení bude směrováno na SQL3, druhé připojení pouze pro čtení bude směrováno na SQL1, třetí připojení pouze pro čtení bude směrováno na SQL3, čtvrté připojení pouze pro čtení bude směrováno na SQL1 a tak dále, s distribucí „round-robin“ připojení pouze pro čtení mezi dvěma replikami v prvním seznamu.

Pokud některé repliky nebudou dostupné, bude směrování pokračovat se zbývajícími replikami v prvním seznamu. Pokud se SQL3 nebo SQL1 stanou nedostupnými pro připojení pouze pro čtení, budou připojení pouze pro čtení směrována pouze na dostupné repliky pouze pro čtení v prvním seznamu. Pokud je například SQL3 v nesynchronizovaném stavu nebo je ALLOW_CONNECTIONS nastaveno na NO, budou všechna připojení pouze pro čtení směrována do SQL1. Dokud je jeden ze serverů dostupný pro připojení pouze pro čtení, ŽÁDNÁ připojení pouze pro čtení nebudou směrována do SQL2.

Pokud jsou všechny repliky v prvním seznamu nepřístupné, trasa k replikám v dalším seznamu. Pokud se SQL3 a SQL1 stanou nedostupnými pro připojení pouze pro čtení, všechna připojení pouze pro čtení budou směrována pouze do dalšího seznamu replik, což je v tomto případě SQL2.

Obnovte směrování na první seznam, pokud budou dostupné nějaké repliky. Jakmile budou sekundární repliky, které mají v seznamu vyšší prioritu, přístupné pro připojení pouze pro čtení, budoucí připojení pouze pro čtení se k nim připojí podle potřeby.

V SQL Server 2016 můžete nakonfigurovat vyrovnávání zátěže v rámci sady replik pouze pro čtení.

Krok 5:

sys.availability_read_only_routing_lists DMV, který vrací seznam směrování pouze pro čtení každé repliky skupiny dostupnosti ve skupině Always On Availability.

SELECT AVGSrc.replica_server_name AS SourceReplica , AVGRepl.replica_server_name AS ReadOnlyReplica, AVGRepl.read_only_routing_url AS RoutingURL, AVGRL.routing_priority AS RoutingPriorityFROM sys.availability_read_only_routing_lists AVGRLINNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id =AVGSrc.replica_idINNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id =AVGRepl.replica_idINNER PŘIPOJIT SE k sys.availability_groups AV ON AV.group_id =AVGSrc.group_idORDER BY SourceReplica

Na následujícím snímku obrazovky výsledek ukazuje směrovací adresu URL a prioritu směrování.

Krok 6:

Chcete-li otestovat směrování pouze pro čtení pomocí SQLCMD, použijte parametr –K ReadOnly, který ukazuje sekundární repliku přijímající připojení pro čtení podle seznamu směrování.

Na následujícím snímku obrazovky sekundární replika přijímá připojení pro čtení, tj.… SQL2.

Krok 7:

Převezměte skupinu dostupnosti při selhání a otestujte směrování pouze pro čtení.

  1. V Průzkumníku objektů se připojte k instanci serveru, která je hostitelem sekundární repliky skupiny dostupnosti, kterou je třeba převzít při selhání. Rozbalte strom serveru.
  2. Rozbalte uzel AlwaysOn High Availability a Availability Groups.
  3. Klikněte pravým tlačítkem na skupinu dostupnosti, kterou chcete převzít při selhání, a vyberte možnost Failover.

Nyní se SQL2 stává primární replikou a připojení zpracovává SQL1.

Syntaxe připojovacího řetězce, kterou by aplikace měla používat, bude záviset na poskytovateli SQL Server.

Pokud se jedná o .Net Framework Data Provider 4.0.2 pro SQL Server, syntaxe bude následující:

Server=tcp:MyAgListener,číslo portu;Databáze=SQL1;IntegratedSecurity=SSPI;ApplicationIntent=Pouze pro čtení;MultiSubnetFailover=True

Závěr:

Chcete-li snížit zátěž, toto směrování pouze pro čtení zůstává nejlepší volbou. Aplikace zahrnující SQL Server Reporting Services hostované v SharePointu nebo instalaci serveru sestav v nativním režimu mohou používat záměr pouze pro čtení, který se vyhýbá typickému blokování, využití paměti a CPU na primárních uzlech.


  1. Jak načíst data z databáze SQL Server v C#?

  2. Porovnání datových úložišť pro PostgreSQL - MVCC vs InnoDB

  3. Proces upgradu krok za krokem na R12.2 Upgrade část -2 (hlavní upgrade ovladače pro R12.2.0)

  4. Vytvořte tabulku (strukturu) z existující tabulky