為 Linux 上的 SQL Server 建立和設定可用性群組

適用於:SQL Server - Linux

本教學課程說明如何為 Linux 上的 SQL Server 建立和設定可用性群組 (AG)。 與 Windows 上的 SQL Server 2016 (13.x) 和更早版本不同,您可以先啟用 AG,且不需要先建立基礎 Pacemaker 叢集。 如有需要,請勿與叢集整合,直到稍後才完成。

本教學課程包含下列工作:

  • 啟用可用性群組。
  • 建立可用性群組端點和憑證。
  • 使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 來建立可用性群組。
  • 建立 Pacemaker 的 SQL Server 登入和權限。
  • 在 Pacemaker 叢集 (僅限外部類型) 中建立可用性群組。

必要條件

部署 Pacemaker 高可用性叢集,如為 Linux 上的 SQL Server 部署 Pacemaker 叢集中所述。

啟用可用性群組功能

不同於 Windows,您無法使用 PowerShell 或 SQL Server 組態管理員 來啟用可用性群組 (AG) 功能。 在 Linux 底下,您必須使用 mssql-conf 來啟用此功能。 有兩種方式可啟用可用性群組功能:使用 mssql-conf 公用程式,或手動編輯 mssql.conf 檔案。

重要

即使在 SQL Server Express 上,也必須針對僅限組態複本啟用 AG 功能。

使用 mssql-conf 公用程式

出現提示時,發出下列命令:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

編輯 mssql.conf 檔案

您也可以修改位在 /var/opt/mssql 檔案夾下的 mssql.conf 檔案,新增下列幾行:

[hadr]

hadr.hadrenabled = 1

重新啟動 SQL Server

啟用可用性群組之後,如同在 Windows 上,您必須使用下列命令重新啟動 SQL Server:

sudo systemctl restart mssql-server

建立可用性群組端點和憑證

可用性群組會使用 TCP 端點進行通訊。 在 Linux 底下,只有在使用憑證來進行驗證時,才支援 AG 的端點。 您必須在將參與為相同 AG 中複本的所有其他實例上,從一個實例還原憑證。 即使是僅限設定複本,也需要憑證處理序。

建立端點和還原憑證只能透過 Transact-SQL 完成。 您也可以使用非 SQL Server 產生的憑證。 您也需要一個程式來管理並取代任何過期的憑證。

重要

如果您打算使用 SQL Server Management Studio 精靈來建立 AG,您仍然需要在 Linux 上使用 Transact-SQL 來建立和還原憑證。

如需各種命令可用選項的完整語法(包括安全性),請參閱:

注意

雖然您正在建立可用性群組,但端點類型會使用 FOR DATABASE_MIRRORING,因為一些基礎層面曾經與現在已被取代的功能共用。

此範例會建立三個節點組態的憑證。 實體名稱稱為 LinAGN1LinAGN2LinAGN3

  1. 在上 LinAGN1 執行下列腳本,以建立主要密鑰、憑證和端點,以及備份憑證。 在此範例中,會針對端點使用一般的 TCP 通訊埠 5022。

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
        WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL);
    GO
    
  2. 在上 LinAGN2執行相同的動作:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL);
    GO
    
  3. 最後,在上 LinAGN3執行相同的序列:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL);
    GO
    
  4. 使用 scp 或其他公用程式,將憑證的備份複製到將成為 AG 一部分的每個節點。

    針對此範例:

    • LinAGN2複製到 LinAGN1_Cert.cerLinAGN3
    • LinAGN1複製到 LinAGN2_Cert.cerLinAGN3
    • LinAGN1複製到 LinAGN3_Cert.cerLinAGN2
  5. 將擁有權以及與所複製憑證檔案相關聯的群組變更為 mssql

    sudo chown mssql:mssql <CertFileName>
    
  6. 建立與和相關聯的 LinAGN2LinAGN3LinAGN1實例層級登入和使用者。

    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  7. 在上LinAGN1還原 LinAGN2_CertLinAGN3_Cert 。 擁有其他複本的憑證是 AG 通訊和安全性的重要層面。

    CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. 授與與 LinAG2 相關聯的登入,以及 LinAGN3 連線至 上的 LinAGN1端點的許可權。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. 建立與和相關聯的 LinAGN1LinAGN3LinAGN2實例層級登入和使用者。

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  10. 在上LinAGN2還原 LinAGN1_CertLinAGN3_Cert

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. 授與與 LinAG1 相關聯的登入,以及 LinAGN3 連線至 上的 LinAGN2端點的許可權。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. 建立與和相關聯的 LinAGN1LinAGN2LinAGN3實例層級登入和使用者。

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
  13. 在上LinAGN3還原 LinAGN1_CertLinAGN2_Cert

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. 授與與 LinAG1 相關聯的登入,以及 LinAGN2 連線至 上的 LinAGN3端點的許可權。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

