在 Linux 上為 Linux 上的 SQL Server 配置 SMB 儲存故障轉移叢集實例

適用於:Linux 上的 SQL Server

此文章說明如何針對 Linux 上的容錯移轉叢集執行個體 (FCI) 設定 SMB 儲存體。

在 Windows 之外,SMB 也被稱為共用網際網路檔案系統(CIFS)共享,Samba 實作了此系統。 在 Windows 上,你可以存取格式為 \\SERVERNAME\SHARENAME的 SMB 共享。 對於基於 Linux 的 SQL Server 安裝,你必須將 SMB 共享掛載為資料夾。

重要的來源和伺服器資訊

遵循以下建議,成功使用 SMB:

  • SMB 共享可以在 Windows、Linux 或使用更新版本的設備上使用。 欲了解更多關於 Samba 與 SMB 3.0 的資訊,請參閱 SMB 3.0 以確認您的 Samba 實作是否符合 SMB 3.0。
  • SMB 共用應該具有高可用性。
  • 在 SMB 共享資料夾上正確設定安全性。 以下範例來自 /etc/samba/smb.conf,其中 SQLData 是該份額的名稱。
[SQLData]
path=/var/smb/SQLData
read only = no
browseable = yes
guest ok = no
writeable = yes
valid users = SQLSambaUser

Instructions

  1. 選擇其中一台伺服器參與 FCI 設定。 哪一個都無所謂。

  2. 取得 mssql 使用者的資訊。

     sudo id mssql
    

    請注意 uidgid 和群組。

  3. 執行 sudo smbclient -L //NameOrIP/ShareName -U User

    • <NameOrIP> 是裝載 SMB 共用的伺服器 DNS 名稱或 IP 位址。
    • <ShareName> 是 SMB 分享的名稱。
  4. 針對系統資料庫或任何儲存在預設資料位置的內容,請遵循這些步驟。 否則,請跳到步驟 5。

    1. 確保你正在使用的伺服器上已停止 SQL Server。

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. 完全切換到超級使用者。

      sudo -i
      
    3. 切換至 mssql 使用者。

      su mssql
      
    4. 建立一個暫存目錄來存放 SQL Server 資料和日誌檔案。

      mkdir <TempDir>
      
      • <TempDir> 是資料夾的名稱。 下列範例會建立名為 /var/opt/mssql/tmp 的資料夾。
      mkdir /var/opt/mssql/tmp
      
    5. 將 SQL Server 資料和日誌檔案複製到暫存目錄。

      cp /var/opt/mssql/data/* <TempDir>
      
      • <TempDir> 是上一個步驟中的資料夾名稱。
    6. 確認檔案位於目錄中。

      ls <TempDir>
      

      <TempDir> 是步驟 d 中資料夾的名稱。

    7. 將檔案從現有的 SQL Server 資料目錄中刪除。

      rm -f /var/opt/mssql/data/*
      
    8. 確認這些檔案是否已經不存在。

      ls /var/opt/mssql/data
      
    9. Enter exit 鍵即可切換回使用者。root

    10. 將 SMB 共用掛接在 SQL Server 的 data 資料夾中。 此範例顯示連線到 Windows Server 上的 SMB 3.0 共用的語法。

      mount -t cifs //<ServerName>/<ShareName> /var/opt/mssql/data -o vers=3.0,username=<UserName>,password=<Password>,domain=<domain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> 是具有 SMB 共用之伺服器的名稱
      • <ShareName> 是共享資源的名稱
      • <UserName> 是用來訪問共享資源的使用者名稱
      • <Password> 是使用者的密碼
      • <domain> 是 Active Directory 的名稱
      • <mssqlUID>mssql 使用者的 UID
      • <mssqlGID>mssql 使用者的 GID
    11. 不裝開關時可以確認安裝 mount

      mount
      
    12. 切換至 mssql 使用者。

      su mssql
      
    13. 複製暫存目錄 /var/opt/mssql/data 中的檔案。

      cp /var/opt/mssql/tmp/* /var/opt/mssql/data
      
    14. 驗證檔案存在。

      ls /var/opt/mssql/data
      
    15. 輸入exit以離開使用者。mssql

    16. 輸入exit以離開使用者。root

    17. 啟動 SQL Server。 如果你把所有東西都複製並正確套用安全措施,SQL Server 就會啟動。

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    18. 若要進一步測試,請建立資料庫以確保權限正常。 以下範例使用 Transact-SQL;您也可以使用 SQL Server Management Studio(SSMS)。

      顯示建立測試資料庫的螢幕快照。

    19. 停止 SQL Server 並驗證它已關閉。 如果你打算新增或測試其他磁碟,請不要在新增和測試前關閉 SQL Server。

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    20. 如果完成了,請卸載該份額。 否則,測試完或新增硬碟後再卸載。

      sudo umount //<IPAddressorServerName>/<ShareName>/<FolderMountedIn>
      
      • <IPAddressOrServerName> 是 SMB 主機的 IP 位址或名稱
      • <ShareName> 是共享資源的名稱
      • <FolderMountedIn> 是裝載 SMB 的資料夾名稱
  5. 針對系統資料庫以外的其他內容 (例如,使用者資料庫或備份),請遵循這些步驟。 如果你只使用預設位置,請跳到第 14 步。

    1. 切換到超級使用者。

      sudo -i
      
    2. 建立一個資料夾讓 SQL Server 使用。

      mkdir <FolderName>
      

      <FolderName> 是資料夾的名稱。 如果資料夾位置不對,請指定該資料夾的完整路徑。 下列範例會建立名為 /var/opt/mssql/userdata 的資料夾。

      mkdir /var/opt/mssql/userdata
      
    3. 將 SMB 共用掛接在 SQL Server 的 data 資料夾中。 此示範顯示連接到基於 Samba 的 SMB 3.0 共用的語法。

      mount -t cifs //<ServerName>/<ShareName> <FolderName> -o vers=3.0,username=<UserName>,password=<Password>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> 是具有 SMB 共用之伺服器的名稱
      • <ShareName> 是共享資源的名稱
      • <FolderName> 是在最後步驟中所建立之資料夾的名稱
      • <UserName> 是用來訪問共享資源的使用者名稱
      • <Password> 是使用者的密碼
      • <mssqlUID>mssql 使用者的 UID
      • <mssqlGID>mssql 使用者的 GID。
    4. 不裝開關時可以確認安裝 mount

    5. 進入 exit 以離開超級使用者。

    6. 若要進行測試,請在該資料夾中建立資料庫。 以下範例是建立 sqlcmd 資料庫,切換上下文到資料庫,驗證檔案是否存在於作業系統層級,然後刪除暫存位置。 您可以使用 SSMS。

    7. 將共用資源取消掛接。

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName> 是 SMB 主機的 IP 位址或名稱
      • <ShareName> 是共享資源的名稱
      • <FolderMountedIn> 是裝載 SMB 的資料夾名稱。
  6. 在其他節點上重複這些步驟。

您現在已準備好設定 FCI。