亚马逊AWS官方博客

Setup SQL Server 2019 Availability Group on Amazon EC2

背景

  • 在使用 Microsoft SQL Server 的用户中,有相当一部分的是运行在本地或者托管数据中心中的。而在这些用户中,因为客户行业属性的原因(政府或者教育客户),购买 SQL Server License 或有相应的折扣和优惠政策。由此,这类客户在迁移到 AWS 的时候更偏向于在 Amazon EC2 上自行部署并使用 BYOL 的方式。
  • 而为了确保数据库的可靠性和高可用性,客户会通过使用 SQL Server Availability Group 来实现这一目的。
  • 基于以上两点,这篇文章会介绍如何在 Amazon EC2 上一步一步来部署 SQL Server Availability Group 并实现数据库的可靠性和高可用性。

架构概述

在这个架构中我们会使用到:

  • 通过标准 Windows Server 2019 的 AMI 启动的 EC2 (不包含 SQL Server)
  • AWS Directory Service 的 Managed AD 用于管理 AD/DNS
  • 构建在同一个 VPC 中

先决条件

配置部署

创建 VPC DHCP 选项集(可选)

注:此步骤是确保运行 SQL Server 的 Amazon EC2 可以通过 VPC DHCP 选项集自动指配已有域的 DNS 服务器,如果 VPC 网络环境里绝大部分的资源没有这类需求的话可以跳过次步骤,并通过手动配置的方式实现

  1. 创建 VPC DHCP 选项集
  2. 应用到当前的 VPC 环境后,后续创建的 EC2 会自动获取加入 AD 所用的 DNS Server IP
  3. 如果改应用对当前 VPC 会产生影响的话,运行 SQL Server 的 EC2 也可以在完成创建后手动修改

创建运行 SQL Server 2019 的 EC2

  •  进入 AWS 管理控制台,选择 EC2 服务,并点击启动实例
  • 在选择实例映像时,选择 “Microsoft Windows Server 2019 Base”,进入下一步
  • 对于 SQL Server Availability Group 的使用场景,EC2 需要配置一个主要 IP 地址以及两个辅助 IP 地址,其中一个辅助 IP 地址用于创建 Failover Cluster,另一个辅助 IP 地址一个用于监听 Availability Group 侦听器。创建辅助 IP 地址如图所示:
  • 根据提示完成 EC2 实例的创建,并通过过程中创建或之前已创建的密钥对(Keypair)远程登录到 EC2 实例上
  • 通过运行如下命令打开网络连接设置,并修改 DNS 后缀

# 在 Command Prompt 或者 Powershell 里面运行
ncpa.cpl

  • 选择网络连接的属性,双击 TCP/IP 设置进入并切换至 DNS 选项卡,如下左图所示修改 DNS 后缀的配置,目的是为了可以确保同域的节点之间可以通过 DNS 名直接解析彼此
  • 打开计算机设置,修改计算机名并加域,如下右图所示,完成后需重启实例

 

  • 重启过后,关闭 Windows 防火墙或者打开 SQL Server 的例外以允许 EC2 之间的访问。在整个部署配置完成并成功连接之后,出于安全角度建议再根据实际访问需求调整安全组和 Windows 防火墙
  • 下载并按照向导安装 SQL Server 2019 和 SQL Server Management Studio,过程中使用域用户运行 MSSQL Server 服务。为了确保顺利部署,这里可以先使用域管理员,如下图所示:

 

  • 指定 SQL Server 管理员,为了确保顺利部署,这里可以先使用域管理员。并且按照实际情况修改数据库数据路径。如下图所示:

 

  • 下载并安装 SSMS,安装完成后重启
  • 重复以上步骤安装并配置另一台运行 SQL Server 的 Amazon EC2 实例;如需更多的实例节点,则继续重复以上步骤即可

配置 WSFC (Windows Server Failover Cluster)

  • 在上一步骤所创建的每个集群节点上运行如下命令,并重启:

# 在 Powershell 里运行
Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools

  • 添加集群节点,测试并输入集群名称后安装
  • 在集群的集群核心资源里,找到两个网络地址并配置两台 EC2 的第一个辅助 IP 地址(注意:是第一个辅助 IP 地址,不是主要 IP地址),如下图所示:

 

  • (可选)配置基于文件共享的集群故障转移仲裁
    • 在第三台 EC2 (比如域控制器)上配置一个共享目录,并赋予故障转移集群用户的完全控制权限,如下图所示:
    • 创建文件共享见证,如下图所示:
  • 完场上述配置后,检查故障转移集群状态,确认当前有节点已处于“Online”的状态以及当前集群的事件是否有异常;如有配置见证服务则需检查见证服务状态是否也处于“Online”,如下图所示:

配置 SQL Server Availability Group

  • 在每个节点上打开 SQL Server 配置管理器,启用 SQL Server 的 Availability Group 并重启 SQL Server 服务
  • 打开 SSMS 并连接到当前数据库实例,创建测试数据库(注意:选项中恢复模式为Full)并执行备份,如下图所示:
  • 通过向导创建 Availability Group
  • 在指定复制节点处,添加另一个节点,可用性模式可选为同步或者异步,如下图所示:
  • 创建 Availability Group 监听器,将两台 EC2 的第二个辅助 IP 地址添加进去,如下图所示:
  • 打开控制面板检查 Availability Group 状态,如下图所示;如需测试可以手动触发故障转移以验证

小结

  • 通过以上的配置部署,可以实现在 Amazon EC2 上运行 SQL Server Availability Group,并给予 Windows Server Failover Cluster 实现故障转移集群的模式
  • 在上述步骤中并未包含导入 License 的步骤,如果是通过 BYOL 的模式安装并运行 SQL Server 的话,需下载相应版本的安装包而非 Evaluation 版本
  • 通过 BYOL 的方式在 Amazon EC2 上运行 SQL Server 是一种合理使用当前已有 License 的方式,但是在此基础上需要有一定的运维能力和支持,在使用该方式之前需事先进行评估;如果不具备该人员储备或资源的情况下,建议还是使用 Amazon RDS for SQL Server 或者其他托管数据库引擎以简化维护成本

参考

 

本篇作者

劳佳琦

AWS中国团队的解决方案架构师,负责基于AWS的云计算方案架构咨询和设计,同时致力于AWS云服务在国内教育行业的应用和推广。在加入AWS之前,他曾服务与英孚教育,微软等跨国公司。劳佳琦平时热爱足球和音乐,同时也乐于和他人分享自己的各种经历。