Sdílet prostřednictvím


Konfigurace skupiny dostupnosti AlwaysOn sql Serveru pro zajištění vysoké dostupnosti v Linuxu

platí pro:SQL Server – Linux

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 dokument 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 je daný tím, že fencing agenti jsou specifičtí pro platformu. Viz zásady pro clustery hostů.

Plán

Kroky pro vytvoření skupiny pro vysokou dostupnost na linuxových serverech se liší od kroků na clusteru pro převzetí služeb při selhání na serveru Windows. Následující seznam popisuje základní kroky:

  1. Pokyny k instalaci SQL Serveru v linuxovém.

    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.

  2. Vytvořte AG. Tento krok je popsaný v tomto aktuálním článku.

  3. 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í potřebují ošetřujícího agenta pro zajištění vysoké dostupnosti. Příklady v tomto článku nepoužívají zajišťovací 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.

  4. 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 vícero 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 musíte:

  • Nastavte prostředí tak, aby všechny servery, které budou hostovat 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 spravovat cluster. Tento dokument obsahuje příklad, který vytvoří skupinu dostupnosti.

  1. 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í skript umožňuje upravovat /etc/hostname pomocí vi:

    sudo vi /etc/hostname
    
  2. Nakonfigurujte soubor hostitelů.

    Poznámka

    Pokud jsou názvy hostitelů zaregistrované s jejich IP adresou na serveru DNS, 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. (Ping na název hostitele by měl vrátit odpovídající IP adresu.) Ujistěte se také, že soubor /etc/hosts neobsahuje záznam, který mapuje IP adresu localhost 127.0.0.1 s názvem hostitele nódu.

    Soubor hostitelů na každém serveru obsahuje IP adresy a názvy všech serverů, které se budou účastnit skupiny dostupnosti.

    Následující příkaz vrátí IP adresu aktuálního serveru:

    sudo ip addr show
    

    Aktualizovat /etc/hosts. Následující skript umožňuje upravovat /etc/hosts pomocí vi:

    sudo vi /etc/hosts
    

    Následující příklad ukazuje /etc/hosts na node1 s doplňky pro node1, node2a node3. V této ukázce node1 odkazuje na server, který je hostitelem primární repliky, a node2 a node3 odkazovat 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:

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

Povolit 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é budou hostovat 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. Nahraďte hodnoty <node2> názvy instancí SYSTÉMU SQL Server, které budou hostovat 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 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;

Port TCP na bráně firewall musí být otevřený pro naslouchací port.

Důležitý

Pro SQL Server 2017 (14.x) je jediná metoda ověřování podporovaná pro koncový bod zrcadlení databáze 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 s průvodcem se objeví chyba při připojování replik ke skupině dostupnosti. Pokud chcete tento problém vyřešit, udělte pacemakeru ve skupině dostupnosti pro všechny repliky práva ALTER, CONTROLa VIEW DEFINITIONS. Jakmile jsou oprávnění udělena na primární replice, připojte uzly ke skupině dostupnosti prostřednictvím průvodce, ale aby vysoká dostupnost fungovala správně, 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í:

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 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 skupiny 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.

Důležitý

V aktuální implementaci agenta prostředků SQL Serveru musí název uzlu odpovídat vlastnosti ServerName z vaší instance. Pokud je například název uzlu uzel1, ujistěte se, že serverPROPERTY('Název_serveru') vrátí uzel1 v instanci SQL Serveru. Pokud dojde k neshodě, vaše repliky po vytvoření prostředku pacemakeru přejdou do stavu řešení problému.

Scénář, ve kterém je toto pravidlo důležité, je při použití plně kvalifikovaných názvů domén. Pokud například použijete node1.yourdomain.com jako název uzlu během instalace clusteru, ujistěte se, že serverPROPERTY('ServerName') vrací node1.yourdomain.com, a ne jen uzel1. Možná alternativní řešení tohoto problému jsou:

  • Přejmenujte název hostitele na plně kvalifikovaný název domény a použijte procedury sp_dropserver a sp_addserver úložiště, abyste zajistili, že metadata v SQL Serveru odpovídají změně.
  • Pomocí možnosti addr v příkazu pcs cluster auth zadejte název uzlu k hodnotě SERVERPROPERTY('ServerName') a jako adresu uzlu použijte statickou IP adresu.

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 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 AG (skupinu dostupnosti) se dvěma synchronními replikami a jednou 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 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 vyžaduje oprávnění ALTER, CONTROLa VIEW DEFINITION pro skupinu dostupnosti na všech replikách. Pokud chcete udělit oprávnění, spusťte následující skript Transact-SQL po vytvoření skupiny dostupnosti na primární replice a každé sekundární replice ihned 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;

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

Důležitý

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 dokumentu, máte skupinu dostupnosti, která ještě není clusterovaná. Dalším krokem je přidání clusteru. Tato konfigurace je platná pro škálování čtení a vyrovnávání zatížení, ale není kompletní 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

Důležitý

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 spojeny s operačním systémem jako v případě clusteru Windows Serveru pro převzetí služeb při selhání (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žít pcs. V SLES použijte crm.

Důležitý

Pokud je AG prostředkem clusteru, v aktuální verzi je známý problém, kdy vynucené převzetí služeb při selhání se ztrátou dat na asynchronní repliku nefunguje. To bude opraveno v nadcházející verzi. Ruční nebo automatické převzetí služeb při selhání synchronní repliky proběhne úspěšně.