五分钟搞定!Linux平台上用Ansible自动化部署SQL Server AlwaysOn集群

前言

以下内容是由红帽官方博客整理而成,使用Ansible在Linux平台上自动化部署SQL Server AlwaysOn集群

不熟悉整个流程的朋友可以先看之前的部署文章,手动部署一遍

从DNS配置到Pacemaker部署:一步步教你在Linux平台上实现AlwaysOn集群

随着RHEL 8.7和RHEL 9.1的正式发布,这些功能已由Red Hat和Microsoft共同支持,作为最新RHEL发行版的一部分,并通过Ansible Automation Hub提供。之前的博客已向您展示了我们所交付功能的范围,而本篇博客将介绍如何使用这些功能。

为了帮助设置和配置,Red Hat通过Github提供了社区支持的脚本,允许您在Azure、裸金属(也适用于在RHEL或OpenShift虚拟化平台上托管的虚拟机)和VMware VSphere部署中设置SQL Server高可用性组AlwaysOn集群。

在使用这些脚本时,整个安装过程总共分为三个步骤:

  • 第一步:在数据库主节点上安装并配置初始SQL Server,并创建好数据库
  • 第二步:在RHEL上安装并配置两个额外的SQL Server数据库节点,以便加入到集群,总共三个数据库节点组成AlwaysOn集群
  • 第三步:这是平台特定的步骤,负责自动安装配置AlwaysOn高可用性组和与RHEL高可用性附加组件里面提供的Pacemaker集群服务

脚本内容

整套脚本提供的文件包括:

  • run.sh :主要驱动脚本,负责调用其他脚本。

  • create_example_db.j2 :一个示例T-SQL脚本,用于在第1步中创建的SQL Server上创建数据库。

  • inventory: 一个资产文件,包含我们将在AlwaysOn集群中配置的服务器名称。

  • step1.yml: 一个playbook脚本,使用Microsoft SQL Server集合在RHEL上配置SQL Server,并通过T-SQL脚本create_example_db.j2创建数据库。

  • step2.yml: 一个playbook脚本,使用Microsoft SQL Server集合在RHEL系统上配置另外两个SQL Server节点,用于创建三个节点的Always On高可用性组集群。

  • step3包含的脚本:以下列出的每个playbook脚本使用Microsoft SQL Server Ansible集合配置SQL Server Always On高可用性组,然后使用RHEL角色为高可用性为特定类型的虚拟、物理或云环境配置RHEL高可用性附加组件:

    • step3-rhkvm.yml - 此示例配置一个设计用于裸金属、RHEL KVM虚拟化、Red Hat虚拟化或Red Hat OpenShift虚拟化的RHEL高可用性集群。
    • step3-rhvmw.yml - 此示例配置一个设计用于VMware VSphere的RHEL高可用性集群。
    • step3-rhazure.yml - 此示例配置一个设计用于Microsoft Azure的RHEL高可用性集群。

开始准备

一开始需要设置三台虚拟机,每台虚拟机运行RHEL 8.7和RHEL高可用性附加组件。如果您使用的是RHEL虚拟化和OpenShift虚拟化,它们都支持i63000esb设备。例如,如果您在RHEL上使用虚拟化并通过virt-install工具安装虚拟机,您可以使用以下命令:

# virt-install --name mssql1 --memory 4096 --vcpus 2 --disk size=20 --os-variant rhel8.7 --watchdog i6300esb,action=reset --cdrom=/mnt/isos/rhel-8.7-x86_64-dvd.iso

