下边简介一下怎么在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时能够钦赐CLUSTE奥迪Q5 TYPE:

  • WSFC:Windows server failover cluster。这么些是Windows系统上的私下认可值;
  • EXTERNAL:非Windows server上的failover
    cluster,比如Linux上的Pacemaker;
  • NONE:不包含cluster manager,指的是开创read-scale类型的Availability
    Group。

里头Linux能够使用EXTECR-VNAL或NONE,作者通晓的是EXTENRAL成效就是类似最近SQL
Server中的AG,NONE则是一种新类型,未有Cluster效率的不援助高可用性和患难复苏的AG。首要成效是分担主服务器的载荷,支持多少个只读备用节点,同期那类别型也扶助Windows上利用,是SQL
Server 2017新援助的效益。更加多详细的消息请参照他事他说加以考察这里:Read-scale
availability
groups。

 

接下去进入正题首要介绍一下高可用性结构的Availability Group的搭建方法。

 

1.      安装及配置SQL Server

七个SQL
AG至少有八个以上的节点,由于条件简单,这里只设置二个最简便易行的含有多少个节点的AG。首先是依据SQL
Server on Ubuntu——Ubuntu上的SQL
Server(全截图)中的介绍,安装多个Ubuntu机器和SQL
Server。

Note:同一个AG的八个节点必须都以实体机只怕虚拟机,当都以虚拟机的时候也务必都在同三个虚拟化平台上,原因是由于Linux须要用fencing
agent去隔开分离节点上的能源,分歧平台fencing
agent类型是例外的,详细仿效Policies for Guest
Clusters。

 

2.      创建AG

在Linux上,必须先创立AG才具把它正是四个财富加到Cluster中开展田间管理。下边介绍一下什么样创设AG。

a)       打算干活:

创新每多个节点服务器的机械名符合那么些要求:14个字符也许越来越少;网络上是无可比拟的。如若不符合需要能够动用如下命令更动机器名:

sudo vi /etc/hostname

应用如下命令修改Hosts文件以确定保证同一个AG中多少个节点能够互相通讯

sudo vi /etc/hosts

这里鲜明注意:修改后方可用ping命令尝试ping
hostname,必须回到对应的实在IP地址才行,也正是Hosts文件中不可能包涵类似hostname和127.0.0.1的相应记录,配置后如下,注意个中”127.0.1.1  
Ubuntu1604鲍勃2”这行被自个儿注释了,不然开启Cluster 服务的时候可能会至极:

图片 1 

假如不注释,ping hostname的回来结果是127.0.1.1,注释后回来的是的确IP:

图片 2

亟需回到真正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

更加多关于伊夫nt 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并实行如下命令:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
BACKUP CERTIFICATE dbm_certificate
   TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
   WITH PRIVATE KEY (
           FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
           ENCRYPTION BY PASSWORD = '**<Private_Key_Password>**'
       );

f)        把证件的备份复制到全体的非Primary节点上,同期接纳它创立证书:

先在Primary节点上实施如下命令复制证书的备份到别的节点上:

cd /var/opt/mssql/data
scp dbm_certificate.* root@**<node2>**:/var/opt/mssql/data/

Note:假使遇到Permission denied,能够应用sz和rz命令通过主机来传输文件。

再在指标端Secondary节点上实施如下命令给用户mssql增添丰裕的权限:

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

提及底在目标端Secondary节点上行使备份的申明成立证书:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate  
    AUTHORIZATION dbm_user
    FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
    FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
    DECRYPTION BY PASSWORD = '**<Private_Key_Password>**'
            );

g)       在有着节点上创造database mirroring endpoint:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = **<5022>**)
    FOR DATA_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];

Note:这里Listener
IP暂且不能够改改,只可以是0.0.0.0,近日有BUG,现在或然会修复。

h)      在Primary节点上创设AG:

CREATE AVAILABILITY GROUP [UbuntuAG]
    WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
    FOR REPLICA ON
        N'**<node1>**'
        WITH (
            ENDPOINT_URL = N'tcp://**<node1>**:**<5022>**',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            ),
        N'**<node2>**'
        WITH (
            ENDPOINT_URL = N'tcp://**<node2>**:**<5022>**',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            );
ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

