適用於 Linux 部署的 SQL Server 可用性基本概念

適用於:SQL Server - Linux

從 SQL Server 2017 (14.x) 開始,Linux 和 Windows 都支援 SQL Server。 如同以 Windows 為基礎的 SQL Server 部署,SQL Server 資料庫和執行個體必須在 Linux 下具有高可用性。 此文章涵蓋規劃和部署高可用性以 Linux 為基礎的 SQL Server 資料庫和執行個體的技術層面,以及一些與以 Windows 為基礎的安裝的差異。 因為 SQL Server 對 Linux 專業人員而言可能是新的,而 Linux 對 SQL Server 專業人員而言可能是新的,所以,此文章有時會介紹一些某些人可能很熟悉但其他人並不熟悉的概念。

適用於 Linux 部署的 SQL Server 可用性選項

除了備份和還原之外,Linux 上提供了三個與 Windows 型部署所使用的相同可用性功能:

在 Windows 上,FCI 一律需要基礎 Windows Server 容錯移轉叢集 (WSFC)。 視部署案例而定,AG 通常需要基礎 WSFC,但 SQL Server 2017 (14.x) 中新的「無」變體除外。 WSFC 不存在於 Linux 中。 Linux 中的叢集實作會在 Linux 上適用於可用性群組和容錯移轉叢集執行個體的 Pacemaker 中進行討論。

Linux 快速入門

雖然有些 Linux 安裝可能會與介面一併安裝,但大部分都不會,這表示在作業系統層上幾乎所有內容都是透過命令列完成的。 在 Linux 世界中,適用於此命令列的常見詞彙是「Bash 殼層」。

在 Linux 中,許多命令都需要以提高的權限來執行,非常類似於 Windows Server 中必須以系統管理員身分完成許多工作。 有兩個主要方法可使用提高的權限來執行:

  1. 在適當使用者的內容中執行。 若要變更為不同的使用者,請使用 su 命令。 如果 su 是在沒有使用者名稱的情況下單獨執行,只要您知道密碼,現在就能以 root 身分位於殼層中。

  2. 用來執行動作之更常見且具安全性意識的方式,就是在執行任何動作之前先使用 sudo。 此文章中有許多範例都會使用 sudo

一些常用命令,其中每一個都有可在線上研究的各種參數和選項:

  • cd:變更目錄
  • chmod:變更檔案或目錄的權限
  • chown:變更檔案或目錄的擁有權
  • ls:顯示目錄內容
  • mkdir:在磁碟機上建立資料夾 (目錄)
  • mv:將檔案從一個位置移到另一個
  • ps:顯示所有運作中的程序
  • rm:在伺服器上本機刪除檔案
  • rmdir:刪除資料夾 (目錄)
  • systemctl:啟動、停止或啟用服務
  • 文字編輯器命令。 在 Linux 上,有各種文字編輯器選項,例如 vi 和 emacs。

Linux 上的 SQL Server 可用性組態的通用工作

本節涵蓋所有以 Linux 為基礎的 SQL Server 部署通用的工作。

確保可以複製檔案

將檔案從一部伺服器複製到另一部,是使用 Linux 上的 SQL Server 的人都應該能夠執行的工作。 此工作對 AG 設定而言非常重要。

權限問題之類的項目均會存在於以 Linux 和 Windows 為基礎的安裝上。 不過,熟悉如何在 Windows 上從伺服器複製到伺服器的人,可能不熟悉如何在 Linux 上進行此動作。 常見的方法是使用命令列公用程式 scp,這代表安全複製。 在幕後,scp 會使用 OpenSSH。 SSH 代表安全殼層。 視 Linux 發行版本而定,可能不會安裝 OpenSSH 本身。 如果未安裝,則必須先安裝 OpenSSH。 如需設定 OpenSSH 的詳細資訊,請參閱下列適用於每個發行版本之連結中的相關資訊:

使用 scp 時,您必須提供伺服器的認證 (如果其不是來源或目的地)。 例如,使用

scp MyAGCert.cer username@servername:/folder/subfolder

