下面简单介绍一下如何在Ubuntu上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法。
目前在Linux上可以搭建两种类型的SQL Server AG,一种是高可用性的结构同时使用Cluster服务器提供业务连续性。这种结构包括read-scale节点。接下来就会介绍这种AG的搭建方法。另外一种是没有Cluster服务的read-scale AG,这种结构仅仅提供只读的可扩展性,不提供高可用性功能。关于如何创建这种简单的AG请参考:Configure read-scale availability group for SQL Server on Linux。
另外在CREATE AVAILABILITY GROUP时可以指定CLUSTER TYPE:
WSFC:Windows server failover cluster。这个是Windows系统上的默认值;
EXTERNAL:非Windows server上的failover cluster,比如Linux上的Pacemaker;
NONE:不包含cluster manager,指的是创建read-scale类型的Availability Group。
其中Linux可以使用EXTERNAL或NONE,我理解的是EXTENRAL功能就是类似目前SQL Server中的AG,NONE则是一种新类型,没有Cluster功能的不支持高可用性和灾难恢复的AG。主要作用是分担主服务器的负载,支持多个只读备用节点,同时这种类型也支持Windows上使用,是SQL Server 2017新支持的功能。更多详细的信息请参考这里:Read-scale availability groups。
接下来进入主题主要介绍一下高可用性结构的Availability Group的搭建方法。
1. 安装及配置SQL Server一个SQL AG至少有两个以上的节点,由于环境有限,这里只安装一个最简单的包含两个节点的AG。首先是按照 Red Hat Enterprise Linux上安装部署SQL Server 2017 中的介绍,安装两个Ubuntu机器和SQL Server。
Note:同一个AG的多个节点必须都是实体机或者虚拟机,当都是虚拟机的时候也必须都在同一个虚拟化平台上,原因是由于Linux需要用fencing agent去隔离节点上的资源,不同平台fencing agent类型是不同的,详细参考。
2. 创建AG在Linux上,必须先创建AG才能把它当成一个资源加到Cluster中进行管理。下面介绍一下如何创建AG。
a) 准备工作:
更新每一个节点服务器的机器名符合这个要求:15个字符或者更少;网络上是唯一的。如果不符合要求可以使用如下命令更改机器名:
sudo vi /etc/hostname
使用如下命令修改Hosts文件以保证同一个AG中多个节点可以互相通信:
sudo vi /etc/hosts
这里一定注意:修改后可以用ping命令尝试ping hostname,必须返回对应的真正IP地址才行,也就是Hosts文件中不能包含类似hostname和127.0.0.1的对应记录,配置后如下,注意其中”127.0.1.1 Ubuntu1604Bob2”这行被我注释了,否则开启Cluster 服务的时候可能会有问题:
如果不注释,ping hostname的返回结果是127.0.1.1,注释后返回的是真正IP:
需要返回真正IP后期配置才好使。
另外可以用这个命令查看当前server的IP:
sudo ip addr show
b) 在所有节点SQL Server上开启Always On Availability Group功能并重启服务:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 sudo systemctl restart mssql-server
c) 在所有节点上执行SQL语句开启AlwaysOn_health事件会话以方便诊断问题:
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON); GO
更多关于Event Session信息可以参考:AlwaysOn Extended Events。
d) 创建db mirroring endpoint使用的用户:
CREATE LOGIN dbm_login WITH PASSWORD = '**<Your Password>**'; CREATE USER dbm_user FOR LOGIN dbm_login;
e) 创建证书:
Linux上的SQL Server Mirroring Endpoint是用证书去认证通信的。下面的命令创建一个master key和证书并备份。连接到Primary端SQL Server并执行如下命令: