搭配 Linux 上的 SQL Server 使用容器
容器可協助組織建立彈性且可擴縮的 SQL Server 安裝。
Wide World Importers 支援一些大型資料庫工作負載,而這些工作負載需要具彈性且可調整的裝載架構。 您想要評估在虛擬機器 (VM) 與容器等虛擬環境中裝載 SQL Server 的可能性。
在此,您將了解如何針對資料庫在容器與 VM 間做出選擇。
比較 VM 與容器
虛擬化是系統管理員用來在單一實體伺服器上裝載多部虛擬伺服器的技術。 當您使用虛擬化時,您可以輕鬆地部署額外的 SQL Server 執行個體,不用購買和安裝額外的硬體。 有兩種常見的虛擬化方法:
- VM:當您使用 VM 時,每個執行個體都是完整的虛擬伺服器,各自擁有自己的作業系統與硬體。
- 容器:當您使用容器時,每個執行個體都會與主機電腦共用作業系統與硬體資源。
VM 與容器都能提供隔離式環境,應用程式 (例如 SQL Server) 會在其中以像是在個別實體電腦上執行一樣的方式執行。
VM 較大且需要較長的時間建立,但因為其擁有自己的作業系統,所以可以使用與主機電腦不同的設定與硬體。 您也可以在同一部主機上混合使用具有不同作業系統的 VM。 例如,在 Linux 主機上,您可以安裝執行 Linux 與 Apache 的 VM 來裝載網站。 您也可以有另一部執行 Windows 與 SQL Server 的 VM 來裝載資料庫。
容器較小,因此可以比 VM 更快速地載入。 不過,舉例來說,如果您的主機執行 Linux Ubuntu,該電腦上的所有容器都必須執行相同的 Ubuntu 版本。 在 Linux 主機上,您可以安裝執行 Linux 和 Apache 的容器,但您的資料庫容器也必須執行 Linux。 只要您是執行 SQL Server 2017 或更新版本,便可以達成此情況。
在主機電腦上,您必須安裝 Hyper-V 或 VirtualBox 等軟體來裝載 VM。 針對容器,您可以使用 Docker 系統、CRI-O、rkt 與其他容器主機。
使用虛擬機器的原因
在某些情況下,容器不是最佳的解決方案。 當容器在單一作業系統上執行並共用系統資源時,就需要考量安全性。 如果攻擊者取得超級使用者權限,某些攻擊媒介可能會導致取得應用程式的存取權。 在容器中,應用程式必須在與主機電腦相同的 OS 上執行。 您無法在 Windows 容器中執行 Linux 應用程式。 使用 VM,您可以在 Windows 上裝載 Linux 電腦,或在 macOS 上裝載 Windows 電腦,提供更大的彈性。 VM 可讓您將多個應用程式裝載於單一 VM 中,並緊密整合。 容器傳統上只會裝載單一應用程式。
VM 的效率比容器低。 給定一組相同的硬體,您可以在容器中執行的應用程式比使用 VM 至少多兩倍。 VM 會使用更多資源,因為其需要作業系統的完整複本與所有硬體的虛擬化版本,以便支援客體作業系統。
使用容器的原因
相較之下,容器較輕型,並可讓您將應用程式封裝成較小的磁碟使用量。 由於只使用單一作業系統來裝載容器,因此管理工作也比較少。 您只需要修補並更新單一 OS,而非每部 VM 上的每一個客體 OS。 由於容器較小且較簡單,因此可以在幾秒內啟動,而不像是 VM 需要幾分鐘才能啟動。
協調流程
您可以使用 Docker Swarm、Kube 與其他解決方案都來協調容器。 協調器會使用容器監視及讓您調整應用程式,並提供某種程度的災害復原。 Microsoft 提供使用 Kubernetes 的工具與使用範例,因此是將 Linux 上的 SQL Server 容器化的理想選擇。 目前有 Linux 上的 SQL Server 容器映像可搭配 Kubernetes 使用。
Linux 上的 SQL Server 已容器化
在容器中執行資料庫有一個問題,那就是永續性儲存體。 您必須提供容器以外的儲存位置,讓資料庫可以在其中保留資料庫檔案。 然後,便可將變更提供給叢集中的所有容器。 如果您使用 Kubernetes,可以使用永續性磁碟區作為此位置。
首先,請建立永續性磁碟區,然後新增永續性磁碟區宣告 (PVC)。 針對 Linux 上的 SQL Server 建立部署資訊清單,並讓其使用 Microsoft 建立的 mssql-server-linux
容器映像。 此資訊清單也包含 PVC 的定義與服務的負載平衡器,以確保 IP 位址一致。 建立部署,並檢查 SQL Server 正在 Pod 內執行。 完成此設定之後,Kubernetes 就會在節點失敗時啟動新的執行個體。 可以刪除該 Pod,並檢查新的執行個體是否自動啟動,進行簡單測試。