將 MyAGCert.cer 檔案複製到另一部伺服器上指定的資料夾。 您必須擁有檔案的權限 (而且可能需要擁有權) 才能複製,因此在複製之前,也可能需要採用 chown。 同樣地,在接收端,正確的使用者需要存取權才能操作檔案。 例如,若要還原該憑證檔案,mssql 使用者必須能夠存取它。

Samba 是伺服器訊息區 (SMB) 的 Linux 變體,也可以用來建立 UNC 路徑 (例如 \\SERVERNAME\SHARE) 所存取的共用。 如需設定 Samba 的詳細資訊,請參閱下列適用於每個發行版本之連結中的相關資訊:

您也可以使用以 Windows 為基礎的 SMB 共用;SMB 共用不需要是以 Linux 為基礎的,只要 Samba 的用戶端部分會在裝載 SQL Server 的 Linux 伺服器上正確設定,且共用具有適當的存取權即可。 針對混合式環境中的人員,這是使用以 Linux 為基礎的 SQL Server 部署現有基礎結構的一種方式。

很重要的一點是,已部署的 Samba 版本應符合 SMB 3.0 規範。 已在 SQL Server 2012 (11.x) 中新增 SMB 支援時,需要所有共用才能支援 SMB 3.0。 如果針對共用使用 Samba,而非 Windows Server,則 Samba 型共用應該會使用 Samba 4.0 或更新版本 (最好是 4.3 或更新版本) 來支援 SMB 3.1.1。 SMB 和 Linux 上的良好資訊來源是 Samba 中的 SMB3 \(英文\)。

最後,可以選擇使用網路檔案系統 (NFS) 共用。 在 SQL Server 的以 Windows 為基礎的部署上,無法選擇使用 NFS,只能針對以 Linux 為基礎的部署加以使用。

設定防火牆

類似於 Windows,Linux 發行版本具有內建的防火牆。 如果貴公司對伺服器使用外部防火牆,則或許能夠接受在 Linux 中停用防火牆。 不過,不論啟用防火牆的位置為何,都必須開啟連接埠。 下表記載 Linux 上高可用性 SQL Server 部署所需的通用連接埠。

連接埠號碼 類型 描述
111 TCP/UDP NFS:rpcbind/sunrpc
135 TCP Samba (如果使用):結束點對應程式
137 UDP Samba (如果使用):NetBIOS 名稱服務
138 UDP Samba (如果使用):NetBIOS 資料包
139 TCP Samba (如果使用):NetBIOS 工作階段
445 TCP Samba (如果使用):SMB over TCP
1433 TCP SQL Server - 預設連接埠;如有需要,可以使用 mssql-conf set network.tcpport <portnumber> 進行變更
2049 TCP、UDP NFS (如果使用)
2224 TCP Pacemaker:由 pcsd 使用
3121 TCP Pacemaker:如果有 Pacemaker 遠端節點,則為必要項
3260 TCP iSCSI 啟動器 (如果使用):可以在 /etc/iscsi/iscsid.config (RHEL) 中改變,但應符合 Internet SCSI 目標的連接埠
5022 TCP SQL Server - 用於 AG 端點的預設連接埠;可在建立端點時變更
5403 TCP Pacemaker
5404 UDP Pacemaker:如果使用多點傳送 UDP,則為 Corosync 的必要項
5405 UDP Pacemaker:為 Corosync 的必要項
21064 TCP Pacemaker:為使用 DLM 之資源的必要項
變數 TCP AG 端點埠;預設值為 5022
變數 TCP NFS:適用於 LOCKD_TCPPORT 的連接埠 (可在 RHEL 上的 /etc/sysconfig/nfs 中找到)
變數 UDP NFS:適用於 LOCKD_UDPPORT 的連接埠 (可在 RHEL 上的 /etc/sysconfig/nfs 中找到)
變數 TCP/UDP NFS:適用於 MOUNTD_PORT 的連接埠 (可在 RHEL 上的 /etc/sysconfig/nfs 中找到)
變數 TCP/UDP NFS:適用於 STATD_PORT 的連接埠 (可在 RHEL 上的 /etc/sysconfig/nfs 中找到)

如需 Samba 可能使用的其他連接埠,請參閱 Samba 連接埠使用方式 \(英文\)。

