在Linux中安装MSSQL 2017 Always On Availability Group

0    264    2

👉 本文共约8443个字,系统预计阅读时间或需32分钟。

SQL Server 2017 最多支持9个副本(1个主副本和8个辅助副本),其中最多支持3个自动故障转移和3个同步提交的可用性副本。Linux 环境的AlwaysOn AG 不依赖于 Active Directory,可以在没有 Windows Server故障转移群集(WSFC)和 Pacemaker(Linux集群资源管理器)情况下搭建 Always On Availability Groups。以前是先配置 WSFC 再配置 Always On AG。Linux 环境下可以先配置 Always On AG ,再配置群集资源管理器。

Linux 上安装 SQL Server AG 步骤:

  1. 在 Linux 群集节点上安装和配置 SQL Server 2017
  2. 创建 SQL Server 2017 Always On Availability Group
  3. 配置 Pacemaker - Linux 集群资源管理器
  4. 将 SQL Server 2017 Always On Availability Group 添加为群集中的资源

相关包目录:https://packages.microsoft.com/

一、架构

在Linux中安装MSSQL 2017 Always On  Availability Group

安装配置环境

现在创建三台CentOS 7 的服务器: 172.72.9.100,172.72.9.101,172.72.9.102

安装MSSQL

配置过程:

在Linux中安装MSSQL 2017 Always On  Availability Group

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

二、SQL Server 证书及权限配置

参考:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-availability-group-configure-ha?view=sql-server-2017

既然没有了域认证,需要配置证书认证,步骤:

  1. 启用SQL Server Always On Availability Groups功能
  2. 在所有服务器上为SQL Server Always On Availability Groups安装Linux资源代理
  3. 在所有Linux服务器启用防火墙上的Always On Availability Group端点端口
  4. 在主副本上创建数据库主密钥
  5. 创建将用于加密可用性组端点的证书
  6. 使用证书为主副本创建Always On Availability Group端点进行身份验证
  7. 将证书导出到文件
  8. 将证书文件复制到辅助副本
  9. 授予证书文件的SQL Server帐户权限
  10. 在主副本上创建登录账号以供辅助副本使用
  11. 为登录账号创建用户
  12. 将步骤5中创建的证书与用户关联
  13. 授予登录账号的CONNECT权限

1.所有服务器:启用 hadr 功能(Always On Availability Groups)

在托管 SQL Server 实例的每个节点上启用 AlwaysOn 可用性组。 然后重新启动 mssql-server。 运行以下脚本:

image-20211217102119966

启用 AlwaysOn_health 事件会话

可选择性地启用 AlwaysOn 可用性组的扩展事件,以便在对可用性组进行故障排除时帮助诊断根本原因。 在每个 SQL Server 实例上运行以下命令:

2.所有服务器:为 SQL Server AlwaysOn AG 安装Linux资源代理

群集资源代理程序 mssql-server-ha 是 Pacemaker 和 SQL Server 之间的接口

结果:

3.所有服务器:启用防火墙上的 AlwaysOn AG 端点默认端口5022 (或关闭防火墙!)

跑脚本完成第4-7步

8.各服务器上的证书相互传给其他服务器

3台查询:

9.所有服务器:授予证书文件所有者权限

10.各实例证书还原及账号授权

SSMS 连接到任意一个实例,查询选项启用[SQLCMD模式],批量执行以下脚本

三、AG配置

现可在 Windows 上使用 SSMS 连接 Linux 上的 SQL Server 配置 AlwaysOn AG。

脚本运行

https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-availability-group-configure-ha?view=sql-server-ver15

创建AG

创建具有三个同步副本的 AG,只在lhrmssql100上运行:

在Linux中安装MSSQL 2017 Always On  Availability Group

将次要副本联接到 AG

在lhrmssql101和lhrmssql102上运行:

运行完成后:

在Linux中安装MSSQL 2017 Always On  Availability Group