建立可用性群組

本節說明如何使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 來建立 SQL Server 的可用性群組。

使用 SQL Server Management Studio

本節顯示如何使用 SSMS 搭配 [新增可用性群組精靈],建立叢集類型為「外部」的 AG。

  1. 在 SSMS 中,展開 [Always On 高可用性],以滑鼠右鍵按一下 [可用性群組],然後選取 [新增可用性組精靈]。

  2. 在 [簡介] 對話方塊上,選取 [下一步]。

  3. 在 [指定可用性群組選項] 對話框中,輸入可用性群組的名稱,然後在下拉式清單中選取 或 NONE 的叢集類型EXTERNAL。 如果要部署 Pacemaker,應該使用 [外部]。 沒有適用於特殊案例,例如讀取向外延展。選取資料庫層級健全狀況偵測的選項是選擇性的。 如需此選項的詳細資訊,請參閱可用性群組資料庫層級健康情況偵測容錯移轉選項。 選取 [下一步]。

    Screenshot of Create Availability Group showing cluster type.

  4. 在 [選取資料庫] 對話框中,選取將參與 AG 的資料庫。 每個資料庫都必須有完整備份,才能將它加入 AG。 選取 [下一步]。

  5. 在 [指定複本] 對話方塊中,選取 [新增複本]。

  6. 在 [連線到伺服器] 對話方塊中,輸入將作為次要複本之 SQL Server 的 Linux 執行個體名稱,以及要連線的認證。 選取 [連線]。

  7. 針對將包含僅限設定複本或另一個次要複本的執行個體,重複前兩個步驟。

  8. 三個執行個體現在應該都會列在 [指定複本] 對話方塊中。 如果針對將成為真次要的次要複本使用 [外部] 叢集類型,請確定 [可用性模式] 與主要複本的相符,而且容錯移轉模式設定為 [外部]。 針對僅限設定複本,選取 [僅設定] 可用性模式。

    下列範例顯示的 AG 包含兩個複本、一個「外部」類型叢集,以及一個僅限設定複本。

    Screenshot of Create Availability Group showing the readable secondary option.

    下列範例顯示的 AG 包含兩個複本、一個「無」類型叢集,以及一個僅限設定複本。

    Screenshot of Create Availability Group showing the Replicas page.

  9. 如果您想要變更備份喜好設定,請選取 [備份喜好設定] 索引標籤。如需使用 AG 進行備份喜好設定的詳細資訊,請參閱 設定 Always On 可用性群組次要複本上的備份。

  10. 如果針對讀取縮放使用可讀取次要複本,或建立叢集類型為「無」的 AG,您可以選取 [接聽程式] 索引標籤來建立接聽程式。您也可以稍後再新增接聽程式。 若要建立接聽程式,請選擇 [建立可用性群組接聽程式] 選項,然後輸入名稱、TCP/IP 連接埠,以及要使用靜態或自動指派的 DHCP IP 位址。 請記住,對於叢集類型為「無」的 AG,IP 應為靜態,並設定為主要的 IP 位址。

    Screenshot of Create Availability Group showing the listener option.

  11. 如果接聽程式是為可讀取的案例建立,SSMS 17.3 或更新版本允許在精靈中建立唯讀路由。 您也可以在稍後透過 SSMS 或 Transact-SQL 新增它。 現在新增唯讀路由:

    1. 選取 [唯讀路由] 索引標籤。

    2. 輸入唯讀複本的 URL。 這些 URL 與端點相似,不同之處在於它們使用執行個體的連接埠,而不是端點。

    3. 選取每個 URL,然後從底部選取可讀取複本。 若要複選,請按住 SHIFT 或選取並拖曳。

  12. 選取 [下一步]。

  13. 選擇次要複本的初始化方式。 預設值是使用自動植入,這需要參與 AG 的所有伺服器上都有相同路徑。 您也可以讓精靈執行備份、複製和還原(第二個選項):如果您已手動備份、複製及還原復本上的資料庫,請將其聯結(第三個選項):或稍後新增資料庫(最後一個選項)。 如同憑證,如果您手動進行備份和複製備份,則必須在其他複本上設定備份文件的許可權。 選取 [下一步]。

  14. 在 [驗證] 對話框中,如果所有專案都未回復為 [成功],請調查。 某些警告是可接受的,而不是致命的,例如,如果您未建立接聽程式。 選取 [下一步]。

  15. 在 [摘要] 對話方塊上,選取 [完成]。 現在開始建立 AG 的程式。

  16. 當 AG 建立完成時,請選取 [結果] 上的 [關閉]。 您現在可以在動態管理檢視中查看複本上的 AG,以及 SSMS 中的 Always On 高可用性資料夾底下。

