前言:
SQL Server 已经支持Linux 有很长一段时间了,包括传统群集、高可用性组等,今天测试SQL 2019在Linux 下的高可用组配置。
预计步骤:
环境:
节点三台。
一、安装操作系统 【略】
版本:CentOS Linux release 7.2.1511 (Core) 最小化安装
二、配置本地解析,如果有DNS忽略 【略】
配置主机HOSTNAME,更改HOSTS文件,确保访问正常。
三、配置SSH 证书登录
生成密钥
ssh-keygen -t rsa
将/root/.ssh/id_rsa.pub内容复制到 /root/.ssh/ssh-keygen -t rsa 【每节点】
配置SSH 允许证书登录,自己测试一把。
四、安装SQL 【每节点】
测试环境建议关闭防火墙、SELINUX
下载SQL REPO包
wget https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
安装:
yum install -y mssql-server
初始化SQL
选择版本,配置SA密码
6是企业版,看清楚。
查看运行状态:
systemctl status mssql-server
安装SQL命令行工具:
下载REPO
wget https://packages.microsoft.com/config/rhel/7/prod.repo
安装
yum install -y mssql-tools unixODBC-devel
yum安装到/opt/mssql-tool下,如果想省事,自己添加环境变量,否则使用命令行请到此路径bin/目录下执行sqlcmd
本地连接SQL
sqlcmd -S localhost -U SA -P '<YourPassword>'
如果出现 1> 说明成功。
三、配置高可用组
可以参考官方链接:
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-create-availability-group?view=sql-server-ver15
这里直说步骤,具体的可参考官方链接。
/opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 # 所有节点执行,开启可用性组功能
重启所有节点mssql
systemctl restart mssql-server
创建可用性组终结点和证书 【具体操作忽略,每节点】
将所有节点的证书彼此复制到所有节点,并更改文件属主 mssql 【具体操作忽略,每节点】
在所有节点创建与其他节点管理的实例级登录名和用户 【具体操作忽略,每节点】
将节点用户与证书关联 【具体操作忽略,每节点】
完成以上就可以通过SSMS创建可用性组了
首先需要创建一个数据库,并对数据库做全备。
这里有个坑,注意下图,默认有DOMAIN,如果你没有FQDN,那么该是什么就写什么,多余的删除,否则会失败。
此步骤成功后,那么SQL 可用性组已经创建完了,节点的SQL复制是没有问题的,但是无法切换。
需要Pacemake做底层Failover.
为 Pacemaker 创建 SQL Server 登录和权限,所有节点执行 【具体操作忽略,每节点】
四、安装 Pacemaker
yum install pacemaker pcs fence-agents-all resource-agents -y
创建 Pacemake使用的账号密码
passwd hacluster
配置启动
systemctl enable pcsd
systemctl enable pacemaker.service
systemctl enable corosync.service
启动服务
systemctl start pcsd
查看运行状态
systemctl status pcsd
为群集节点授权
pcs cluster auth sqlag01 sqlag02 sqlag03 -u hacluster
pcs cluster setup --name sqlcluster sqlag01 sqlag02 sqlag03 #sqlcluster 为群集名称
启动Packemaker Cluster
pcs cluster start --all enable
检查Pacemaker Cluster群集状态
pcs status --full
安装 SQL Server HA 和 SQL Server 代理包
yum install mssql-server-ha
systemctl restart mssql-serve
编辑文件 【所有节点】
/var/opt/mssql/secrets/passwd 增加以下两行内容:
PMLogin
强密码
说明:
PMLogin 为前面创建的:为 Pacemaker 创建 SQL Server 登录和权限
记得对可用性组授权。
完成后:在集群中创建资源及关联资源
在 Pacemaker 群集中创建可用性组资源(仅限外部类型)
资源组:AG本身及IP地址
1.1 创建可用性资源组:
sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
示例:
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true
<NameForAGResource> 资源组唯一的名称
<AGName> SQL中可用性组的名称
1.2 创建侦听器IP地址资源
pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
示例:
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=10.128.16.240
1.3 要确保 IP 地址和 AG 资源在同一节点上运行,必须配置并置约束
sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master #没有空格,连在一起的
示例:
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
说明:IP地址资源名称:virtualip AG资源名称:ag_cluster-master
删除:
pcs constraint colocation remove virtualip ag_cluster-master
1.4 创建排序约束以确保 AG 资源在 IP 地址之前启动并运行。 虽然并置约束意味着排序约束,但这将强制执行它
sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
示例:
sudo pcs constraint order promote ag_cluster-master then start virtualip
删除:
pcs constraint order remove virtualip ag_cluster-master
可能的问题:
群集AG资源无法启动,关联后连群集IP地址都无法启动
解决办法:
1、尝试手动故障转移
pcs resource move ag_cluster-master sqlag03 --master
2、如果失败,尝试在SQL中删除AG组,重新创建
在这个过程中需要观察群集资源状态。
以下状态正常:
经过测试手动,自动故障转移均OK.