共用方式為


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

適用於:Linux 上的 SQL Server

本教學示範如何在 Linux 上建立並設定 SQL Server 的可用性群組(AG)。 與 SQL Server 2016(13.x)及更早版本的 Windows 不同,你可以先啟用 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 檔案。

重要

您必須在 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

啟用可用性群組後,您必須重新啟動 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 = '<master-key-password>';
    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 = '<master-key-password>';
    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 = '<master-key-password>';
    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 一部分的每個節點。

    針對此範例:

    • 複製 LinAGN1_Cert.cerLinAGN2LinAGN3
    • 複製 LinAGN2_Cert.cerLinAGN1LinAGN3
    • 複製 LinAGN3_Cert.cerLinAGN1LinAGN2
  5. 將擁有權以及與所複製憑證檔案相關聯的群組變更為 mssql

    sudo chown mssql:mssql <CertFileName>
    
  6. LinAGN2 上建立與 LinAGN3LinAGN1 相關聯的執行個體層級登入和使用者。

    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    

    警告

    您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。

  7. LinAGN2_Cert 上還原 LinAGN3_CertLinAGN1。 擁有其他複本的憑證是 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. 請授予與 LinAGN2LinAGN3 相關的登入以連接至 LinAGN1 之端點的權限。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  9. LinAGN1 上建立與 LinAGN3LinAGN2 相關聯的執行個體層級登入和使用者。

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    
  10. LinAGN1_Cert 上還原 LinAGN3_CertLinAGN2

    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. 請授予與 LinAGN1LinAGN3 相關的登入以連接至 LinAGN2 之端點的權限。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. LinAGN1 上建立與 LinAGN2LinAGN3 相關聯的執行個體層級登入和使用者。

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
  13. LinAGN1_Cert 上還原 LinAGN2_CertLinAGN3

    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. 請授予與 LinAG1LinAGN2 相關的登入以連接至 LinAGN3 之端點的權限。

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    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. 在 [指定可用性群組選項] 對話方塊中,輸入可用性群組的名稱,然後在下拉式清單中選取 EXTERNALNONE 的叢集類型。 部署心臟起搏器時使用 EXTERNAL 。 用於 NONE 特殊情境,例如讀取縮放。選擇資料庫層級健康偵測的選項是可選的。 如需此選項的詳細資訊,請參閱可用性群組資料庫層級健康狀態偵測容錯移轉選項。 選取 [下一步]。

    「建立可用性群組」的螢幕擷取畫面,其中顯示叢集類型。

  4. 在 [選取資料庫] 對話方塊中,選取將參與 AG 的資料庫。 每個資料庫必須有完整的備份,才能加入 AG(可用性群組)。 選取 [下一步]。

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

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

  7. 針對將包含僅設定用複本或其他次要複本的實例,重複前兩個步驟。

  8. 這三個實例都會出現在「指定複本」對話框中。 如果您使用「External」類型的叢集,對於真正次要副本,請確保可用性模式與主要副本一致,且故障轉移模式設為外部。 對於僅用作設定的複本,請選擇「僅限設定」可用性模式。

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

    「建立可用性群組」的螢幕擷取畫面,其中顯示可讀取次要選項。

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

    「建立可用性群組」的螢幕擷取畫面,其中顯示「複本」頁面。

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

  10. 如果你使用可讀的次級檔或建立一個叢集類型為 None 的 AG 作為讀取縮放,你可以透過選擇 Listener 標籤來建立監聽器。你也可以之後再加一個聆聽者。 要建立監聽器,請選擇 「建立可用性群組監聽器 」選項,輸入名稱、TCP/IP 埠口,以及是使用靜態還是自動分配的 DHCP IP 位址。 對於叢集類型為 None 的 AG,IP 應該是靜態的,並設定為主節點的 IP 位址。

    「建立可用性群組」的螢幕擷取畫面,其中顯示接聽程式選項。

  11. 如果你為可讀情境建立監聽器,SSMS 允許在精靈中建立唯讀路由。 您可以之後使用 SSMS 或 Transact-SQL 新增。 現在設定唯讀路由:

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

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

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

  12. 選取 [下一步]。

  13. 選擇如何初始化次要複本。 預設值是使用自動播種,這需要參與 AG 的所有伺服器上具有相同的路徑。 您也可以讓精靈執行備份、複製和還原 (第二個選項);如果您已在複本上手動備份、複製及還原資料庫,請將它加入 (第三個選項);或者,稍後再新增資料庫 (最後一個選項)。 就像憑證一樣,如果你是手動備份並複製,請在其他副本上設定備份檔案的權限。 選取 [下一步]。

  14. 在 [驗證] 對話方塊中,如果所有項目都未傳回為 [成功],請進行調查。 有些警告是可接受且不致命的,例如如果您未建立監聽器。 選取 [下一步]。

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

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

使用 Transact-SQL

本節顯示使用 Transact-SQL 建立 AG 的範例。 建立 AG 後,你可以設定監聽器和唯讀路由。 你可以用 ALTER AVAILABILITY GROUP來修改 AG 本身,但不能在 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。
      • SubnetMaskIPAddress 的子網掩碼。 在 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 位址。
      • SubnetMaskIPAddress 的子網掩碼。 在 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 = 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 ='<password>';
    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
    
    <password>
    
  4. 按住 Ctrl 鍵,然後按 X,再按 C,以離開並儲存檔案。

  5. 執行:

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

    以鎖定檔案。

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

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

在 SQL Server 建立可用性群組後,當你指定叢集類型為外部時,必須在 Pacemaker 中建立相應的資源。 可用性群組會關聯兩個資源:可用性群組本身,以及 IP 位址。 如果你沒有使用監聽器功能,設定 IP 位址資源是可選的,但建議這麼做。

你建立的 AG 資源是一種叫做 複製的資源。 AG 資源在每個節點上都有副本,並有一個稱為 主控的控制資源。 主伺服器與裝載主要複本的伺服器相關聯。 其他伺服器會裝載次要複本(一般或僅限設定),並且在故障轉移時可以提升為主節點。

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

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

    在這個例子中, NameForAGResource 是你為這個叢集資源給 AG 賦予的唯一名稱,而 AGName 是你所建立的 AG 名稱。

  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> with promoted <NameForAGResource>-clone INFINITY
    

    在此範例中, NameForIPResource 是 IP 資源的名稱,而 NameForAGResource 是 AG 資源的名稱。

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

    sudo pcs constraint order promote <NameForAGResource>-clone 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 管理工作(例如升級和故障轉移),請參閱: