iT邦幫忙

0

Rocky linux 上的 MSSQL AG 手把手安裝

  • 分享至 

  • xImage
  •  

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(僅限設定, 無使用者資料庫備援)

流程開始

  1. 改hosts(3台)
[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
  1. 建立目錄放endpoint要用的憑證(3台)
sudo mkdir /var/opt/mssql/cert
sudo chown --reference=/var/opt/mssql /var/opt/mssql/cert
  1. rocky1建憑證
--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'
);
  1. 複製cer、key到rocky2、rocky3
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/
  1. rocky2、rocky3匯入憑證
--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'
);
  1. 5022 port啟用 , 建立endpoint(3台)
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
    );
  1. 啟用AG功能(3台)
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server.service
  1. 建立AG , 叢集類型選外部 , rocky3選僅設定 , 資料庫初始化部分自行完成 , rocky3不用初始化使用者資料庫 ,
    它只是用來參與投票不當備援 , 可以把它想像成WSFC的仲裁角色。
    https://ithelp.ithome.com.tw/upload/images/20260402/201698604zUWfpQ4gj.jpg
    到這已經完成架構 , 接下來才是比較容易撞牆的部分
    先說明後續會提到的五個專有名詞

     pacemaker        : 資源管理器,是整個架構的大腦。
     pcs              : 命令列工具,讓你不需要手動去改複雜的 XML 設定檔。
     corosync         : 負責底層的群組通訊與成員偵測。
     fence-agents-all : 在發生「腦裂 (Split-brain)」時,確保故障節點徹底斷電或離線,防止兩台主機同時寫入同一份資料導致損毀。
     mssql-server-ha  : Pacemaker 與 SQL Server 之間的橋樑。
    
  2. 啟用highavailability功能並開啟叢集通訊用的port(3台)

sudo dnf config-manager --set-enabled highavailability
sudo firewall-cmd --permanent --add-service=high-availability
sudo firewall-cmd --reload
  1. 安裝叢集使用的套件(3台)
sudo dnf install -y pacemaker pcs corosync fence-agents-all mssql-server-ha
  1. 立馬啟動且未來都會自動啟動(3台)
sudo systemctl enable --now pcsd
  1. 設定叢集管理帳號密碼 , hacluster由pcs自動建立 , 只需手動幫它建密碼 , 密碼建議都一樣(3台)
sudo passwd hacluster
  1. 驗證身分(3台)
sudo pcs host auth rocky1 rocky2 rocky3
  1. 建立cluster
sudo pcs cluster setup ag_cluster rocky1 rocky2 rocky3
sudo pcs cluster start --all (這步會啟用corosync、pacemaker)
sudo pcs cluster enable --all
  1. 停用 STONITH (如果你目前沒有實體硬體防護設備,暫時關閉它以確保叢集能跑起來)
sudo pcs property set stonith-enabled=false
  1. 忽略仲裁
sudo pcs property set no-quorum-policy=ignore
  1. 建一組SQL LOGIN , 這組會是專門給cluster連線進資料庫用的
--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
  1. 手動建立密碼檔 , 存放PMLogin的登入資訊 , 權限照抄微軟手冊
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
  1. 告訴 Pacemaker 去管理這個 AG 的主從狀態 , LINUX認這個叢集名稱視同AG , ag_name後面接的是你AG的完整名稱
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=alwayson01 \
meta failure-timeout=60s promotable notify=true
  1. 建立虛擬 IP , 程式連線虛擬IP會自動導向主要副本 , 如同LISTENER
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=192.168.1.10
  1. 設定綑綁規則(確保 VIP 永遠跟著 Master 走而不是寫死IP)
sudo pcs constraint colocation add virtualip with promoted ag_cluster-clone INFINITY
sudo pcs constraint order promote ag_cluster-clone then start virtualip
  1. 驗證
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接手 , 以上。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言