我们还需要按照博客《RHEL系统角色简介》(https://www.redhat.com/en/blog/introduction-rhel-system-roles)

中概述的过程安装和配置ansible-corerhel-system-roles软件包。完成后,您需要安装Microsoft SQL Server角色,命令如下:

# dnf install ansible-collection-microsoft-sql

接下来,修改inventory文件以满足您的环境需求。该文件包含您将要部署集群的物理主机或虚拟机的名称。inventory文件格式如下:

all:
  hosts:
    mssql1:
      mssql_ha_replica_type: primary
    mssql2:
      mssql_ha_replica_type: synchronous
    mssql3:
      mssql_ha_replica_type: witness

修改每个主机,以确保名称与您集群中的主机名匹配。此示例使用了三个名为:mssql1、mssql2和mssql3的主机。首先,mssql1将是初始的主节点,而mssql2将是一个同步副本,mssql3将作为仅配置副本。如果希望使用两个同步副本,可以将第三个副本指定为同步副本。

开始部署

接下来,修改文件step1.ymlstep2.yml。在这两个文件中,您可能需要修改以下参数:

  • mssql_password: 您将在每台服务器上为sa账户配置的密码。
  • mssql_edition: 您将使用的SQL Server版本,可能的选择包括Enterprise、Standard、Developer或Express(对于仅配置副本)。

在step1.yml文件中,您还需要修改mssql_ha_db_name参数,该参数指定您要加入到AlwaysOn集群的那些数据库的名称。

接下来,修改create_example_db.j2文件。该文件是用T-SQL编写,用于加载一个数据库。您可以创建一个新的数据库,或者从备份中恢复一个数据库。无论哪种方式,确保数据库名称与您为mssql_ha_db_name设置的名称匹配。

对于step3.yml,如上所述,根据您将运行的环境,有三种可能的选择。我们将使用RHEL虚拟机,因此我们将按如下方式修改step3-rhkvm.yml文件:

  • mssql_password: 我们为sa账户使用的密码

  • mssql_ha_virtual_ip: 用于连接SQL Server的虚拟IP地址。如果发生主机故障,该地址将转移到AlwaysOn可用性组中的其他成员。您可以在操作系统的hosts文件或DNS中为此VIP设置主机名。它将与AlwaysOn的侦听器关联。

  • mssql_ha_ag_name: AlwaysOn可用性组名称,将显示在如SQL Server Management Studio中。

  • mssql_ha_db_names: 需要加入到AlwaysOn可用性组的数据库列表。

  • mssql_ha_master_key_password:数据库主密钥

  • mssql_ha_private_key_password:数据加密密钥。

  • mssql_ha_login_password:PacemakerLogin数据库登录用户的密码

  • ha_cluster_hacluster_password:Pacemaker集群的集群用户密码

在所有这些设置完成后,在Ansible的工作目录(需要将脚本复制到Ansible控制节点目录)开始执行脚本,命令如下:

$ ./run.sh

要验证您的配置是否正常运行,在mssql1数据库节点上使用以下命令查看Pacemaker集群状态:

# pcs status

如果Pacemaker集群运行正常,这将输出如下内容:

在这里,我们可以看到有三个节点加入了集群:mssql1mssql2 和mssql3。所有节点都处于在线状态。当前的虚拟IP资源与mssql1绑定,因为当前mssql1是AlwaysOn的主要副本节点。

要确定AlwaysOn的侦听器正在使用的VIP浮动虚拟地址,可以运行以下命令:

# pcs resource config

输出结果将显示您为应用程序配置的VIP地址,供应用程序访问:这里我们看到,目标VIP地址是 192.168.200.254。

从命令行,我可以使用以下命令进行连接:

$ /opt/mssql-tools/bin/sqlcmd -S 192.168.200.254 -U sa -P <mssql_password> 其中,mssql_password为SA账户设置的密码。

为了验证数据库故障转移是否正常工作,我们可以简单地通过以下命令关闭主要副本节点:

poweroff   #直接关机

然后我们只需通过SSH连接到集群中的仍然处于活动状态的节点,并使用以下命令检查其状态:

pcs status

在这里我们看到,mssql2mssql3处于在线状态。由于我们将mssql3配置为【仅配置副本】,因此数据库无法从mssql3提供服务,所以mssql2将成为主要副本节点。我们看到虚拟IP已经绑定到mssql2上,而mssql1已经停止。我们可以通过再次运行以下命令来验证我们的数据库服务器是否正在运行:

$ /opt/mssql-tools/bin/sqlcmd -S 192.168.200.254 -U sa -P <mssql_password> 

验证连接成功!在典型的环境中,使用Ansible自动化部署SQL Server Always On可用性组的整个过程大约需要五分钟。Ansible的系统角色中包含了很多验证集群工作正常的最佳实践。

本次部署演示由Red Hat的Louis Imershein和Microsoft的Amit Khandelwal呈现,演示内容包括本文中概述的过程,并展示了在RHEL上与SQL Server一起提供的一些新功能。本次ansible脚本适用于SQL Server 2017到SQL Server 2022版本。

总结

本文介绍了如何使用Ansible在Linux平台上自动化部署SQL Server AlwaysOn集群。本文提供了社区支持的自动化ansible脚本来帮助在Azure、裸金属虚拟机、VMware VSphere等环境中设置SQL Server高可用性组。整个部署过程分为三步:安装和配置初始SQL Server、添加额外节点并配置AlwaysOn集群、配置高可用性服务。

文章出处

  • https://www.redhat.com/en/blog/introduction-rhel-system-roles
  • https://www.redhat.com/en/blog/automate-microsoft-sql-server-always-availability-groups-red-hat-enterprise-linux

文中的Ansible相关playbook下载地址如下:

  • https://github.com/redhat-cop/sqlserver-coi/tree/master/ansible/playbooks/SQLclusterPlaybooks

  • https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/sql-server

本文版权归作者所有,未经作者同意不得转载。

五分钟搞定!Linux平台上用Ansible自动化部署SQL Server AlwaysOn集群的更多相关文章

  1. 五分钟搞定Linux容器

    [TechTarget中国原创] Linux容器针对特定工作负载提供了全新的灵活性与可能性.存在很多解决方案,但是没有一个解决方案能够像systemd容器那样进行快速部署.给我五分钟,本文将介绍如何使 ...

  2. 五分钟搞定 Linux 文档全部知识,就看这篇文章

    作者:无痴迷,不成功 来源:见文末 写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人 ...

  3. 五分钟搞定Go.js

    五分钟搞定Go.js  1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...

  4. zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》

    本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图   zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...

  5. zookeeper核心-zab协议-《每日五分钟搞定大数据》

    上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...

  6. HDFS-异常大全-《每日五分钟搞定大数据》

    点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...

  7. 五分钟搞定 HTTPS 配置,二哥手把手教

    01.关于 FreeSSL.cn FreeSSL.cn 是一个免费提供 HTTPS 证书申请.HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证 ...

  8. 五分钟搞懂 Linux 重点知识,傻瓜都能学会!

    来源:无痴迷,不成功 www.cnblogs.com/justmine/p/9053419.html 写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很 ...

  9. 五分钟搞定Docker安装ElasticSearch

    前言 项目准备上ElasticSearch,为了后期开发不卡壳只能笨鸟先飞,在整个安装过程中遇到以下三个问题. Docker安装非常慢 ElasticSearch-Head连接出现跨域 Elastic ...

  10. 3分钟搞定Linux系统正则表达式

    正则表达式是一种字符模式,用于在查找过程中匹配制定的字符. 元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析:正则表达式元字符,由vi/grep/sed/awk等文 ...

随机推荐

  1. 《Java开发手册》-部分编码规范分享

    0. 前言 本文来自<阿里巴巴Java开发手册>,以下内容均根据自己偏好摘抄.总结.分享. 1. 编程规约 包名单数,类名复数.例如:com.tao.util.JsonUtils.java ...

  2. MySQL底层概述—6.索引原理

    大纲 1.索引原理 2.二叉查找树 3.平衡二叉树(AVL树) 4.红黑树 5.B-Tree 6.B+Tree 7.Hash索引 8.聚簇索引与非聚簇索引 1.索引原理 索引会在数据文件中(ibd文件 ...

  3. HarmonyOS Next 入门实战 - 导航框架:页面路由、组件导航(Navigation)

    页面路由 官方不推荐使用页面路由,这里仅做简单介绍. 页面路由用于标识 @Entry 注解的页面间的跳转. 包引入 import { router } from'@kit.ArkUI'; 页面跳转 r ...

  4. 5.mysql中的触发器

    创建存储过程和函数 触发器 ● create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行 ● 触发器创建时需要指定对应的表名tbl_name crea ...

  5. 实用干货分享(5)- Hive存储格式及压缩算法测试比对分析

    ​ ​编辑 Hive文件存储格式及优缺点 textfile 默认的文件格式,行存储.建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理. 优点:最简单的数据格式,便 ...

  6. 企业IT基础资源管理的“帮帮团”上线啦——源启云原生基础设施管理平台

    为助力企业提升基础资源一体化管理和交付效率,以更先进的基础设施管理方式来满足现代企业业务持续扩展和复杂化的需要,中电金信运用基础设施即代码(Infrastructure as Code,简称IaC)技 ...

  7. GienTech动态|长沙共建交付中心启动、联合华为举办金融CXO沙龙、亮相大湾区多场科技盛会

    ---- GienTech动态 ---- 长沙共建交付中心启动仪式圆满举办 11月23日,由中电金信和太平洋人寿保险联合举办的长沙共建交付中心启动仪式顺利举行.太平洋人寿保险总经理助理.首席信息官黄鲲 ...

  8. JVM 语言的探索发现

    又在 WIKI 上溜达了一下 https://en.wikipedia.org/wiki/List_of_JVM_languages,有一些新的发现: ColdFusion Markup Langua ...

  9. django介绍及基本使用

    目录 一.python主流web框架 二.django简介 1.版本问题 2.运行django注意事项 三.django基本使用 1.下载模块 2.验证 3.常见命令 4.pycharm自动创建dja ...

  10. .NET 9 New features-AOT相关的改进

    上一篇文章给大家介绍了 .NET 9 New features-JSON序列化 本篇文章,研究分享一下关于AOT方面的改进 1. 什么是AOT AOT(Ahead-of-Time)编译是一种在应用程序 ...