相反地,也可以將 Linux 底下的服務名稱新增為例外狀況,而不是連接埠;例如,適用於 Pacemaker 的 high-availability。 如果這是您想要追求的方向,請參閱您的發行版本以了解這些名稱。 例如,在 RHEL 上,要在 Pacemaker 中新增的命令是

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

防火牆文件

安裝 SQL Server 套件以取得可用性

在以 Windows 為基礎的 SQL Server 安裝上,即使是在基本的引擎安裝中還是會安裝某些元件,其他的則不會安裝。 在 Linux 底下,只會在安裝過程中安裝 SQL Server 引擎。 其他步驟都是選擇性。 針對 Linux 底下高可用性的 SQL Server 執行個體,應該使用 SQL Server 來安裝兩個套件:

  • SQL Server Agent (mssql-server-agent)
  • 高可用性 (HA) 套件 (mssql-server-ha)

雖然 SQL Server Agent 在技術上是選擇性的,但其是 SQL Server 的作業排程器,而且是記錄傳送所需的,因此建議安裝。

在具有 CU 4 和更新版本的 SQL Server 2017 (14.x) 上,SQL Server Agent 隨附在資料引擎庫套件中,但是您仍然需要加以啟用。 在以 Windows 為基礎的安裝上,SQL Server Agent 不是選擇性的。

注意

對於 SQL Server 新手,SQL Server Agent 是 SQL Server 的內建作業排程器。 這是 DBA 用來排程備份之類事項和其他 SQL Server 維護的常見方式。 不同於以 Windows 為基礎的 SQL Server 安裝,其中 SQL Server Agent 是完全不同的服務,在 Linux 上,SQL Server Agent 會在 SQL Server 本身的內容中執行。

在 Windows 型設定上設定 AG 或 FCI 時,它們都是叢集感知的。 叢集感知表示 SQL Server 具有 WSFC 知道的特定資源 DLL (適用於 FCI 的 sqagtres.dllsqsrvres.dll,適用於 AG 的 hadrres.dll),而且是由 WSFC 用來確保 SQL Server 叢集功能已啟動、正在執行且正常運作。 由於叢集不只對 SQL Server 而言是外部的,對 Linux 本身也是外部的,因此,Microsoft 必須針對以 Linux 為基礎的 AG 和 FCI 部署撰寫資源 DLL 對等項目的程式碼。 這是 mssql-server-ha 套件,也稱為適用於 Pacemaker 的 SQL Server 資源代理程式。 若要安裝 mssql-server-ha 套件,請參閱部署適用於 Linux 上的 SQL Server 的 Pacemaker 叢集

其他適用於 Linux 上的 SQL Server、SQL Server 全文檢索搜尋 (mssql-server-fts) 和 SQL Server Integration Services (mssql-server-is) 的選用套件都不是針對 FCI 或 AG 取得高可用性的必要項。

SQL Server 高可用性和災害復原夥伴

若要為您的 SQL Server 服務提供高可用性和災害復原,您可以從各種領先業界的工具中選擇。 本節特別介紹提供 SQL Server 高可用性和災害復原解決方案支援的 Microsoft 夥伴公司。

Partner 描述
DH2i DxEnterprise 是適用於 Windows、Linux 和 Docker 的智慧型可用性軟體,有助於您幾乎完全避免規劃和未規劃的停機、節省大量成本、大幅簡化管理,並讓您兼具實體和邏輯彙總。

- 在 AKS 上針對 SQL Server 容器部署具有 DH2i 的可用性群組
- 教學課程:使用 DH2i DxEnterprise 設定三個節點Always On可用性群組
HPE Serviceguard 針對容錯移轉叢集執行個體和 Always On 可用性群組,HPE SGLX 提供內容相關性監視和復原選項。 HPE SGLX 讓運作時間最大化,同時仍顧及資料完整性和效能。

- 教學課程:使用 HPE Serviceguard for Linux 設定三個節點的 Always On 可用性群組
Pacemaker Pacemaker 是開放原始碼高可用性叢集資源管理員。 使用 Corosync,開放原始碼群組通訊系統 Pacemaker 可以偵測元件失敗,並協調必要的容錯移轉程序,以將應用程式的中斷降到最低。

- Linux 上 AG 和 FCI 的 Pacemaker
- 為 Linux 上的 SQL Server 部署 Pacemaker 叢集