Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server v Linuxu
Tento článek popisuje, jak vytvořit skupinu dostupnosti AlwaysOn (AG) SQL Serveru pro zajištění vysoké dostupnosti v Linuxu. Existují dva typy konfigurace pro AG. Konfigurace vysoké dostupnosti využívá správce clusteru k zajištění provozní kontinuity. Tato konfigurace může také zahrnovat repliky na úrovni čtení. Tento článek vysvětluje, jak vytvořit AG pro vysokou dostupnost.
Můžete také vytvořit skupinu dostupnosti bez správce clusteru pro škálování čtení . Skupina pro čtení ve škále poskytuje pouze repliky pro čtení pro zvýšení výkonu. Neposkytuje vysokou dostupnost. Pokud chcete vytvořit skupinu dostupnosti pro čtení, přečtěte si téma Konfigurace skupiny dostupnosti SQL Serveru pro škálování čtení v Linuxu.
Konfigurace, které zaručují vysokou dostupnost a ochranu dat, vyžadují buď dvě nebo tři synchronní repliky potvrzení. S třemi synchronními replikami může AG automaticky obnovit, i když jeden server není dostupný. Další informace najdete v tématu Vysoká dostupnost a ochrana dat pro konfigurace skupin dostupnosti.
Všechny servery musí být fyzické nebo virtuální a virtuální servery musí být na stejné virtualizační platformě. Tento požadavek existuje, protože agenti ohraničení jsou specifická pro platformu. Viz zásady pro clustery hostů.
Instalační kroky
Kroky pro vytvoření AG (skupiny dostupnosti) na serverech s Linuxem pro vysokou dostupnost se liší od postupu ve Windows Server failover clusteru. Následující seznam popisuje základní kroky:
Pokyny k instalaci SQL Serveru v Linuxu
Důležité
Všechny tři servery v Availability Group musí být na stejné platformě – fyzické nebo virtuální – protože Linuxová vysoká dostupnost využívá agenty fence k izolaci prostředků na serverech. Fencingoví agenti jsou specifičtí pro každou platformu.
Vytvořte AG. Tento krok je popsaný v tomto aktuálním článku.
Nakonfigurujte správce prostředků clusteru, například Pacemaker.
Způsob konfigurace správce prostředků clusteru závisí na konkrétní distribuci Linuxu. Pokyny pro distribuci najdete na následujících odkazech:
Důležité
Produkční prostředí vyžadují fencing agenta pro zajištění vysoké dostupnosti. Příklady v tomto článku nepoužívají bariérové agenty. Slouží pouze k testování a ověřování.
Cluster Pacemaker používá funkci "fencing" k obnovení clusteru do známého stavu. Způsob konfigurace ohraničení závisí na distribuci a prostředí. V některých cloudových prostředích v současné době není k dispozici izolace. Další informace najdete v tématu Zásady podpory pro clustery s vysokou dostupností RHEL – Virtualizační platformy.
Informace o SLES najdete v tématu SUSE Linux Enterprise rozšíření pro vysokou dostupnost.
Přidejte AG jako prostředek v clusteru.
Způsob přidání AG jako prostředku v clusteru závisí na distribuci Linuxu. Pokyny pro distribuci najdete na následujících odkazech:
Úvahy o několika síťových rozhraních
Informace o nastavení skupiny dostupnosti pro servery s několika síťovými adaptéry najdete v příslušných částech:
Požadavky
Před vytvořením skupiny dostupnosti proveďte následující kroky:
- Nastavte své prostředí tak, aby všechny servery, které hostují repliky dostupnosti, mohly komunikovat.
- Nainstalujte SQL Server.
V Linuxu musíte vytvořit skupinu dostupnosti, než ji přidáte jako prostředek clusteru, který bude cluster spravovat. Tento článek obsahuje příklad, který vytvoří skupinu dostupnosti.
Aktualizujte název počítače pro každého hostitele.
Každý název instance SQL Serveru musí být:
- 15 znaků nebo méně.
- Jedinečné v rámci sítě.
Chcete-li nastavit název počítače, upravte
/etc/hostname. Následující příklad ukazuje, jak upravit/etc/hostnamepomocí vi:sudo vi /etc/hostnameNakonfigurujte soubor hostitelů.
Poznámka:
Pokud server DNS zaregistruje názvy hostitelů s jejich IP adresami, nemusíte provádět následující kroky. Ověřte, že všechny uzly, které mají být součástí konfigurace skupiny dostupnosti, spolu můžou komunikovat. (Příkaz ping na název hostitele by měl vrátit odpovídající IP adresu.) Ujistěte se také, že soubor
/etc/hostsneobsahuje záznam, který mapuje IP adresu localhost 127.0.0.1 na název hostitele uzlu.Soubor hostitelů na každém serveru obsahuje IP adresy a názvy všech serverů, které se účastní skupiny dostupnosti.
Následující příkaz vrátí IP adresu aktuálního serveru:
sudo ip addr showAktualizace
/etc/hosts. Následující příklad ukazuje, jak upravit/etc/hostspomocí vi:sudo vi /etc/hostsNásledující příklad ukazuje
/etc/hostsnanode1s doplňky pronode1,node2anode3. V této ukázcenode1odkazuje na server, který je hostitelem primární repliky, anode2anode3odkazovat na servery, které hostují sekundární repliky.127.0.0.1 localhost localhost4 localhost4.localdomain4 ::1 localhost localhost6 localhost6.localdomain6 10.128.18.12 node1 10.128.16.77 node2 10.128.15.33 node3
Instalace SQL Serveru
Nainstalujte SQL Server. Následující odkazy odkazují na pokyny k instalaci SQL Serveru pro různé distribuce:
- Rychlý start: Instalace SQL Serveru a vytvoření databáze v Red Hat Enterprise Linuxu
- Rychlý start: Instalace SQL Serveru a vytvoření databáze na SUSE Linux Enterprise Server
- rychlý start pro : Instalace SQL Serveru a vytvoření databáze na Ubuntu
Poznámka:
Počínaje SQL Serverem 2025 (17.x) se nepodporuje SUSE Linux Enterprise Server (SLES).
Povolení skupin dostupnosti AlwaysOn
Povolte skupiny dostupnosti AlwaysOn pro každý uzel, který je hostitelem instance SQL Serveru, a restartujte mssql-server. Spusťte následující skript:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Povolte relaci událostí AlwaysOn_health
Volitelně můžete povolit rozšířené události (XE), které vám pomůžou s diagnostikou původní příčiny při řešení potíží se skupinou dostupnosti. Na každé instanci SQL Serveru spusťte následující příkaz:
ALTER EVENT SESSION AlwaysOn_health ON SERVER
WITH (STARTUP_STATE = ON);
GO
Další informace o tomto sezení XE naleznete v tématu Konfigurace rozšířených událostí pro skupiny dostupnosti.
Vytvoření certifikátu
Služba SQL Serveru v Linuxu používá certifikáty k ověření komunikace mezi koncovými body zrcadlení.
Následující Transact-SQL skript vytvoří hlavní klíč a certifikát. Pak zálohuje certifikát a zabezpečí soubor privátním klíčem. Aktualizujte skript silnými hesly. Připojte se k primární instanci SQL Serveru. Certifikát vytvoříte spuštěním následujícího skriptu Transact-SQL:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
CREATE CERTIFICATE dbm_certificate
WITH SUBJECT = 'dbm';
BACKUP CERTIFICATE dbm_certificate
TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY (
FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
ENCRYPTION BY PASSWORD = '<private-key-password>'
);
V tomto okamžiku má primární replika SQL Serveru certifikát v /var/opt/mssql/data/dbm_certificate.cer a privátní klíč v /var/opt/mssql/data/dbm_certificate.pvk. Zkopírujte tyto dva soubory do stejného umístění na všech serverech, které hostují repliky dostupnosti. Použijte uživatele mssql nebo udělte uživateli mssql oprávnění pro přístup k těmto souborům.
Například na zdrojovém serveru následující příkaz zkopíruje soubory do cílového počítače.
<node2> Nahraďte hodnoty názvy instancí SYSTÉMU SQL Server, které hostují repliky.
cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/
Na každém cílovém serveru udělte uživateli mssql oprávnění pro přístup k certifikátu.
cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*
Vytvoření certifikátu na sekundárních serverech
Následující skript Transact-SQL vytvoří hlavní klíč a certifikát ze zálohy, kterou jste vytvořili na primární replice SQL Serveru. Aktualizujte skript silnými hesly. Dešifrovací heslo je stejné heslo, které jste použili k vytvoření souboru .pvk v předchozím kroku. Certifikát vytvoříte spuštěním následujícího skriptu na všech sekundárních serverech:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
CREATE CERTIFICATE dbm_certificate
FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY (
FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
DECRYPTION BY PASSWORD = '<private-key-password>'
);
V předchozím příkladu nahraďte <private-key-password> stejným heslem, které jste použili při vytváření certifikátu na primární replice.
Vytvořte koncové body pro zrcadlení databáze na všech replikách
Koncové body zrcadlení databáze používají protokol TCP (Transmission Control Protocol) k odesílání a přijímání zpráv mezi instancemi serveru, které se účastní relací zrcadlení databáze, nebo replikami dostupnosti hostitele. Koncový bod zrcadlení databáze naslouchá jedinečnému číslu portu TCP.
Následující skript Transact-SQL vytvoří koncový bod naslouchání s názvem Hadr_endpoint pro skupinu dostupnosti. Spustí koncový bod a udělí připojení k certifikátu, který jste vytvořili. Před spuštěním skriptu nahraďte hodnoty mezi < ... >. Volitelně můžete zahrnout IP adresu LISTENER_IP = (0.0.0.0). IP adresa naslouchacího procesu musí být adresa IPv4. Můžete také použít 0.0.0.0.
Aktualizujte následující Transact-SQL skript pro vaše prostředí ve všech instancích SQL Serveru:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING
(
ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
ALTER ENDPOINT [Hadr_endpoint]
STATE = STARTED;
Poznámka:
Pokud k hostování repliky jen pro konfiguraci používáte edici SQL Serveru Express na jednom uzlu, jedinou platnou hodnotou pro ROLE je WITNESS. V edici SQL Server Express spusťte následující skript:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING
(
ROLE = WITNESS,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
ALTER ENDPOINT [Hadr_endpoint]
STATE = STARTED;
Musíte na bráně firewall otevřít TCP port pro port naslouchání.
Důležité
Jedinou metodou ověřování podporovanou pro koncový bod zrcadlení databáze je CERTIFICATE. Možnost WINDOWS není dostupná.
Další informace najdete v tématu Koncový bod zrcadlení databáze (SQL Server).
Vytvořit AG
Příklady v této části vysvětlují, jak vytvořit skupinu dostupnosti pomocí jazyka Transact-SQL. Můžete také použít průvodce skupinou dostupnosti aplikace SQL Server Management Studio. Při vytváření skupiny dostupnosti pomocí průvodce vrátí chybu při připojení replik ke skupině dostupnosti. Chcete-li tuto chybu opravit, udělte ALTER, CONTROL a VIEW DEFINITIONS programu pacemaker na skupině dostupnosti u všech replik. cs-CZ: Jakmile udělíte oprávnění k primární replice, připojte uzly ke skupině dostupnosti pomocí průvodce, ale aby byla vysoká dostupnost správně funkční, udělte oprávnění pro všechny repliky.
Pro konfiguraci vysoké dostupnosti, která zajišťuje automatické převzetí služeb při selhání, vyžaduje skupina dostupnosti (AG) aspoň tři repliky. K vysoké dostupnosti mohou přispět některé z následujících konfigurací:
Další informace najdete v tématu Vysoká dostupnost a ochrana dat pro konfigurace skupin dostupnosti.
Poznámka:
Skupiny dostupnosti můžou zahrnovat další synchronní nebo asynchronní repliky.
Vytvořte skupinu dostupnosti pro vysokou dostupnost na Linuxu. Použijte příkaz CREATE AVAILABILITY GROUP s CLUSTER_TYPE = EXTERNAL.
Skupina dostupnosti:
CLUSTER_TYPE = EXTERNAL.Určuje, že externí entita clusteru spravuje skupinu dostupnosti. Pacemaker je příkladem entity externího clusteru. Pokud je typ klastru AG externí,
Nastavte primární a sekundární repliky:
FAILOVER_MODE = EXTERNAL.Určuje, že replika komunikuje s externím správcem clusteru, jako je Pacemaker.
Následující skripty Transact-SQL vytvoří skupinu dostupnosti pro vysokou dostupnost s názvem ag1. Skript nakonfiguruje repliky AG pomocí SEEDING_MODE = AUTOMATIC. Toto nastavení způsobí, že SQL Server automaticky vytvoří databázi na každém sekundárním serveru. Aktualizujte následující skript pro vaše prostředí. Nahraďte hodnoty <node1>, <node2>nebo <node3> názvy instancí SYSTÉMU SQL Server, které hostují repliky. Nahraďte <5022> portem, který jste nastavili pro koncový bod zrcadlení dat. Pokud chcete vytvořit AG, spusťte v instanci SQL Serveru, která je hostitelem primární repliky, následující Transact-SQL.
Spusťte pouze jeden z následujících skriptů.
- Vytvoření skupiny dostupnosti se třemi synchronními replikami
- Vytvořte skupinu dostupnosti se dvěma synchronními replikami a konfigurační replikou
- Vytvoření skupiny dostupnosti se dvěma synchronními replikami
Porovná název uzlu s vlastností ServerName.
V aktuální implementaci agenta prostředků SQL Serveru musí název uzlu odpovídat vlastnosti ServerName z vaší instance. Například pokud je název vašeho uzlu node1, ujistěte se, že SERVERPROPERTY('ServerName') vrací node1 ve vaší instanci SQL Serveru. Pokud dojde k neshodě, vaše repliky po vytvoření zdroje Pacemaker přejdou do stavu řešení.
Toto pravidlo je důležité, pokud používáte plně kvalifikované názvy domén. Pokud například použijete node1.yourdomain.com jako název uzlu během instalace clusteru, ujistěte se, že SERVERPROPERTY('ServerName') se vrátí node1.yourdomain.com, a ne jen node1. Pokud chcete tento problém vyřešit, můžete:
- Přejmenujte hostitelský název na plně kvalifikovaný název domény a pomocí uložených procedur
sp_dropserverasp_addserverzajistěte, aby metadata v SQL Serveru odpovídala změně. - Použijte možnost
addrv příkazupcs cluster auth, aby se název uzlu shodoval s hodnotouSERVERPROPERTY('ServerName')a jako adresu uzlu použijte statickou IP adresu.
Vytvoření skupiny dostupnosti se třemi synchronními replikami
Vytvořte skupinu dostupnosti se třemi synchronními replikami:
CREATE AVAILABILITY GROUP [ag1]
WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'<node1>'
WITH (
ENDPOINT_URL = N'tcp://<node1>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node2>'
WITH (
ENDPOINT_URL = N'tcp://<node2>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node3>'
WITH(
ENDPOINT_URL = N'tcp://<node3>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Důležité
Po spuštění předchozího skriptu k vytvoření skupiny dostupnosti se třemi synchronními replikami nespouštějte následující skript:
Vytvoření skupiny dostupnosti se dvěma synchronními replikami a replikou konfigurace
Vytvořte skupinu dostupnosti se dvěma synchronními replikami a konfigurační replikou:
Důležité
Tato architektura umožňuje hostování třetí repliky v libovolné edici SQL Serveru. Třetí repliku je například možné hostovat v edici SQL Server Express. V Express Edition je jediným platným typem koncového bodu WITNESS.
CREATE AVAILABILITY GROUP [ag1]
WITH (CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'<node1>' WITH (
ENDPOINT_URL = N'tcp://<node1>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node2>' WITH (
ENDPOINT_URL = N'tcp://<node2>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node3>' WITH (
ENDPOINT_URL = N'tcp://<node3>:<5022>',
AVAILABILITY_MODE = CONFIGURATION_ONLY
);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Vytvoření skupiny dostupnosti se dvěma synchronními replikami
Vytvořte skupinu dostupnosti (AG) se dvěma synchronními replikami.
Zahrnout dvě repliky s synchronním režimem dostupnosti. Například následující skript vytvoří AG s názvem ag1.
node1 a node2 hostují repliky v synchronním režimu s automatickým nasazením a automatickým převzetím služeb při selhání.
Důležité
Spusťte pouze následující skript k vytvoření skupiny dostupnosti (AG) se dvěma synchronními replikami. Pokud jste spustili předchozí skript, nespustíte následující skript.
CREATE AVAILABILITY GROUP [ag1]
WITH (CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'node1' WITH (
ENDPOINT_URL = N'tcp://node1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'node2' WITH (
ENDPOINT_URL = N'tcp://node2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Můžete také nakonfigurovat dostupnostní skupinu s CLUSTER_TYPE=EXTERNAL pomocí SQL Server Management Studia nebo příkazového řádku PowerShell.
Připojení sekundárních replik ke skupině AG
Uživatel Pacemaker potřebuje ALTER, CONTROL a VIEW DEFINITION oprávnění ke skupině dostupnosti ve všech replikách. Pokud chcete těmto oprávněním udělit, spusťte po vytvoření skupiny dostupnosti na primární replice následující skript Transact-SQL. Spusťte skript na každé sekundární replice hned po jejich přidání do skupiny dostupnosti. Před spuštěním skriptu nahraďte <pacemakerLogin> názvem uživatelského účtu Pacemaker. Pokud nemáte přihlášení k Pacemakeru, vytvořte přihlášení k SQL Serveru pro Pacemaker.
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO <pacemakerLogin>
GRANT VIEW SERVER STATE TO <pacemakerLogin>
Následující Transact-SQL skript připojí instanci SQL Serveru ke skupině dostupnosti s názvem ag1. Aktualizujte skript pro vaše prostředí. Na každé instanci SQL Serveru, která je hostitelem sekundární repliky, spusťte následující Transact-SQL pro připojení k dostupné skupině.
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Poznámka:
Pro repliku konfigurace je potřeba jenom krok připojení.
Přidání databáze do skupiny dostupnosti
Ujistěte se, že databáze, kterou přidáte do skupiny dostupnosti, je v úplném modelu obnovení a má platnou zálohu protokolu. Pokud je vaše databáze testovací nebo nově vytvořená databáze, vytvořte zálohu databáze. Na primárním SQL Serveru spusťte následující skript Transact-SQL (T-SQL), který vytvoří a zálohuje databázi s názvem db1:
CREATE DATABASE [db1];
GO
ALTER DATABASE [db1]
SET RECOVERY FULL;
GO
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
Na primární replice SQL Serveru spusťte následující skript T-SQL, který přidá databázi s názvem db1 do skupiny dostupnosti s názvem ag1:
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
Ověřte, že je databáze vytvořená na sekundárních serverech.
Na každé sekundární replice SQL Serveru spusťte následující dotaz, abyste zjistili, jestli byla vytvořena db1 databáze a synchronizována:
SELECT *
FROM sys.databases
WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database',
synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO
Po vytvoření AG musíte nakonfigurovat integraci s technologií clusteru, aby byla zajištěna vysoká dostupnost, například s technologií jako je Pacemaker. Pro konfiguraci škálování čtení pomocí skupin AG počínaje SQL Serverem 2017 (14.x) není nastavení clusteru povinné.
Pokud jste postupovali podle kroků v tomto článku, máte skupinu dostupnosti, která ještě nebyla zařazena do clusteru. Dalším krokem je přidání clusteru. Tato konfigurace je platná pro scénáře škálování čtení a vyrovnávání zatížení, ale není úplná pro zajištění vysoké dostupnosti. Pokud chcete zajistit vysokou dostupnost, musíte přidat AG jako prostředek clusteru. Pokyny najdete v tématu Související obsah.
Poznámky
Po nakonfigurování clusteru a přidání AG jako prostředku clusteru nemůžete použít Transact-SQL k převzetí prostředků AG při selhání. Prostředky clusteru SQL Serveru na Linuxu nejsou tak úzce propojené s operačním systémem jako na clusteru převzetí služeb při selhání Windows Serveru (WSFC). Služba SQL Serveru neví o přítomnosti clusteru. Veškerá orchestrace se provádí prostřednictvím nástrojů pro správu clusteru. V RHEL nebo Ubuntu použijte pcs. V SLES použijte crm.
Pokud je AG prostředkem clusteru, v aktuální verzi je známý problém, kdy vynucené převzetí služeb se ztrátou dat na asynchronní repliku nefunguje. Tento problém bude opraven v nadcházející verzi. Ruční nebo automatické převzetí služeb při selhání synchronní repliky proběhne úspěšně.