SQL Server ON Linux 高可用

SQL Server
396
0
0
2022-03-27

前言:

SQL Server 已经支持Linux 有很长一段时间了,包括传统群集、高可用性组等,今天测试SQL 2019在Linux 下的高可用组配置。

预计步骤:

环境:

节点三台。

一、安装操作系统 【略】

版本:CentOS Linux release 7.2.1511 (Core) 最小化安装

SQL Server ON Linux 高可用

二、配置本地解析,如果有DNS忽略 【略】

配置主机HOSTNAME,更改HOSTS文件,确保访问正常。

SQL Server ON Linux 高可用

三、配置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密码

SQL Server ON Linux 高可用

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创建可用性组了

首先需要创建一个数据库,并对数据库做全备。

SQL Server ON Linux 高可用

SQL Server ON Linux 高可用

这里有个坑,注意下图,默认有DOMAIN,如果你没有FQDN,那么该是什么就写什么,多余的删除,否则会失败。

SQL Server ON Linux 高可用

此步骤成功后,那么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

SQL Server ON Linux 高可用

pcs cluster setup --name sqlcluster sqlag01 sqlag02 sqlag03 #sqlcluster 为群集名称

SQL Server ON Linux 高可用

启动Packemaker Cluster

pcs cluster start --all enable

检查Pacemaker Cluster群集状态

pcs status --full

SQL Server ON Linux 高可用

安装 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地址都无法启动

SQL Server ON Linux 高可用

解决办法:

1、尝试手动故障转移

pcs resource move ag_cluster-master sqlag03 --master

2、如果失败,尝试在SQL中删除AG组,重新创建

在这个过程中需要观察群集资源状态。

以下状态正常:

SQL Server ON Linux 高可用

SQL Server ON Linux 高可用

经过测试手动,自动故障转移均OK.