使用 Transact-SQL

本節顯示使用 Transact-SQL 建立 AG 的範例。 建立 AG 之後,可以設定接聽程式和唯讀路由。 AG 本身可以使用 來修改 ALTER AVAILABILITY GROUP,但無法在 SQL Server 2017 (14.x) 中變更叢集類型。 如果您不打算建立具有外部叢集類型的 AG,則必須將其刪除,並以 [無] 叢集類型加以重新建立。 如需詳細資訊和其他選項,請參閱下列連結:

範例 A:具有僅限組態複本的兩個複本(外部叢集類型)

此範例示範如何建立使用僅限設定複本的兩個複本 AG。

  1. 在將包含資料庫完整讀取/寫入複本的主要復本節點上執行。 此範例使用自動植入。

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY);
    GO
    
  2. 在連線到另一個複本的查詢視窗中,執行下列命令,將複本加入至 AG,並起始從主要複本到次要複本的植入程序。

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. 在連接到僅限設定複本的查詢視窗中,將它加入 AG。

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

範例 B:具有唯讀路由的三個複本(外部叢集類型)

此範例顯示三個完整複本,以及如何將唯讀路由設定為初始 AG 建立的一部分。

  1. 在將包含資料庫完整讀取/寫入複本的主要復本節點上執行。 此範例使用自動植入。

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    關於此設定的一些注意事項:

    • AGName 是可用性群組的名稱。
    • DBName 是與可用性群組搭配使用的資料庫名稱。 它也可以是以逗號分隔的名稱清單。
    • ListenerName 是與任何基礎伺服器/節點不同的名稱。 它將會與 一起 IPAddress在 DNS 中註冊。
    • IPAddress 是與 ListenerName相關聯的IP位址。 它也是唯一的,與任何伺服器/節點不同。 應用程式和終端使用者會使用 ListenerNameIPAddress 來連線到 AG。
    • SubnetMask 是的 IPAddress子網掩碼。 在 SQL Server 2019 (15.x) 和舊版中,這是 255.255.255.255。 在 SQL Server 2022 (16.x) 和更新版本中,這是 0.0.0.0
  2. 在連線到另一個複本的查詢視窗中,執行下列命令,將複本加入至 AG,並起始從主要複本到次要複本的植入程序。

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. 針對第三個複本重複步驟 2。

範例 C:具有唯讀路由的兩個複本(無叢集類型)

此範例示範如何使用「無」叢集類型建立兩個複本設定。 它用於不預期任何故障轉移的讀取規模案例。 這會使用迴圈配置資源功能,建立實際上是主要複本和只讀路由的接聽程式。

  1. 在將包含資料庫完整讀取/寫入複本的主要復本節點上執行。 此範例使用自動植入。
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
    N'LinAGN1' WITH (
        ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(
            ALLOW_CONNECTIONS = READ_WRITE,
            READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
        ),
        SECONDARY_ROLE(
            ALLOW_CONNECTIONS = ALL,
            READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
        )
    ),
    N'LinAGN2' WITH (
        ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                 ('LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name')
                 )),
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
    ),
    LISTENER '<ListenerName>' (WITH IP = (
             '<PrimaryReplicaIPAddress>',
             '<SubnetMask>'),
            Port = <PortOfListener>
    );
GO

