◆陳海瓊 趙覓
SQL Server基于Linux系統(tǒng)的可用性組安裝與部署
◆陳海瓊 趙覓
(貴州廣播電視臺 貴州 550002)
隨著互聯(lián)網(wǎng)云計算的發(fā)展,以Linux操作系統(tǒng)為核心的開源生態(tài)逐漸成為云計算服務的主流,微軟公司發(fā)布了Linux版McroSoft SQL Server,提供數(shù)據(jù)同步的可用性組。本文詳細闡述了SQL Server數(shù)據(jù)庫如何基于Linux系統(tǒng)安裝和配置可用性組。
Linux;SQL Server;可用性組
互聯(lián)網(wǎng)云計算的發(fā)展,以Linux操作系統(tǒng)為核心的開源生態(tài)逐漸成為云計算服務的主流,免費開源的Linux服務器系統(tǒng)如centos、ubuntu server,能為企業(yè)節(jié)約一筆可觀的操作系統(tǒng)購置經(jīng)費。近年來微軟逐漸把自己的業(yè)務重心轉向云計算市場,微軟也發(fā)布提供Linux版本的McroSoft SQL Server(以下簡稱MSSQL),包括rpm、deb包安裝,還提供了官方的Docker容器鏡像。
Linux平臺的MSSQL與Windows平臺擁有相同的數(shù)據(jù)庫引擎,具有相似的功能與服務。其中就有支持數(shù)據(jù)業(yè)務安全、讀取擴展的Always On 可用性組(Availability Group 以下簡稱AG)。AG可以實現(xiàn)High Availability(高可用性)或read-scale(讀取縮放)。本文將介紹基于Linux的MSSQL安裝配置read-scale可用性組。
read-scale可用性組可以不使用群集管理器的情況下使用,提供了只讀副本橫向擴展,read-scale可用性組可以做到多個數(shù)據(jù)庫的同步,但并不提供高可用性。在構建可用性組之前,需要了解兩個概念。
每個可用性組包含兩個或多個可用性副本的集合。每個可用性副本都承載可用性組中的可用性數(shù)據(jù)庫的一個副本。每個可用性副本都被分配一個初始角色(“主角色”或“輔助角色”),角色由該副本的可用性數(shù)據(jù)庫繼承。給定副本的角色確定它承載的是讀寫數(shù)據(jù)庫還是只讀數(shù)據(jù)庫。其中一個主要副本被分配主角色,它承載讀寫數(shù)據(jù)庫(稱為“主數(shù)據(jù)庫” )。至少一個輔助副本被分配輔助角色,輔助副本承載只讀數(shù)據(jù)庫(稱為“輔助數(shù)據(jù)庫”)。
可用性模式是可用性副本的一個屬性,決定主副本是否在輔助副本將事務日志記錄寫入磁盤之前,等待提交數(shù)據(jù)庫上的事務。共有兩種可用性模式:
(1)異步提交模式(ASYNCHRONOUS_COMMIT):主副本無需等待確認異步提交輔助副本已硬化日志,便可提交事務。異步提交模式可最大限度地減少輔助數(shù)據(jù)庫上的事務滯后時間,但允許它們滯后于主數(shù)據(jù)庫,因此可能會導致某些數(shù)據(jù)丟失。
(2)同步提交模式(SYNCHRONOUS_COMMIT):在提交事務之前,同步提交主副本要等待同步提交輔助副本確認它已完成硬化日志。同步提交模式可確保在給定的輔助數(shù)據(jù)庫與主數(shù)據(jù)庫同步時,充分保護已提交的事務。這種保護的代價是延長事務滯后時間。
Linux服務器通常使用非圖形界面的命令行模式,因此安裝過程只能采用命令輸入的方式。本文安裝過程,是連接互聯(lián)網(wǎng)的環(huán)境下進行在線安裝,如果在非聯(lián)網(wǎng)環(huán)境安裝,可以提前下載離線安裝包。數(shù)據(jù)庫程序安裝完畢后,可以用數(shù)據(jù)庫控制客戶端遠程連接MSSQL數(shù)據(jù)庫,進行后續(xù)數(shù)據(jù)庫配置流程。整個安裝配置流程如圖1所示。
圖1 安裝配置流程圖
準備兩臺centos7系統(tǒng)服務器,分別命名并分配IP地址為mssql1(172.17.0.201)和mssql2(172.17.0.202),把命名和IP地址分別加入他們的hosts文件中。然后分別在兩臺服務器上安裝MSSQL2019數(shù)據(jù)庫服務端程序。
2.1.1安裝官方源
運行以下命令,下載MSSQL2019官方源到本機源倉庫。
2.1.2安裝MSSQL
運行以下命令,安裝MSSQL程序。
2.1.3配置MSSQL
運行以下命令,選擇要安裝功能版本,并設置SA賬戶密碼。
MSSQL提供了多個功能個版本,Express Edition、Standard、Enterpirise、Developer。
(1)Express Edition:入門級的免費數(shù)據(jù)庫,用于學習和構建小型服務器數(shù)據(jù)庫,不支持AG。
(2)Standard:付費標準版本,支持本地和云部署。AG 可擁有的副本總數(shù)為兩個:一個主要副本以及一個僅能用作可用性目的的次要副本。次要副本不能用于任何其他目的,例如可讀查詢。
(3)Enterprise:付費,提供了全面的高端數(shù)據(jù)中心功能,可為關鍵任務工作負荷提供較高服務級別。 AG 最多可擁有的副本總數(shù)為九個:一個主要副本,以及最多八個次要副本,并且最多可以對其中3個副本(包括主要副本)進行同步。
(4)Developer:允許開發(fā)人員在MSSQL之上構建任何類型的應用程序。它包括Enterprise版本的所有功能,但是僅被許可作為開發(fā)和測試系統(tǒng)使用,而不是作為生產(chǎn)服務器使用。如果要用于正式正產(chǎn)系統(tǒng),請根據(jù)功能需求選擇購買對應的版本。
實驗測試環(huán)境可安裝Developer版本,如果要在生產(chǎn)環(huán)境使用可用性組,請根據(jù)實際需求,購買并安裝Standard或者Enterpise版本。
2.1.4系統(tǒng)配置防火墻
配置系統(tǒng)防火墻,將兩臺Linux服務器的TCP的1433和5022端口開放。1433端口是MSSQL默認端口;5022端口是可用性組端點默認端口。
2.1.5安裝控制客戶端
在一臺PC機上安裝數(shù)據(jù)庫控制客戶端SQL Server Management Studio(以下簡稱SSMS),使用SSMS的查詢編輯器,編寫執(zhí)行Transact-SQL(以下簡稱T-SQL)腳本語句與數(shù)據(jù)庫交互。
2.2.1開啟可用性組
運行命令,開啟MSSQL可用性組,重啟MSSQL服務,該設置才能生效。
2.2.2啟用Alwayson_health事件會話
運行以下T-SQL腳本,啟用Alwayson_health事件會話,可對可用性組進行故障排查時幫助診原因。
2.2.3創(chuàng)建證書
Linux需要使用證書驗證各個鏡像節(jié)點之間的通信。在主數(shù)據(jù)庫運行以下T-SQL腳本創(chuàng)建密鑰和證書,然后備份證書,并使用私鑰保護文件。
dbm_certificate.cer是主副本的證書,dbm_certificate.pvk私鑰。將這兩個文件復制到其他輔助數(shù)據(jù)庫的服務器同一位置,并且賦予MSSQL用戶訪問權限。在所有輔助數(shù)據(jù)庫運行以下T-SQL腳本,創(chuàng)建證書。
2.2.4在所有副本上創(chuàng)建鏡像端點和監(jiān)聽端口
數(shù)據(jù)庫鏡像端點是可用性組的重要組成部分,它的主要作用有兩個:主副本和輔助副本之間通過端點傳送日志塊和消息,同步數(shù)據(jù);主副本和每個輔助副本通過端點互相發(fā)送ping來確定彼此是否互相連通。端點使用TCP協(xié)議,監(jiān)聽端口一般默認為5022。在所有副本服務器上運行以下T-SQL腳本創(chuàng)建端點。
2.2.5新建read-scale可用性組群集
在主數(shù)據(jù)庫運行以下T-SQL腳本創(chuàng)建一個可用性組“Linux_ag”。請注意,群集類型CLUSTER_TYPE為 NONE,,創(chuàng)建read-scale可用性組??捎眯阅J紸VAILABILITY_MODE選擇同步模式,確保數(shù)據(jù)庫事務的一致性。
2.2.6把輔助副本加入可用性組中
在輔助數(shù)據(jù)庫中執(zhí)行以下T-SQL腳本,將輔助副本加入剛才創(chuàng)建的可用性組“Linux_ag”。
2.2.7添加數(shù)據(jù)庫到可用性組
在主數(shù)據(jù)庫中執(zhí)行以下T-SQL 腳本,將名為test1的數(shù)據(jù)庫添加到名為Linux_ag的可用性組??捎眯越M配置完成。
用SSMS客戶端查看數(shù)據(jù)庫服務器可用性組面板狀態(tài),如圖2,可用性組Linux_ag中有兩個可用性副本,mssql1(主要副本)和mssql2(輔助副本),mssql1的test1數(shù)據(jù)庫與mssql2的test1數(shù)據(jù)庫實時主從同步。
當需要切換主角色所在服務器時,可在執(zhí)行以下T-SQL腳本,切換主節(jié)點。
Docker是一個開源的應用容器引擎,基于golang語言開發(fā),并遵從Apache2.0協(xié)議開源。Docker是一種新型虛擬化方式,和傳統(tǒng)虛擬機技術相比,有很多優(yōu)勢。Docker采用進程隔離技術,無需消耗額外模擬系統(tǒng)的資源,容器部署啟動速度快,遷移擴展便利,利用k8s進行多臺服務器批量集群部署。
3.1.1拉取鏡像
運行以下命令,拉取官方MSSQL2019的Docker鏡像。
3.1.2運行容器
運行以下命令,運行Docker容器。環(huán)境變量“SA_PASSWORD=your_password”,表示SA賬戶的密碼。環(huán)境變量“MSSQL_PID=Developer”,表示要指定的版本。環(huán)境變量“ACCEPT_EULA=Y”,表示在Docker容器映像中運行的MSSQL的使用將受MSSQL許可證條款的約束,你同意并使用它。
3.3.3 Always On可用性組群集配置
用SSMS連接Docker運行的MSSQL服務,可用性組的配置操作與之前普通安裝的可用性組配置一致。
Docker運行數(shù)據(jù)庫,需要volume外掛數(shù)據(jù)卷,才能長期保存數(shù)據(jù),但是如果容器突然崩潰,導致數(shù)據(jù)庫非正常關閉,有可能會損壞數(shù)據(jù)。所以用Docker部署數(shù)據(jù)庫,適合對與數(shù)據(jù)丟失不敏感的業(yè)務,且對分布式橫向擴展部署有需求的場景。
本文詳細闡述了SQL Server數(shù)據(jù)庫在Linux系統(tǒng)中高可用組的安裝配置,增強了數(shù)據(jù)庫讀取橫向擴展能力,實現(xiàn)數(shù)據(jù)在線安全備份,同時增加系統(tǒng)數(shù)據(jù)庫業(yè)務的讀取服務器節(jié)點。如果原本在Windows平臺的業(yè)務需要遷移到Linux上,這個方案可以避免更換數(shù)據(jù)庫廠家,避免一些不必要的代碼改動與兼容性問題。對于數(shù)據(jù)庫業(yè)務訪問和數(shù)據(jù)安全的探討,本文也只是涉及部分內(nèi)容,希望能與各位同行共同探討與借鑒。
[1]葉楊婕,官磊.AlwaysOn可用性組在電子選舉系統(tǒng)中的應用[J].計算機用,2018,38(S2):258-261+278.
[2]郭緒晶. 服務器集群系統(tǒng)高可用模塊設計與實現(xiàn)[D].北京郵電大學,2013.
[3]趙學作.Docker部署SQL Server數(shù)據(jù)庫[J].網(wǎng)絡安全和信息化,2019(07):80-81.