2.3.4 将AG添加为群集资源


为SQL Server安装与Pacemaker集成的SQL Server资源代理

在所有节点上运行:

sudo yum install mssql-server-ha


创建Pacemaker用的SQL Server登录名

在所有节点上运行:

USE [master]
GO
CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!'
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]

或者,可以更精细的级别设置权限:

GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin
GRANT VIEW SERVER STATE TO pacemakerLogin


在所有节点,保存SQL Server登录名的凭据。

echo 'pacemakerLogin' >> ~/pacemaker-passwd
echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd
sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
sudo chown root:root /var/opt/mssql/secrets/passwd
sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root


在群集中创建AG资源

创建ocf:mssql:ag master/slave类型的具有可用性组ag1的AG资源ag_cluster:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=true

备注:创建资源后,之后定期地Pacemaker资源代理根据AG的配置自动设置AG的REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT的值。


在群集中创建虚拟IP资源

在一个节点上运行:

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>

在Pacemaker中没有虚拟服务器名。为了在连接串中使用一个字符串服务器名代替IP地址,在DNS中注册虚拟IP地址和希望的虚拟服务器名。对于灾难恢复配置,在主站点和灾备站点的DNS中注册虚拟IP地址和希望的虚拟服务器名。


添加Colocation约束

Colocation约束主要用于根据资源 A的节点位置来决定资源 B的位置,即在启动资源 B的时候,会依赖资源 A的节点位置。例如将资源 A与资源 B进行 Colocation约束,假设资源A已经运行在 node1上,则资源 B也会在node1上启动,而如果node1故障,则资源B与 A会同时切换到node2而不是其中某个资源切换到 node3。


Pacemaker群集中的几乎所有决定,比如选择资源运行的位置,都是靠比较分数来制定。每个资源计算分数。群集资源管理器将选择具有特定资源的最高分数的节点。 如果某个节点具有负的分值的资源,资源无法在该节点上运行。


在Pacemaker群集上,你可以对含有约束的群集的做决策。约束有一个分数。如果约束的分数低于INFINITY,Pacemaker将它看作建议。分数为INFINITY是必需的。

若要确保主副本和虚拟 ip 资源在同一主机上运行,请定义一个分数为 INFINITY 的主机托管约束。 若要添加colocation约束,请在一个节点上运行以下命令。

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master


添加排序约束

Colocation约束具有隐式排序约束。在移动AG资源前,它将先移动虚拟IP资源。

若要防止 IP 地址暂时指向具有故障转移前的次要副本的节点,请添加排序约束。

若要添加排序约束,请在一个节点上运行以下命令:

sudo pcs constraint order promote ag_cluster-master then start virtualip


查看群集状态

sudo pcs status

SQL Server 2017 AlwaysOn on Linux 配置和维护(10)_第1张图片