在 Linux 上配置故障轉移叢集實例(RHEL)

適用於:Linux 上的 SQL Server

SQL Server 兩節點共享磁碟故障轉移叢集實例提供伺服器層級冗餘以實現高可用性。 在本教學課程中,您會了解如何針對 Linux 上的 SQL Server 建立雙節點容錯移轉叢集執行個體。 您將會完成的特定步驟包括:

  • 安裝及設定 Linux
  • 安裝及設定 SQL Server
  • 設定主機檔案
  • 設定共用儲存體和移動資料庫檔案
  • 在每個叢集節點上安裝和設定 Pacemaker
  • 設定容錯移轉叢集執行個體

此文章說明如何針對 SQL Server 建立雙節點共用磁碟容錯移轉叢集執行個體 (FCI)。 此文章包含適用於 Red Hat Enterprise Linux (RHEL) 的指示和指令碼範例。

欲了解概念性資訊,請參閱 Linux 上的故障轉移叢集實例。

先決條件

要完成以下端對端情境,你需要兩台機器來部署雙節點叢集,並需要另一台伺服器作為儲存。 以下步驟概述這些伺服器的設定方式。

安裝及設定 Linux

第一個步驟是在叢集節點上設定作業系統。 在叢集中的每個節點,配置一個 Linux 發行版。 在兩個節點上都使用相同的發行版和版本。 使用下列其中一個發行版本:

  • 具有適用於 HA 附加元件之有效訂用帳戶的 RHEL

安裝及設定 SQL Server

  1. 在這兩個節點上安裝和設定 SQL Server。 如需詳細指示,請參閱 Linux 上的 SQL Server 安裝指引。

  2. 設定時指定一個節點為主要節點,另一個節點為次節點。 請在這整份指南中使用這些字詞。

  3. 在次要節點上,停止並停用 SQL Server。 下列範例會停止並停用 SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

    Note

    在安裝期間,系統會針對 SQL Server 執行個體產生伺服器主要金鑰,並將其置於 /var/opt/mssql/secrets/machine-key。 在 Linux 上,SQL Server 一律會以名為 mssql 的本機帳戶執行。 因為它是本機帳戶,所以不會在節點之間共用其身分識別。 因此,你需要將加密金鑰從主節點複製到次節點,讓每個本地 mssql 帳號都能存取它來解密伺服器主金鑰。

  4. 在主節點上,建立 Pacemaker 的 SQL Server 賬戶,並授予該賬戶執行 sp_server_diagnostics 的權限。 Pacemaker 會使用此帳戶來驗證哪個節點正在執行 SQL Server。

    sudo systemctl start mssql-server
    

    使用 master 帳戶連線到 SQL Server sa 資料庫,然後執行以下操作:

    USE master;
    GO
    
    CREATE LOGIN [<loginName>]
        WITH PASSWORD = N'<password>';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];
    

    注意事項

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

    或者,您可以以更細微的層級設定權限。 Pacemaker 登入時需要VIEW SERVER STATE用 、setupadmin 查詢健康狀態sp_server_diagnostics,並ALTER ANY LINKED SERVER以資源名稱更新 FCI 實例名稱,方法是執行 sp_dropserver 和 sp_addserver。

  5. 在主要節點上,停止並停用 SQL Server。

設定主機檔案

在每個叢集節點上,設定 hosts 檔案。 Hosts 檔案必須包含每個叢集節點的 IP 位址和名稱。

  1. 檢查每個節點的 IP 位址。 下列指令碼會顯示您目前節點的 IP 位址。

    sudo ip addr show
    
  2. 在每個節點上設定電腦名稱。 為每個節點提供不超過 15 個字元的唯一名稱。 在 /etc/hosts 中設定電腦名稱。 下列指令碼可讓您使用 /etc/hosts 編輯 vi。

    sudo vi /etc/hosts
    

    下列範例顯示 /etc/hosts,其中包含名為 sqlfcivm1 和 sqlfcivm2 的兩個額外節點。

    127.0.0.1        localhost localhost4 localhost4.localdomain4
    ::1              localhost localhost6 localhost6.localdomain6
    10.128.18.128    sqlfcivm1
    10.128.16.77     sqlfcivm2
    

設定儲存體和移動資料庫檔案

您必須提供兩個節點都可以存取的儲存體。 您可以使用 iSCSI、NFS 或 SMB。 設定儲存體,將該儲存體呈現給叢集節點,然後將資料庫檔案移至新的儲存體。 下列文章會說明適用於每個儲存體類型的步驟:

在每個叢集節點上安裝和設定 Pacemaker

  1. 在這兩個叢集節點上,建立檔案以儲存 SQL Server 使用者名稱和密碼,以供 Pacemaker 登入使用。

    下列命令會建立並填入這個檔案:

    sudo touch /var/opt/mssql/secrets/passwd
    echo '<loginName>' | sudo tee -a /var/opt/mssql/secrets/passwd
    echo '<loginPassword>' | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    
  2. 在這兩個叢集節點上,開啟 Pacemaker 防火牆連接埠。 若要使用 firewalld 開啟這些連接埠,請執行下列命令:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    如果你使用的是沒有內建高可用性設定的防火牆,請開啟以下埠口讓 Pacemaker 與叢集內其他節點通訊:

    • TCP:連接埠 2224、3121、21064
    • UDP:連接埠 5405
  3. 在每個節點上安裝 Pacemaker 套件。

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. 設定安裝 Pacemaker 和 Corosync 封裝時建立的預設使用者密碼。 在這兩個節點上使用相同的密碼。

    sudo passwd hacluster
    
  5. 啟用 pcsd 服務並啟動心跳管理器服務。 這將會允許節點在重新開機後重新加入叢集。 在這兩個節點上執行下列命令。

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. 安裝 SQL Server 的 FCI 資源代理程式。 在這兩個節點上執行下列命令。

    sudo yum install mssql-server-ha
    

設定隔離代理程式

STONITH 裝置提供隔離代理。 對生產叢集而言,您必須設定隔離代理程式。 關於如何在 Azure 中建立 STONITH 裝置的範例,請參見 Azure 中的 Red Hat Enterprise Linux 設定 Pacemaker。 修改環境的指示。

設定容錯移轉叢集執行個體

將會在資源群組中建立 FCI。 這會讓您稍微輕鬆一點,因為資源群組能減輕對約束的需求。 不過,請依照資源應啟動的順序將它們新增至資源群組。 它們應啟動的順序是:

  1. 儲存體資源
  2. 網路資源
  3. 應用程式資源

此範例會在 NewLinFCIGrp 群組中建立 FCI。 資源群組的名稱必須在 Pacemaker 中創建的任何資源中保持唯一。

  1. 建立磁碟資源。 如果沒有發生問題,您將不會收到任何回應。 建立磁碟資源的方法會取決於儲存體類型。 下一節顯示每個儲存體類型的範例 (iSCSI、NFS 和 SMB)。 使用適用於您叢集存放區之儲存體類型的範例。

    sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group <RGName>
    
    • <iSCSIDiskResourceName> 是與 iSCSI 磁碟相關聯資源的名稱
    • <VolumeGroupName> 是磁碟區群組的名稱
    • <LogicalVolumeName> 是所建立邏輯磁碟區的名稱
    • <FolderToMountiSCSIDisk> 是要裝載磁碟的資料夾 (針對系統資料庫和預設位置,其會是 /var/opt/mssql/data)
    • <FileSystemType> 會是 ext4 或 XFS,取決於格式化的方式,以及作業系統支援的內容。

  1. 建立將會由 FCI 使用的 IP 位址。 如果沒有發生問題,您將不會收到任何回應。

    sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
    
    • <IPResourceName> 是與 IP 位址相關聯之資源的名稱
    • <IPAddress> 是 FCI 的 IP 位址
    • <NetworkCard> 是與子網路相關聯的網路卡 (也就是 eth0)
    • <NetMask> 是子網的子網掩碼 (也就是 24)
    • <RGName> 是資源群組的名稱
  2. 建立 FCI 資源。 如果沒有發生問題,您將不會收到任何回應。

    sudo pcs resource create <FCIResourceName> ocf:mssql:fci op defaults timeout=60s --group <RGName>
    
    • <FCIResourceName> 不僅是資源的名稱,也是與 FCI 相關聯的易記名稱。 這是使用者和應用程式用來連線的。
    • <RGName> 是資源群組的名稱。
  3. 執行 sudo pcs resource 命令。 FCI 應在線上。

  4. 使用 FCI 的 DNS/資源名稱,搭配 SSMS 或 sqlcmd 連線至 FCI。

  5. 發布聲明 SELECT @@SERVERNAME。 它應該會傳回 FCI 的名稱。

  6. 發布聲明 SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')。 它應該會傳回 FCI 執行所在的節點名稱。

  7. 手動將 FCI 容錯移轉到另一個節點。 請參閱 「在 Linux 上操作故障轉移叢集實例」下的說明。

  8. 最後,將 FCI 容錯移轉回原始節點。

Summary

在本教學課程中,您已完成下列工作。

  • 安裝及設定 Linux
  • 安裝及設定 SQL Server
  • 設定主機檔案
  • 設定共用儲存體和移動資料庫檔案
  • 在每個叢集節點上安裝和設定 Pacemaker
  • 設定容錯移轉叢集執行個體