共用方式為


設定 SQL Server 的 SLES 共用磁碟叢集

適用於:Linux 上的 SQL Server

本指南提供如何在 SUSE Linux Enterprise Server(SLES)上建立雙節點共享磁碟叢集的說明,用於 SQL Server。 叢集層會以建置於 Pacemaker \(英文\) 之上的 SUSE 高可用性擴充功能 (HAE) \(英文\) 為基礎。

注意

從 SQL Server 2025(17.x)開始,SUSE Linux Enterprise Server(SLES)不再支援。

如需叢集設定、資源代理程序選項、管理、最佳做法和建議的詳細資訊,請參閱 SUSE Linux Enterprise 高可用性擴充功能 12 SP5

必要條件

若要完成下列端對端案例,您需要兩部電腦來部署兩個節點叢集,以及另一個伺服器來設定 NFS 共用。 下列步驟概述如何設定這些伺服器。

在每個叢集節點上安裝和設定作業系統

第一個步驟是在叢集節點上設定作業系統。 本次攻略建議使用 SLES 並持有有效的 HA 附加元件訂閱。

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

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

  2. 基於設定目的,將一個節點指定為主要,並將另一個指定為次要。 本指南後續將會使用這些字詞。

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

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

    注意

    在設定時,會為 SQL Server 實例產生伺服器主金鑰(SMK),並置於 /var/opt/mssql/secrets/machine-key。 在 Linux 上,SQL Server 一律會以名為 mssql 的本機帳戶執行。 因為它是本機帳戶,所以不會在節點之間共用其身分識別。 你必須將主節點的加密金鑰複製到每個次節點,讓每個本地 mssql 帳號都能存取它來解密 SMK。

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

    sudo systemctl start mssql-server
    

    使用 sa 帳號連接至 SQL Server master 資料庫,然後執行以下腳本:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>] with PASSWORD = N'<password>';
    GRANT VIEW SERVER STATE TO <loginName>;
    

    警告

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

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

  6. 遵循 SUSE 文件 \(英文\) 的指示,為每個叢集節點設定及更新 hosts 檔案。 檔案 hosts 必須包含每個叢集節點的IP位址和名稱。

    若要檢查目前節點的 IP 位址,請執行:

    sudo ip addr show
    

    在每個節點上設定電腦名稱。 為每個節點提供不超過 15 個字元的唯一名稱。 若要設定電腦名稱,請使用 /etc/hostname 將它新增至 ,您也可以手動設定。

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

    127.0.0.1      localhost
    10.128.18.128  SLES1
    10.128.16.77   SLES2
    

    所有叢集節點之間必須擁有無需密碼的 SSH 存取權限。 否則,像 hb_reportcrm_report以及 Hawk's History Explorer 這類工具只能從本地節點收集資料。 如果你使用非標準 SSH 埠,請使用該 -X 選項(參見 其他需求與建議)。 例如,如果您的 SSH 埠為 3479,請以 crm_report 執行呼叫:

    crm_report -X "-p 3479" [...]
    

    如需詳細資訊,請參閱管理指南

下一節,你要設定共享儲存,並將資料庫檔案移到該儲存空間。

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

你可以使用各種解決方案來提供共享儲存。 本逐步解說示範如何使用 NFS 設定共用儲存體。 遵循最佳實務,使用 Kerberos 來確保 NFS:

如果你不遵循這些指引,任何能存取你網路並偽造 SQL 節點 IP 的人,都能存取你的資料檔案。 一如既往,在正式使用系統前,務必先對系統進行威脅建模。

另一個儲存體選項是使用 SMB 檔案共用。

設定 NFS 伺服器

如需設定 NFS 伺服器,請參閱 SUSE 文件中的下列步驟:設定 NFS 伺服器

設定所有叢集節點,以連線到 NFS 共用儲存體

在設定客戶端 NFS 掛載 SQL Server 資料庫檔案路徑指向共享儲存位置之前,請確保將資料庫檔案儲存到暫存位置,以便日後複製到共享資料夾:

  1. 僅在主要節點上,將資料庫檔案儲存至暫存位置。 以下腳本會建立一個新的暫存目錄,將資料庫檔案複製到新目錄,並移除舊的資料庫檔案。 當 SQL Server 以本機使用者 mssql 的身分執行時,您必須確保在資料轉移到掛載的共享後,本機使用者具有該共享的讀寫權限。

    su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    

    在所有叢集節點上設定 NFS 用戶端:

    注意

    關於 SUSE 關於高可用性 NFS 儲存的最佳實務與建議,請參見 具備 DRBD 與 Pacemaker 的高可用性 NFS 儲存

  2. 在每個節點上,驗證 SQL Server 是否成功以新的檔案路徑啟動。 此時,一次應該只有一個節點執行 SQL Server。 它們無法同時執行,因為兩者都試圖同時存取資料檔案。

    為防止 SQL Server 同時啟動,請使用檔案系統叢集資源,確保共享同時只由一個節點掛載。

    下列命令會啟動 SQL Server、檢查狀態,然後停止 SQL Server。

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