其中:

  • AGName 是可用性群組的名稱。
  • DBName 是要與可用性群組搭配使用的資料庫名稱。 它也可以是以逗號分隔的名稱清單。
  • PortOfEndpoint 是所建立端點所使用的埠號碼。
  • PortOfInstance 是 SQL Server 實例所使用的埠號碼。
  • ListenerName 是與任何基礎複本不同的名稱,但實際上並未使用。
  • PrimaryReplicaIPAddress 是主要復本的IP位址。
  • SubnetMask 是的 IPAddress子網掩碼。 在 SQL Server 2019 (15.x) 和舊版中,這是 255.255.255.255。 在 SQL Server 2022 (16.x) 和更新版本中,這是 0.0.0.0
  1. 將次要複本加入 AG,並起始自動植入。

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    

建立 Pacemaker 的 SQL Server 登入和權限

基礎 Linux 上的 SQL Server 的 Pacemaker 高可用性叢集需要 SQL Server 實例的存取權,以及可用性群組本身的許可權。 這些步驟會建立登入和相關聯的權限,以及說明 Pacemaker 如何登入 SQL Server 的檔案。

  1. 在連線到第一個複本的查詢視窗中,執行下列腳本:

    CREATE LOGIN PMLogin WITH PASSWORD ='<StrongPassword>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. 在節點 1 上,輸入命令

    sudo emacs /var/opt/mssql/secrets/passwd
    

    這會開啟 Emacs 編輯器。

  3. 在編輯器中輸入下列兩行:

    PMLogin
    
    <StrongPassword>
    
  4. Ctrl按住按鍵,然後按 X,然後按 ,然後C結束並儲存盤案。

  5. 執行

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    以鎖定檔案。

  6. 在將會作為複本的其他伺服器上,重複步驟 1-5。

在 Pacemaker 叢集 (僅限外部) 中建立可用性群組

在 SQL Server 中建立可用性群組之後,如果指定「外部」叢集類型,就必須在 Pacemaker 中建立對應的資源。 有兩個與 AG 相關聯的資源:AG 本身和 IP 位址。 如果您不是使用接聽程式功能,但建議使用IP位址資源。

您建立的 AG 資源是稱為 複製的資源類型。 AG 資源基本上在每個節點上都有複本,而且有一個稱為 master 的控制資源。 主資源會與裝載主要複本的伺服器相關聯。 其他資源會裝載次要複本 (一般或僅限設定),而且可以在容錯移轉時升階為主資源。

注意

無偏差通訊

本發行項包含字詞「奴隸」的參考;Microsoft 將此內容中使用該字詞視為有冒犯性。 因為該字詞目前出現在軟體中,所以也會出現在本發行項中。 當軟體移除該字詞時,我們也會將其從發行項中移除。

  1. 使用下列語法建立 AG 資源:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
    

    其中 NameForAGResource 是針對 AG 指定給此叢集資源的唯一名稱,而 AGName 是所建立 AG 的名稱。

    在 RHEL 7.7 和 Ubuntu 18.04 和更新版本上,您可能會在 使用 --master時遇到警告,或類似 的錯誤 sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'。 若要避免這種情況,請使用:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failover-timeout=30s master notify=true
    
  2. 建立將與接聽程式功能相關聯之 AG 的 IP 位址資源。

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    其中 NameForIPResource 是IP資源的唯一名稱,而 IPAddress 是指派給資源的靜態IP位址。

  3. 為了確保 IP 位址和 AG 資源在相同的節點上執行,必須設定共置限制式。

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    其中 NameForIPResource 是IP資源的名稱,而 NameForAGResource 是AG資源的名稱。

  4. 建立排序限制式,以確保 AG 資源會在 IP 位址之前啟動並執行。 雖然共置限制式隱含排序限制式,但此步驟會強制執行它。

    sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
    

    其中 NameForIPResource 是IP資源的名稱,而 NameForAGResource 是AG資源的名稱。

後續步驟

在本教學課程中,您已了解如何為 Linux 上的 SQL Server 建立和設定可用性群組。 您已了解如何︰

  • 啟用可用性群組。
  • 建立 AG 端點和憑證。
  • 使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 來建立 AG。
  • 建立 Pacemaker 的 SQL Server 登入和權限。
  • 在 Pacemaker 叢集中建立 AG 資源。

對於大部分的 AG 管理工作 (包括升級和容錯移轉),請參閱: