SQL Server基于Linux系统的可用性组安装与部署
2022-07-26陈海琼赵觅
◆陈海琼 赵觅
SQL Server基于Linux系统的可用性组安装与部署
◆陈海琼 赵觅
(贵州广播电视台 贵州 550002)
随着互联网云计算的发展,以Linux操作系统为核心的开源生态逐渐成为云计算服务的主流,微软公司发布了Linux版McroSoft SQL Server,提供数据同步的可用性组。本文详细阐述了SQL Server数据库如何基于Linux系统安装和配置可用性组。
Linux;SQL Server;可用性组
互联网云计算的发展,以Linux操作系统为核心的开源生态逐渐成为云计算服务的主流,免费开源的Linux服务器系统如centos、ubuntu server,能为企业节约一笔可观的操作系统购置经费。近年来微软逐渐把自己的业务重心转向云计算市场,微软也发布提供Linux版本的McroSoft SQL Server(以下简称MSSQL),包括rpm、deb包安装,还提供了官方的Docker容器镜像。
Linux平台的MSSQL与Windows平台拥有相同的数据库引擎,具有相似的功能与服务。其中就有支持数据业务安全、读取扩展的Always On 可用性组(Availability Group 以下简称AG)。AG可以实现High Availability(高可用性)或read-scale(读取缩放)。本文将介绍基于Linux的MSSQL安装配置read-scale可用性组。
1 read-scale可用性组的介绍
read-scale可用性组可以不使用群集管理器的情况下使用,提供了只读副本横向扩展,read-scale可用性组可以做到多个数据库的同步,但并不提供高可用性。在构建可用性组之前,需要了解两个概念。
1.1 可用性副本
每个可用性组包含两个或多个可用性副本的集合。每个可用性副本都承载可用性组中的可用性数据库的一个副本。每个可用性副本都被分配一个初始角色(“主角色”或“辅助角色”),角色由该副本的可用性数据库继承。给定副本的角色确定它承载的是读写数据库还是只读数据库。其中一个主要副本被分配主角色,它承载读写数据库(称为“主数据库” )。至少一个辅助副本被分配辅助角色,辅助副本承载只读数据库(称为“辅助数据库”)。
1.2 可用性模式AVAILABILITY_MODE
可用性模式是可用性副本的一个属性,决定主副本是否在辅助副本将事务日志记录写入磁盘之前,等待提交数据库上的事务。共有两种可用性模式:
(1)异步提交模式(ASYNCHRONOUS_COMMIT):主副本无需等待确认异步提交辅助副本已硬化日志,便可提交事务。异步提交模式可最大限度地减少辅助数据库上的事务滞后时间,但允许它们滞后于主数据库,因此可能会导致某些数据丢失。
(2)同步提交模式(SYNCHRONOUS_COMMIT):在提交事务之前,同步提交主副本要等待同步提交辅助副本确认它已完成硬化日志。同步提交模式可确保在给定的辅助数据库与主数据库同步时,充分保护已提交的事务。这种保护的代价是延长事务滞后时间。
2 Linux安装MSSQL并配置AlwaysOn高可用组
Linux服务器通常使用非图形界面的命令行模式,因此安装过程只能采用命令输入的方式。本文安装过程,是连接互联网的环境下进行在线安装,如果在非联网环境安装,可以提前下载离线安装包。数据库程序安装完毕后,可以用数据库控制客户端远程连接MSSQL数据库,进行后续数据库配置流程。整个安装配置流程如图1所示。
图1 安装配置流程图
2.1 安装Linux版本MSSQL2019
准备两台centos7系统服务器,分别命名并分配IP地址为mssql1(172.17.0.201)和mssql2(172.17.0.202),把命名和IP地址分别加入他们的hosts文件中。然后分别在两台服务器上安装MSSQL2019数据库服务端程序。
2.1.1安装官方源
运行以下命令,下载MSSQL2019官方源到本机源仓库。
2.1.2安装MSSQL
运行以下命令,安装MSSQL程序。
2.1.3配置MSSQL
运行以下命令,选择要安装功能版本,并设置SA账户密码。
MSSQL提供了多个功能个版本,Express Edition、Standard、Enterpirise、Developer。
(1)Express Edition:入门级的免费数据库,用于学习和构建小型服务器数据库,不支持AG。
(2)Standard:付费标准版本,支持本地和云部署。AG 可拥有的副本总数为两个:一个主要副本以及一个仅能用作可用性目的的次要副本。次要副本不能用于任何其他目的,例如可读查询。
(3)Enterprise:付费,提供了全面的高端数据中心功能,可为关键任务工作负荷提供较高服务级别。 AG 最多可拥有的副本总数为九个:一个主要副本,以及最多八个次要副本,并且最多可以对其中3个副本(包括主要副本)进行同步。
(4)Developer:允许开发人员在MSSQL之上构建任何类型的应用程序。它包括Enterprise版本的所有功能,但是仅被许可作为开发和测试系统使用,而不是作为生产服务器使用。如果要用于正式正产系统,请根据功能需求选择购买对应的版本。
实验测试环境可安装Developer版本,如果要在生产环境使用可用性组,请根据实际需求,购买并安装Standard或者Enterpise版本。
2.1.4系统配置防火墙
配置系统防火墙,将两台Linux服务器的TCP的1433和5022端口开放。1433端口是MSSQL默认端口;5022端口是可用性组端点默认端口。
2.1.5安装控制客户端
在一台PC机上安装数据库控制客户端SQL Server Management Studio(以下简称SSMS),使用SSMS的查询编辑器,编写执行Transact-SQL(以下简称T-SQL)脚本语句与数据库交互。
2.2 配置可用性组
2.2.1开启可用性组
运行命令,开启MSSQL可用性组,重启MSSQL服务,该设置才能生效。
2.2.2启用Alwayson_health事件会话
运行以下T-SQL脚本,启用Alwayson_health事件会话,可对可用性组进行故障排查时帮助诊原因。
2.2.3创建证书
Linux需要使用证书验证各个镜像节点之间的通信。在主数据库运行以下T-SQL脚本创建密钥和证书,然后备份证书,并使用私钥保护文件。
dbm_certificate.cer是主副本的证书,dbm_certificate.pvk私钥。将这两个文件复制到其他辅助数据库的服务器同一位置,并且赋予MSSQL用户访问权限。在所有辅助数据库运行以下T-SQL脚本,创建证书。
2.2.4在所有副本上创建镜像端点和监听端口
数据库镜像端点是可用性组的重要组成部分,它的主要作用有两个:主副本和辅助副本之间通过端点传送日志块和消息,同步数据;主副本和每个辅助副本通过端点互相发送ping来确定彼此是否互相连通。端点使用TCP协议,监听端口一般默认为5022。在所有副本服务器上运行以下T-SQL脚本创建端点。
2.2.5新建read-scale可用性组群集
在主数据库运行以下T-SQL脚本创建一个可用性组“Linux_ag”。请注意,群集类型CLUSTER_TYPE为 NONE,,创建read-scale可用性组。可用性模式AVAILABILITY_MODE选择同步模式,确保数据库事务的一致性。
2.2.6把辅助副本加入可用性组中
在辅助数据库中执行以下T-SQL脚本,将辅助副本加入刚才创建的可用性组“Linux_ag”。
2.2.7添加数据库到可用性组
在主数据库中执行以下T-SQL 脚本,将名为test1的数据库添加到名为Linux_ag的可用性组。可用性组配置完成。
用SSMS客户端查看数据库服务器可用性组面板状态,如图2,可用性组Linux_ag中有两个可用性副本,mssql1(主要副本)和mssql2(辅助副本),mssql1的test1数据库与mssql2的test1数据库实时主从同步。
2.3 切换主节点
当需要切换主角色所在服务器时,可在执行以下T-SQL脚本,切换主节点。
3 使用Docker安装MSSQL并配置AlwaysOn高可用组
Docker是一个开源的应用容器引擎,基于golang语言开发,并遵从Apache2.0协议开源。Docker是一种新型虚拟化方式,和传统虚拟机技术相比,有很多优势。Docker采用进程隔离技术,无需消耗额外模拟系统的资源,容器部署启动速度快,迁移扩展便利,利用k8s进行多台服务器批量集群部署。
3.1 安装与配置
3.1.1拉取镜像
运行以下命令,拉取官方MSSQL2019的Docker镜像。
3.1.2运行容器
运行以下命令,运行Docker容器。环境变量“SA_PASSWORD=your_password”,表示SA账户的密码。环境变量“MSSQL_PID=Developer”,表示要指定的版本。环境变量“ACCEPT_EULA=Y”,表示在Docker容器映像中运行的MSSQL的使用将受MSSQL许可证条款的约束,你同意并使用它。
3.3.3 Always On可用性组群集配置
用SSMS连接Docker运行的MSSQL服务,可用性组的配置操作与之前普通安装的可用性组配置一致。
3.2 注意事项
Docker运行数据库,需要volume外挂数据卷,才能长期保存数据,但是如果容器突然崩溃,导致数据库非正常关闭,有可能会损坏数据。所以用Docker部署数据库,适合对与数据丢失不敏感的业务,且对分布式横向扩展部署有需求的场景。
4 结束语
本文详细阐述了SQL Server数据库在Linux系统中高可用组的安装配置,增强了数据库读取横向扩展能力,实现数据在线安全备份,同时增加系统数据库业务的读取服务器节点。如果原本在Windows平台的业务需要迁移到Linux上,这个方案可以避免更换数据库厂家,避免一些不必要的代码改动与兼容性问题。对于数据库业务访问和数据安全的探讨,本文也只是涉及部分内容,希望能与各位同行共同探讨与借鉴。
[1]叶杨婕,官磊.AlwaysOn可用性组在电子选举系统中的应用[J].计算机用,2018,38(S2):258-261+278.
[2]郭绪晶. 服务器集群系统高可用模块设计与实现[D].北京邮电大学,2013.
[3]赵学作.Docker部署SQL Server数据库[J].网络安全和信息化,2019(07):80-81.