此時,SQL Server 的兩個執行個體都設定為使用共用儲存體上的資料庫檔案來執行。 下一步是針對 Pacemaker 設定 SQL Server。

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

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

    sudo touch /var/opt/mssql/secrets/passwd
    sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
    sudo echo '<password>' >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    警告

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

  2. 所有叢集節點必須透過 SSH 互相存取。 像 hb_reportcrm_report (用於故障排除)和 Hawk's History Explorer 這些工具,需要節點間無密碼的 SSH 存取。 否則,他們只能從目前節點收集資料。 如果你使用非標準 SSH 埠,請使用該 -X 選項(詳見 man 頁面)。 例如,如果你的 SSH 埠是 3479,請呼叫 an hb_report

    crm_report -X "-p 3479" [...]
    

    如需詳細資訊,請參閱 SUSE 文件中的系統需求和建議 (英文)

  3. 安裝高可用性延伸模組。 若要安裝延伸模組,請依照下列 SUSE 文章中的步驟執行:

    安裝和設定快速入門 (英文)

  4. 安裝 SQL Server 的 FCI 資源代理程式。 在這兩個節點上執行下列命令:

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server-2017.repo
    sudo zypper --gpg-auto-import-keys refresh
    sudo zypper install mssql-server-ha
    
  5. 自動設定第一個節點。 下一個步驟是透過設定第一個節點 SLES1,以建立運行中的單節點叢集。 依照 SUSE 文章設定第一個節點中的指示執行。

    完成時,使用 crm status 檢查叢集狀態:

    crm status
    

    它顯示有一個節點 SLES1 已被設定。

  6. 將節點加入現有叢集。 接著,將 SLES2 節點連接到叢集。 依照 SUSE 文章加入第二個節點中的指示執行。

    完成時,使用 crm status 來檢查叢集狀態。 如果你成功新增第二個節點,輸出看起來類似以下範例:

    2 nodes configured
    1 resource configured
    Online: [ SLES1 SLES2 ]
    Full list of resources:
    admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
    

    注意

    admin_addr 是你在初始單節點叢集設置時所設定的虛擬 IP 叢集資源。

  7. 移除程序。 如果您需要從叢集移除節點,請使用 ha-cluster-remove 啟動程序指令碼。 如需詳細資訊,請參閱Bootstrap 樣板程式概觀

設定 SQL Server 的叢集資源

下列步驟說明如何設定 SQL Server 的叢集資源。 可自訂以下兩個設定:

  • SQL Server 資源名稱:叢集 SQL Server 資源的名稱。
  • 逾時值:逾時值是當資源在上線時,叢集等待的時間量。 對於 SQL Server,這個值代表你預期 SQL Server 需要花多少時間才能讓 master 資料庫上線。

請根據你的環境更新以下腳本中的數值。 在一個節點執行腳本來設定並啟動叢集服務。

sudo crm configure
primitive <sqlServerResourceName> ocf:mssql:fci op start timeout=<timeout_in_seconds>
colocation <constraintName> inf: <virtualIPResourceName> <sqlServerResourceName>
show
commit
exit

例如,下列指令碼會建立名為 mssqlha 的 SQL Server 叢集資源。

sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit

在你提交設定後,SQL Server 會從與虛擬 IP 資源相同的節點開始。

如需詳細資訊,請參閱設定和管理叢集資源 (命令列) \(英文\)。

驗證已啟動 SQL Server

若要驗證 SQL Server 已啟動,請執行 crm status 命令:

crm status

以下範例展示了 Pacemaker 成功以叢集資源啟動時的結果。

2 nodes configured
2 resources configured

Online: [ SLES1 SLES2 ]

Full list of resources:

 admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
 mssqlha        (ocf::mssql:fci):       Started SLES1

管理叢集資源

如需管理您的叢集資源,請參閱下列 SUSE 文章:管理叢集資源

手動容錯移轉

雖然資源在硬體或軟體故障時會自動切換或遷移到其他叢集節點,但你也可以使用 Pacemaker 圖形介面或命令列手動移動資源。

請使用指令 migrate 來完成這項任務。 例如,要將 SQL 資源遷移到名為 SLES2的叢集節點,執行:

crm resource
migrate mssqlha SLES2