在 Azure CentOS VM 中配置 SQL Server 2019 AG - (下)

  • 配置 Internal Load Balancer

    大多數公有云上不支持直接配置羣集資源的floating IP,在Azure中則須要使用Load Balancer作爲的偵聽器的IP,而且failover 時,VIP資源可以在正確的主副本上啓動。
    Internal Load Balancer只容許內網訪問AG的偵聽器。

  • 建立load balancer

個人三臺VM都位於sqldemoVNET/linuxsubnet子網,AG Listener以前在SQL中配置是172.17.2.7,因此這裏frontend 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的檢查時的鏈接端口。node

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要指定爲truelinux

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

配置完成,查看羣集狀態:sql

[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
  • 總結

  1. SQL 2019在Azure VM上的Pacemaker羣集,2020年纔開始有Fencing Agent支持的
  2. 這是我在測試一個方案時的總結和記錄,不是一篇小白文,但不妨礙作爲參考。
  3. 本文內容只表明我的觀點,不表明任何公司和組織的觀點
相關文章
相關標籤/搜索