Note:实施进度中大概相会世这些警示”Attempt to access non-existent or
uninitialized availability group with
ID”,一时半刻忽略就可以,今后版本恐怕会修复。

下图中UbuntuAG2是新成立的AG,Secondary节点还处于OFFLINE状态:

图片 3

i)        把别的Secondary节点参预到AG中:

ALTER AVAILABILITY GROUP [UbuntuAG] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

下图为增加完节点后的情景:

图片 4

接下去就能介绍这种AG的搭建方法。接下去就能介绍这种AG的搭建方法。j)        测验:创制贰个DB并投入到刚刚成立的AG中:

CREATE DATABASE [db1];
ALTER DATABASE [db1] SET RECOVERY FULL;
BACKUP DATABASE [db1]
   TO DISK = N'var/opt/mssql/data/db1.bak';
ALTER AVAILABILITY GROUP [UbuntuAG] ADD DATABASE [db1];

k)       验证:在Secondary端查看DB是还是不是早就打响同步过去了:

SELECT * FROM sys.databases WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;

图片 5

那会儿,三个粗略的AG就创办好了,可是它无法提供高可用性和灾殃恢复生机功用,必须陈设三个Cluster本事技能好使。若是上述h)和i)步骤的TSQL退换来以下七个,则创立出来的正是read-scale类型的AG。

  • 创建AG命令:

    CREATE AVAILABILITY GROUP [UbuntuAG]

    WITH (CLUSTER_TYPE = NONE)
    FOR REPLICA ON
        N'**<node1>**' WITH (
            ENDPOINT_URL = N'tcp://**<node1>**:**<5022>**',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC,
                    SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
            ),
        N'**<node2>**' WITH (
            ENDPOINT_URL = N'tcp://**<node2>**:**<5022>**',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC,
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
            );
    

    ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

把Secondary节点加到AG中命令:

ALTER AVAILABILITY GROUP [UbuntuAG] JOIN WITH (CLUSTER_TYPE = NONE);
ALTER AVAILABILITY GROUP [UbuntuAG] GRANT CREATE ANY DATABASE;

Note:那时的AG是尚未Listener的,近日版本也许有时不恐怕制造Listener。

 

3.      配置贰个集群财富管理器,如Pacemaker

接下去就能介绍这种AG的搭建方法。具体步骤如下:

接下去就能介绍这种AG的搭建方法。a)       在具有的Cluster节点上设置和安插Pacemaker:

先安装防火墙允许相关端口通过(蕴涵Pacemaker high-availability
service、SQL Server Instance和Availability Group Endpoint),

sudo ufw allow 2224/tcp
sudo ufw allow 3121/tcp
sudo ufw allow 21064/tcp
sudo ufw allow 5405/udp
sudo ufw allow 1433/tcp # Replace with TDS endpoint
sudo ufw allow 5022/tcp # Replace with DATA_MIRRORING endpoint
sudo ufw reload

要么也足以一向禁止使用防火墙:

sudo ufw disable

在具备节点上安装Pacemaker软件包:

sudo apt-get install pacemaker pcs fence-agents resource-agents

设置Pacemaker和Corosync软件包在安装时创设的暗中认可用户的密码,需保证全部节点上密码一样:

sudo passwd hacluster

接下去就能介绍这种AG的搭建方法。b)      启用并拉开pcsd和Pacemaker服务:

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker

实行进度中恐怕出现这些荒唐”pacemaker Default-Start contains no
runlevels, aborting.”,能够有时忽略。

c)       创建Cluster并启动:

率先为了以免万一有Cluster的残存配置文件影响中期搭建,可以先实行如下命令删除已经存在的Cluster:

sudo pcs cluster destroy # On all nodes
sudo systemctl enable pacemaker

接下去就能介绍这种AG的搭建方法。下一场创设并配置Cluster:

sudo pcs cluster auth **<nodeName1>** **<nodeName2>**  -u hacluster -p **<password for hacluster>**
sudo pcs cluster setup --name **<clusterName>** **<nodeName1>** **<nodeName2…>**
sudo pcs cluster start --all

这时大概会油但是生那一个荒唐”Job for corosync.service failed because the
control process exited with error code. See “systemctl status
corosync.service” and “journalctl -xe” for details.”检查判断解决措施如下:

  • 依据2-a)中的描述查看是不是有标题;
  • 运用如下命令查看配置文件中的Log路线是怎样。

    vi /etc/corosync/corosync.conf

图片 6

  • 查阅相关文件是或不是存在,如不存在,则创设连锁文书,如果上图中logfile路径为/var/log/cluster/corosync.log相同的时间该文件还不存在,则实践如下命令,

    sudo mkdir /var/log/cluster
    sudo chmod 777 /var/log/cluster
    sudo echo >> /var/log/cluster/corosync.log

d)     
配置隔绝:STONITH。近来测量检验处境为了轻易,一时不布署了,现在会更新。符合规律来讲生产条件必要四个fencing
agent去隔断财富,关于协理音讯请参见这里:Support Policies for RHEL High
Availability Clusters – Virtualization
Platforms。

其它大家这里先进行以下命令禁止使用隔开分离:

sudo pcs property set stonith-enabled=false

e)      设置start-failure-is-fatal为false:

pcs property set start-failure-is-fatal=false

私下认可值是true,当为true的时候,如若Cluster第2回运转财富失利,在机动Failover操作后,要求用户手动清空能源运行失利的数码记录,使用这一个命令重新载入参数财富配置:

pcs resource cleanup <resourceName>

 

4.      添加AG到Cluster集群中

具体步骤如下:

a)       在装有节点上安装与Pacemaker集成的SQL Server财富包:

sudo apt-get install mssql-server-ha

b)      在具备节点上创造Pacemaker用的SQL Server登陆用户:

USE [master]
GO
CREATE LOGIN [pacemakerLogin] with PASSWORD= N'<Your Password>'
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]

也足以不给sysadmin权限,给上如下丰硕的权位就可以:

GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::UbuntuAG TO pacemakerLogin

c)       在颇具节点上,保存SQL Server Login的音信:

echo 'pacemakerLogin' >> ~/pacemaker-passwd
echo '<Your Password>' >> ~/pacemaker-passwd
sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
sudo chown root:root /var/opt/mssql/secrets/passwd
sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root

d)      在Cluster中Primary节点上创办AG的财富:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=UbuntuAG --master meta notify=true

e)      在Cluster中Primary节点上创造虚拟IP能源:

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=**<10.2.38.204>**

f)        配置Cluster财富的依赖关系和开发银行顺序:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
sudo pcs constraint order promote ag_cluster-master then start virtualip

g)       最后查看Cluster状态如下:

sudo pcs status

图片 7

能够用虚拟IP(10.2.38.204)访问那几个AG:

图片 8

 

从那之后,Ubuntu上的Cluster管理的SQL Server Always On Availability
Group就搭建达成了。

 

Note:

  • 当把AG加入到Cluster中作为二个财富的时候,就无法再利用TSQL去failover
    AG了。SQL Server服务端是不知情Cluster的留存的,整个系统是通过Linux
    Cluster来支配的,在Ubuntu和本田UR-VHEL中用pcs命令,在SLES中用crm命令。
  • 整套安顿实现后,能够利用虚拟IP去拜谒整个AG,那时能够在DNS中手动注册三个Listener名字指向那个编造IP,就可以算作Windows中的AG
    Listener使用了。
  • SQL Server 2017 CTP
    1.4中新引进了叁个sequence_number的定义幸免数据丢失,详细参照他事他说加以考查Understand
    SQL Server resource agent for
    pacemaker()。

参谋链接:

  • Configure Always On availability group for SQL Server on
    Linux
  • Configure Ubuntu Cluster and Availability Group
    Resource
  • Configure read-scale availability group for SQL Server on
    Linux
  • Overview of Always On Availability Groups (SQL
    Server)

 

本文重要介绍了什么样布署AG以及怎么着化解配置进程中碰着的主题素材,关于AG的管理选用上之后再详尽介绍,如有错误也许介绍远远不够,敬请谅解。

 

[原创文章,转发请表明出处,仅供就学钻研之用,如有错误请留言,如喜欢请推荐,感谢辅助]

[原文:,来自永世薰薰]

相关文章