配置 Internal Load Balancer 創建load balancer 我的三台VM都位於sqldemoVNET/linuxsubnet子網,AG Listener之前在SQL中配置是172.17.2.7,所以這裡frontedn ip也要一樣。 創建LB health probe he ...
-
配置 Internal Load Balancer
-
創建load balancer
我的三台VM都位於sqldemoVNET/linuxsubnet子網,AG Listener之前在SQL中配置是172.17.2.7,所以這裡frontedn ip也要一樣。
az network lb create \
--resource-group SQL-DEMO-RG \
--name sql19agLB \
--frontend-ip-name sql19agListener \
--private-ip-address 172.17.2.7 \
--backend-pool-name sql19aglbBackend \
--vnet-name sqldemoVNET \
--subnet linuxsubnet \
--sku Standard
-
創建LB health probe
health probe是LB用於定時檢查後端VM是否健康,這裡定義使用59999作為VM的檢查時的連接埠。
az network lb probe create \
--resource-group SQL-DEMO-RG \
--lb-name sql19agLB \
--name sql19lbProbe \
--protocol tcp \
--port 59999
-
創建LB rule
rule定義了前端IP的流量如何分佈到後端的伺服器和埠。floating-ip要指定為true
az network lb rule create \
--resource-group SQL-DEMO-RG \
--lb-name sql19agLB \
--name sql19agRule \
--protocol tcp \
--frontend-port 1433 \
--backend-port 1433 \
--frontend-ip-name sql19agListener \
--backend-pool-name sql19aglbBackend \
--probe-name sql19lbProbe \
--floating-ip true
-
修改三台VM的網卡配置,將LB應用到這些網卡
# 找出相關的網卡的IP配置信息
az network nic list -g SQL-DEMO-RG
# 將三台VM的網卡加到LB的backend pool中,以SQL19N1為例
az network nic ip-config address-pool add -g SQL-DEMO-RG \
--address-pool sql19aglbBackend --nic-name sql19n1152 \
--ip-config-name ipconfig1 --lb-name sql19agLB
-
在Pacemaker群集中配置LB資源
# 創建LB資源,59999是前面LB中定義的probe port
pcs resource create azure_load_balancer azure-lb port=59999
# 創建一個資源組,將vip和LB資源放入這個組
pcs resource group add virtualip_group azure_load_balancer virtualip
# 創建colocation約束,保證LB資源和AG主副本要運行在同一個node
pcs constraint colocation add azure_load_balancer agcluster-master INFINITY with-rsc-role=Master
# 創建order約束,保證AG資源要先於LB資源啟動
pcs constraint order promote agcluster-master then start azure_load_balancer
# 查看約束
pcs constraint list --full
-
創建AG Listener
-
將Listener IP加到每個節點的hosts文件
echo "172.17.2.7 SQL19-AGL" >> /etc/hosts
-
在主副本實例上創建Listener
ALTER AVAILABILITY
GROUP [ag1] ADD LISTENER 'SQL19-AGL' (
WITH IP(('172.17.2.17' ,'255.255.255.0'))
,PORT = 1433
);
GO
配置完成,查看群集狀態:
[root@SQL19N3 ~]# pcs status
Cluster name: agcluster
Stack: corosync
Current DC: SQL19N1 (version 1.1.20-5.el7_7.2-3c4c782f70) - partition with quorum
Last updated: Wed Apr 29 08:08:27 2020
Last change: Wed Apr 29 08:01:45 2020 by root via cibadmin on SQL19N3
3 nodes configured
6 resources configured
Online: [ SQL19N1 SQL19N2 SQL19N3 ]
Full list of resources:
rsc_st_azure (stonith:fence_azure_arm): Started SQL19N1
Master/Slave Set: agcluster-master [agcluster]
Masters: [ SQL19N3 ]
Slaves: [ SQL19N1 SQL19N2 ]
Resource Group: virtualip_group
azure_load_balancer (ocf::heartbeat:azure-lb): Started SQL19N3
virtualip (ocf::heartbeat:IPaddr2): Started SQL19N3
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
-
測試failover
使用SQLCMD連接Listener,查看當前的@@servername
sqlcmd -SSQL19-AGL -Q"select @@servername" -Usa -p
手動failover之後,再查看@@servername
# 手動failover
pcs resource move agcluster-master SQL19N1 --master
# 刪除自動生成的constraint
pcs constraint remove cli-prefer-agcluster-master
sqlcmd -SSQL19-AGL -Q"select @@servername" -Usa -p
-
總結
- SQL 2019在Azure VM上的Pacemaker群集,2020年才開始有Fencing Agent支持的
- 這是我在測試一個方案時的總結和記錄,不是一篇小白文,但不妨礙做為參考。
- 本文內容只代表個人觀點,不代表任何公司和組織的觀點