Q : 為什麼要在LINUX上架微軟資料庫的高可用?
A : 好奇
Q : 優點、缺點是什麼?
A : 優點是佈署特快, 幾行指令取代WINDOWS一堆UI介面操作, 缺點是整合性不如WSFC且對LINUX須有一定熟悉度
Q : 生產環境推薦佈署在WINDOWS還是LINUX
A : 首推WINDOWS , 特殊需求選擇LINUX , 原因是當災難發生追Root cause時 , 網上的資源在WINDOWS的案例較多較好參考
https://learn.microsoft.com/zh-tw/sql/linux/sql-server-linux-availability-group-ha?view=sql-server-ver17
微軟官網推薦三種設計模式
a.三個同步複本 : 提供讀取級別、高可用性和資料保護。
b.兩個同步複本 : 啟用讀取級別 , '不提供'自動高可用性。
c.兩個同步複本和僅限設定複本 : 提供資料保護,還可能會提供高可用性。
以下目標把c建立起來 , 此架構 1.省成本 2.可以自動容錯移轉
SERVER架構 :
主機
192.168.1.11 rocky1
192.168.1.12 rocky2
192.168.1.13 rocky3
AG節點
rocky1(主)、rocky2(副)、rocky3(僅限設定, 無使用者資料庫備援)
流程開始
[user@rocky1 ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 rocky1
192.168.1.12 rocky2
192.168.1.13 rocky3
sudo mkdir /var/opt/mssql/cert
sudo chown --reference=/var/opt/mssql /var/opt/mssql/cert
--T-SQL
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz@WSX3edc';
CREATE CERTIFICATE AG_Cert WITH SUBJECT = 'AG Certificate';
BACKUP CERTIFICATE AG_Cert TO FILE = '/var/opt/mssql/cert/AG_Cert.cer'
WITH PRIVATE KEY (
FILE = '/var/opt/mssql/cert/AG_Cert.key',
ENCRYPTION BY PASSWORD = '1qaz@WSX3edc'
);
sudo scp /var/opt/mssql/cert/AG_Cert.* user@192.168.1.12:/var/opt/mssql/cert/
sudo scp /var/opt/mssql/cert/AG_Cert.* user@192.168.1.13:/var/opt/mssql/cert/
--T-SQL
CREATE CERTIFICATE AG_Cert
FROM FILE = '/var/opt/mssql/cert/AG_Cert.cer'
WITH PRIVATE KEY (
FILE = '/var/opt/mssql/cert/AG_Cert.key',
DECRYPTION BY PASSWORD = '1qaz@WSX3edc'
);
sudo firewall-cmd --permanent --add-port=5022/tcp
sudo firewall-cmd --reload
--T-SQL
CREATE ENDPOINT [Hadr_endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE AG_Cert,
ROLE = ALL
);
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server.service
建立AG , 叢集類型選外部 , rocky3選僅設定 , 資料庫初始化部分自行完成 , rocky3不用初始化使用者資料庫 ,
它只是用來參與投票不當備援 , 可以把它想像成WSFC的仲裁角色。
到這已經完成架構 , 接下來才是比較容易撞牆的部分
先說明後續會提到的五個專有名詞
pacemaker : 資源管理器,是整個架構的大腦。
pcs : 命令列工具,讓你不需要手動去改複雜的 XML 設定檔。
corosync : 負責底層的群組通訊與成員偵測。
fence-agents-all : 在發生「腦裂 (Split-brain)」時,確保故障節點徹底斷電或離線,防止兩台主機同時寫入同一份資料導致損毀。
mssql-server-ha : Pacemaker 與 SQL Server 之間的橋樑。
啟用highavailability功能並開啟叢集通訊用的port(3台)
sudo dnf config-manager --set-enabled highavailability
sudo firewall-cmd --permanent --add-service=high-availability
sudo firewall-cmd --reload
sudo dnf install -y pacemaker pcs corosync fence-agents-all mssql-server-ha
sudo systemctl enable --now pcsd
sudo passwd hacluster
sudo pcs host auth rocky1 rocky2 rocky3
sudo pcs cluster setup ag_cluster rocky1 rocky2 rocky3
sudo pcs cluster start --all (這步會啟用corosync、pacemaker)
sudo pcs cluster enable --all
sudo pcs property set stonith-enabled=false
sudo pcs property set no-quorum-policy=ignore
--T-SQL
CREATE LOGIN PMLogin
WITH PASSWORD = '1qaz@WSX';
GO
GRANT VIEW SERVER STATE TO PMLogin;
GO
GRANT ALTER, CONTROL, VIEW DEFINITION
ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
GO
sudo sh -c 'echo "PMLogin" >> /var/opt/mssql/secrets/passwd'
sudo sh -c 'echo "1qaz@WSX" >> /var/opt/mssql/secrets/passwd'
sudo chown root:root /var/opt/mssql/secrets/passwd
sudo chmod 400 /var/opt/mssql/secrets/passwd
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=alwayson01 \
meta failure-timeout=60s promotable notify=true
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=192.168.1.10
sudo pcs constraint colocation add virtualip with promoted ag_cluster-clone INFINITY
sudo pcs constraint order promote ag_cluster-clone then start virtualip
sudo pcs status
會出現以下的資訊 , Full List of Resources的Promoted表示目前誰是大哥
Cluster name: ag_cluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: rocky2 (version 2.1.10-1.1.el9_7-5693eaeee) - partition with quorum
* Last updated: ************************* on rocky1
* Last change: ************************* by root via root on rocky1
* 3 nodes configured
* 4 resource instances configured
Node List:
* Online: [ rocky1 rocky2 rocky3 ]
Full List of Resources:
* Clone Set: ag_cluster-clone [ag_cluster] (promotable):
* Promoted: [ rocky1 ]
* Unpromoted: [ rocky2 rocky3 ]
* virtualip (ocf:heartbeat:IPaddr2): Started rocky1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
這時候你已經可以從SSMS或是其他連線工具測試192.168.1.10
筆記一點 , 透過pacemaker管理AG不建議從資料庫做容錯移轉 , 因為AG不曉得有人在'外部'控制它 , 這就是為什麼整合性不如WSFC的主因
暴力測試將rocky1關機 , pacemaker透過corosync知道rocky1沒有心跳 , 同時rocky3會一起參與投票將控制權交給rocky2接手 , 以上。