将数据库添加到可用性组

确保添加到可用性组的数据库处于完全恢复模式,并具有有效的日志备份。 如果是测试数据库或新建的数据库,请执行数据库备份。

只在主服务器上运行:

验证是否已在辅助服务器上创建了数据库:

image-20211217143658226

侦听器状态:

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

图形运行

1. 在节点 lhrmssql100 实例上创建可用性组,名为 LINUX_SQLAG

在Linux中安装MSSQL 2017 Always On  Availability Group

  • Windows Server 故障转移群集:当可用性组托管在属于 Windows Server 故障转移群集的 SQL Server 的实例上时使用,以实现高可用性和灾难恢复。 适用于所有受支持的 SQL Server 版本。
  • EXTERNAL :当可用性组托管在由外部群集技术(例如 Linux 上的 Pacemaker)管理的 SQL Server 的实例上时使用,以实现高可用性和灾难恢复。 适用于 SQL Server 2017 (14.x) 及更高版本。
  • NONE :当可用性组托管在不由群集技术管理的 SQL Server 的实例上时使用,以实现读取缩放和负载均衡。 适用于 SQL Server 2017 (14.x) 及更高版本。

选择 EXTERNAL,Linux 环境下,创建并配置Always On Availability Group后,将安装和配置Pacemaker。“数据库级别运行状况检测” 勾选此框,为可用性组启用数据库级别运行状况检测 (DB_FAILOVER)。 数据库运行状况检测会说明数据库何时不再处于联机状态、何时出错以及何时触发可用性组的自动故障转移。(更多参考:Always On 可用性组的“指定可用性组选项”页

2. 选择可用性数据库

先创建数据库,然后添加到可用性组里。

在Linux中安装MSSQL 2017 Always On  Availability Group

3. 添加副本并设置

在Linux中安装MSSQL 2017 Always On  Availability Group

可以看到,故障转移模式从以前的“手动” 和“自动”,变为 “外部(External)”。故障转移模式值 External 用于与 Pacemaker 等Linux集群资源管理器一起处理故障转移。

其他选项配置都差不多:

在Linux中安装MSSQL 2017 Always On  Availability Group

4. 侦听器配置

在Linux中安装MSSQL 2017 Always On  Availability Group

必须手动将侦听器名称添加为DNS记录: LINUX_LSNAG , IP为 192.168.2.119

img

创建侦听器:

img

5. 只读路由配置

image-20211217113127923

6. 选择数据库同步

在Linux中安装MSSQL 2017 Always On  Availability Group

这里选择 “自动种子设定” ,因为数据库较小。SQL Server 自动为此组中的每个数据库创建次要副本。 自动种子设定要求数据和日志文件路径在参与此组的每个 SQL Server 实例上均相同。(更多参考:“选择初始数据同步”页(AlwaysOn 可用性组向导)

7. 验证及检查

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

完成后结果:

img

img

但此时侦听器的状态是离线的:

img

虽然 SQL Server Always On Availability Group 安装成功了,但是现在无法进行故障转移

在Linux中安装MSSQL 2017 Always On  Availability Group

这是因为它仍然没有暴露给 Linux 操作系统。要通过侦听器名称访问 Always On Availability Group,必须在Linux群集资源管理器上注册它。下一篇将安装并配置 Linux 集群资源管理器 Pacemaker。配置完成后,可在 Pacemaker 上注册 SQL Server Always On Availability Group 和侦听器名称。

四、Linux 集群资源管理器 Pacemaker 安装配置

参考:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-availability-group-cluster-rhel?view=sql-server-ver15

现在将完成 Linux 集群资源管理器 Pacemaker 的安装和配置。Pacemaker 相当于 Windows 中的故障转移群集 (WSFC)工具。Linux 环境下部署 always on 的高可用,微软官方推荐使用开源软件 Pacemaker。Pacemaker 适用于大多数Linux发行版,但SQL Server Always On Availability Groups 目前仅在 Red Hat Enterprise Linux 7.3 / 7.4 / 7.5 / 7.6,SUSE Linux Enterprise Server 12 SP2 和 Ubuntu 16.04 上受支持。

WSFC 和 Pacemaker 存在更多的相似之处。 两者都提供这样一种方式:使用多个单独的服务器,在配置中将它们合并,从而提供可用性;此外两者都具有资源、约束(尽管实施方式不同)、故障转移等概念。 为支持 Pacemaker 的可用性组和 FCI 配置(包括自动故障转移等),Microsoft 为 Pacemaker 提供了 mssql-server-ha 包,它与 WSFC 中的资源 DLL 类似但不完全相同。 WSFC 和 Pacemaker 之间的区别之一是 Pacemaker 中没有网络名称资源,该组件有助于提取 WSFC 上的侦听器名称(或 FCI 名称)。 DNS 在 Linux 上提供名称解析。

Pacemaker 的安装和配置基本步骤:

  1. 安装Pacemaker软件包

  2. 启动pcs守护程序并强制它在系统引导时启动

  3. 配置Linux防火墙以允许Pacemaker通信

  4. 强制Pacemaker和Corosync守护进程在系统引导时启动

  5. 为默认的hacluster帐户分配密码

  6. 在Linux集群节点之间设置身份验证

  7. 创建Linux集群

  8. 启动Linux群集

  9. 配置防护

  10. 配置资源级策略

  11. 为Pacemaker创建SQL Server登录账号

  12. 在本地文件系统上保存Pacemaker登录账号凭据

  13. 所有服务器:安装 Pacemaker

  1. 所有服务器:启动pcs守护程序并强制它在系统引导时启动

  1. 所有服务器:配置Linux防火墙以允许Pacemaker通信(或禁用防火墙)

如果防火墙没有内置高可用性配置,请打开 Pacemaker 的以下端口。

  • TCP:端口 2224、3121、21064

  • UDP:端口 5405

  1. 所有服务器:先设置自启动 pacemaker & corosync 服务(暂不启动),后续再添加 AlwaysOn AG 资源

  1. 所有服务器:充当 Pacemaker 群集的节点,安装时创建的默认账户 hacluster

  1. 主服务器(选任意一台作为主服务器来配置):在Linux集群3个节点之间设置身份验证(将输入账户hacluster的密码验证)

  1. 主服务器:创建Linux集群,名称为 LINUXHACLUSTER,添加3个节点

  1. 主服务器:启动Linux群集服务

运行过程:

  1. 所有服务器:配置防护

Hyper-V和Azure尚不支持使用 STONITH RHEL 与 Pacemaker 群集,这里禁止。(参考:对于 Linux 部署 SQL Server 可用性基础知识

  1. 所有服务器:配置资源级策略。
    以下设置禁用,集群根据资源的当前故障计数和迁移阈值决定是否再次尝试在同一节点上启动

  1. 为Pacemaker创建SQL Server登录账号,授予可用组 LINUX_SQLAG 权限,在所有服务器运行:

  1. 所有服务器:在本地文件系统上保存Pacemaker登录凭据(Pacemaker通过MSSQL账号pacemakerLogin连接)

Linux 集群资源管理器 Pacemaker 已安装配置完成,接下来则是将配置SQL Server 2017 Always On Availability Group和侦听器名称的虚拟IP地址作为群集中的资源。

五、配置监听器测试故障转移

前面已经配置好了 AlwaysOn AG 和 Pacemaker ,但是还不能进行故障转移。为了设置高可用,需要添加侦听器,用侦听器去访问数据库。群集资源代理程序 mssql-server-ha 是 Pacemaker 和 SQL Server 之间的接口。现在将创建和配置SQL Server Always On Availability Group的过程,并将相应的侦听器作为群集资源。

选择任意一个节点来做配置:

  1. 在Pacemaker上创建Always On Availability组资源

LINUX_SQLAG: Pacemaker 集群资源的名称(可不必与 AlwaysOn AG 的名称相同,此测试设置相同)
ocf:mssql:ag: 由mssql-server-ha提供的Open Cluster Framework(OCF)资源代理的名称
ag_name=LINUX_SQLAG: AlwaysOn AG 的可用性组的名称
master: 将资源定义为 master/slave 克隆资源
notify=true:

  1. 为Always On Availability Group侦听器创建虚拟IP地址资源

AGListener_VIP: 虚拟IP地址资源的名称
ocf:heartbeat:IPaddr2: 管理虚拟IPv4地址的Open Cluster Framework(OCF)资源代理的名称
ip=172.72.9.105: AlwaysOn AG 的可用性组的侦听器IP
cidr_netmask=24: AlwaysOn AG 的可用性组的侦听器子网掩码

查看:

  1. 将Always On Availability Group资源配置为在与虚拟IP地址资源相同的计算机上运行

AGListener_VIP: 虚拟IP地址资源的名称
LINUX_SQLAG-master: AlwaysOn AG 资源的克隆别名
INFINITY: 分配给资源约束的分数;这意味着约束是必需的
with-rsc-role=Master: 约束的附加属性;这意味着此约束与主克隆(或Always On Availability Group主副本)相关联

由于Always On Availability Group侦听器名称只能将客户端应用程序重定向到主副本,因此可用性组和侦听器名称必须始终在同一群集节点中运行

  1. 配置群集资源应该开始/停止的顺序

promote: 约束行为,将资源从slave 提升为 master 资源
LINUX_SQLAG-master: AlwaysOn AG 资源的克隆别名
start: 初步操作完成后下一步的动作
AGListener_VIP: 虚拟IP地址资源的名称

在WSFC中,事件序列如下:

停止当前主副本上的可用性组
在当前主副本上停止侦听器名称
在新的主副本上启动侦听器
在新主副本上启动可用性组

在侦听器名称上定义约束时,事件序列如下:

停止当前主副本上的虚拟IP地址资源
停止当前主副本上的可用性组
在新的主副本上启动虚拟IP地址资源
在新主副本上启动可用性组

  1. 验证Always On可用性组配置是否正常

过程:

在Linux中安装MSSQL 2017 Always On  Availability Group

配置读写分离

配置:

在Linux中安装MSSQL 2017 Always On  Availability Group

在Linux中安装MSSQL 2017 Always On  Availability Group

故障切换

自动故障转移测试

现在算是配置好了,可以模拟服务器宕机让其自动进行故障转移。现在主节点在 lhrmssql100 上,把这台服务器关机测试看看!!

连接:

将lhrmssql100 服务器关机:

同时查看侦听器的连接情况:

可以看到已经连接到lhrmssql102了,此时再重启lhrmssql100服务器:

可以看到,集群恢复正常状态!!

手动故障转移测试

现在主副本在 lhrmssql102 上面了,我将切回到 lhrmssql100 上,在任意节点执行:

一会后,发现副本角色进行了切换。

AlwaysOn AG 的切换是通过系统命令去切换的,SSMS 操作界面禁用了次此操作。

SQL Server Always On AG on Linux 配置起来确实麻烦,还需要基于linux的群集,了解相关命令。对习惯用windows处理的人员来说,运维是比较麻烦的。

数据字典

参考

https://www.mssqltips.com/sqlservertip/5161/install-and-configure-sql-server-2017-availability-groups-on-linux--part-1/

https://www.mssqltips.com/sqlservertip/5239/install-and-configure-sql-server-2017-availability-groups-on-linux--part-2/

https://www.mssqltips.com/sqlservertip/5269/install-and-configure-sql-server-2017-availability-groups-on-linux--part-3/

https://blog.csdn.net/kk185800961

https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-availability-group-configure-ha?view=sql-server-2017

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    4 × 5 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部