1、准备测试环境的服务器

在 Always On AG 中如果需要自动 Failover 至少需要集群中有 3 台服务器,但是我只是测试功能,因此只使用了两台服务器。并且本文不涉及任何 Pacemaker 的设置,完全是数据库层面的 AG 配置。

我使用的是 Google Compute Engine 的2台 VM,最低配的 1vCPU,3.75GB 内存。

如果要通过远程客户端配置 SQL Server,则需要在 VPC network 的 Firewall rules 中将 1433 端口开放,如果是在虚拟机本地的 sqlcmd 中操作,则无需配置。

2操作系统:CentOS7

cat /etc/centos-release

CentOS Linux release 7.4.1708 (Core)

在 /etc/hosts 中配置双方服务器的名称和IP地址的解析,以保证两台机器可以通过服务器名称互相访问。

重要!服务器主机的 hostname 必须少于等于 15 个字符,否则在配置过程会出现各种莫名其妙的权限报错。

3、 启用AlwaysOn AG功能

执行范围:在所有机器上执行

安装完的 SQL Server,默认是没有启用 AlwaysOn AG 功能的,需要手工开启,开启的方法很简单。开启该功能需要重启数据库实例。

/opt/mssql/bin/mssql-conf set hadr.hadrenabled  1

systemctl restart mssql-server

4、启用 AlwaysOn_health 事件

执行范围:在所有机器上执行

这一步不是必须的。

ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);

 5、 创建数据库复制的用户

执行范围:在所有机器上执行

CREATE LOGIN dbm_login
WITH PASSWORD = ‘YourPassword’;

CREATE USER dbm_user
FOR LOGIN dbm_login;

7

  创建认证

执行范围:在 Primary Replica 机器上执行

CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'YourPassword';

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 = 'YourPassword'

);

将生成的 dbm_certificate.cer 和 dbm_certificate.pvk 文件 scp 到另外一台服务器的相同位置并修改属主,这台服务器就是 Secondary Replica。

cd /var/opt/mssql/data

chown mssql:mssql
dbm_certificate.*

然后在这台服务器上导入认证。

执行范围:在 Secondary Replica 机器上执行

CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'YourPassword';

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
= 'YourPassword'

);

8创建数据库复制的 Endpoint

执行范围:在所有机器上执行

CREATE ENDPOINT
[Hadr_endpoint]

AS TCP (LISTENER_PORT =
5022)

FOR DATA_MIRRORING (

ROLE = ALL,

AUTHENTICATION =
CERTIFICATE dbm_certificate,

ENCRYPTION = REQUIRED
ALGORITHM AES

);

ALTER ENDPOINT [Hadr_endpoint]
STATE = STARTED;

use master

GRANT CONNECT ON
ENDPOINT::[Hadr_endpoint] TO [dbm_login];

9 创建 Availability Groups

创建 Availability Groups

执行范围:在 Primary Replica 机器上执行

CREATE AVAILABILITY
GROUP [ag1]

WITH
(CLUSTER_TYPE = EXTERNAL)

FOR
REPLICA ON

N'centos1'
WITH (

ENDPOINT_URL =
N'tcp://centos1:5022',

AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

FAILOVER_MODE =
EXTERNAL,

SEEDING_MODE =
AUTOMATIC

),

N'centos2'
WITH (

ENDPOINT_URL =
N'tcp://centos2:5022',

AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

FAILOVER_MODE =
EXTERNAL,

SEEDING_MODE =
AUTOMATIC

);

ALTER AVAILABILITY
GROUP [ag1] GRANT CREATE ANY DATABASE;

在主库上创建了 AG 之后,备库需要加入 AG。

执行范围:在 Secondary Replica 机器上执行

ALTER AVAILABILITY
GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);

ALTER AVAILABILITY
GROUP [ag1] GRANT CREATE ANY DATABASE;

10

  将数据库加入 AG

这里新建一个数据库 db1,将它加入到 ag1 中。由于上面设置的 SEEDING_MODE 参数为 AUTOMATIC,因此这个 db1 数据库将会在备库实例中自动创建,后续对于该库进行的任何操作也会自动复制到备库中。

执行范围:在 Primary Replica 机器上执行

CREATE DATABASE [db1];

ALTER DATABASE [db1]
SET RECOVERY FULL;

BACKUP DATABASE [db1]

TO DISK =
N'/var/opt/mssql/data/db1.bak';

ALTER AVAILABILITY
GROUP [ag1] ADD DATABASE [db1];

11

  允许 Secondary Replica 可以被只读访问

在以上的创建过程中创建出来的 AG 中的备库是不允许被访问的,如果要访问将会遇到以下错误。

The target database, ‘db1’, is
participating in an availability group and is currently not accessible for
queries. Either data movement is suspended or the availability replica is not
enabled for read access. To allow read-only access to this and other databases
in the availability group, enable read access to one or more secondary
availability replicas in the group. For more information, see the ALTER
AVAILABILITY GROUP statement in SQL Server Books Online.

执行范围:在 Primary Replica 机器上执行,立刻生效。

use master

ALTER AVAILABILITY
GROUP ag1

MODIFY
REPLICA ON

N'centos2'
WITH (

SECONDARY_ROLE
(ALLOW_CONNECTIONS = ALL )

);

12测试

在主库中随便创建一张新表,再插入几条记录。

1> use db1

2> select * into
t_test from sys.databases;

3> insert into
t_test select * from t_test;

4> GO

Changed database
context to 'db1'.

(5 rows affected)

(5 rows affected)

在备库中查询,这张表已经复制成功。

1> use db1

2> select count(*)
from t_test;

3> GO

Changed database
context to 'db1'.

-------

10

(1 rows affected)

如果在备库中尝试更新数据,将会遇到以下错误。

1> delete from
t_test;

2> GO

Msg 3906, Level 16,
State 2, Server centos2, Line 1

Failed to update
database "db1" because the database is read-only.

13  监控 AG 状态

通过以下这些视图可以监控 AG 中各个部分的状态。

group的监控

select * from
sys.availability_groups;

select * from sys.availability_groups_cluster;

select * from
sys.dm_hadr_availability_group_states;

replica 的监控

select * from
sys.availability_replicas;

select * from
sys.dm_hadr_availability_replica_states;

select * from
sys.dm_hadr_availability_replica_cluster_nodes;

select * from
sys.dm_hadr_availability_replica_cluster_states;

在 AG 中的 database 的监控

select * from
sys.availability_databases_cluster;

select * from
sys.dm_hadr_database_replica_states;

select * from
sys.dm_hadr_database_replica_cluster_states;

select
name,database_id,replica_id,group_database_id from sys.databases;

参考文档

本文配置步骤的参考文档为:

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-configure-ha?view=sql-server-linux-2017

配置Always On AG的更多相关文章

  1. 配置Internal Load balancer中VM的外网访问

    当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...

  2. SQL Server 虚拟化(2)——理想的SQL Server虚拟机架构

    本文属于SQL Server虚拟化系列 搭建SQL Server虚拟机,在各个组织之间都有自己的标准和最佳实践.从第一眼看去,光物理配置就有过百种,所有的这些细微差别都有可能为后续日常管理过程中故障侦 ...

  3. 6. VIM 系列 - 全局搜索(ctrlsf.vim)

    目录 全局搜索利器 ag.vim 更强大的全局搜索利器 ctrlsf.vim 全局搜索利器 ag.vim 终端上安装ag: sudo apt install silversearcher-ag vim ...

  4. Windows Server 2012搭建SQL Server Always On踩坑全记录

    Windows Server 2012搭建SQL Server Always On踩坑全记录 环境信息: Windows Server 2012 R2 Sql Server 2012 整个搭建集群的过 ...

  5. Django 学习记录(AcWing)

    Django 2.1 搭建文件结构 前面的都是配置基本步骤,不需要理解,其他Django项目同样步骤操作: 接下来用Django-admin新建一个Django项目: django-admin sta ...

  6. [AlwaysOn Availability Groups]排查:AG配置

    排查AG配置 本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问. Section Description A ...

  7. Linux 上配置 AG

    SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...

  8. 在 Azure CentOS VM 中配置 SQL Server 2019 AG - (上)

    前文 假定您对Azure和SQL Server HA具有基础知识 假定您对Azure Cli具有基础知识 目标是在Azure Linux VM上创建一个具有三个副本的可用性组,并实现侦听器和Fenci ...

  9. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

随机推荐

  1. 一张图带你看懂原始dao与SQL动态代理开发的区别-Mybatis

    //转载请注明出处:https://www.cnblogs.com/nreg/p/11156167.html 1.项目结构区别: 2.开发区别: 注:其中原始dao开发的实现类UserDaoImpl ...

  2. Spring AOP无法拦截内部方法调用

    当在同一个类中,A方法调用B方法时,AOP无法工作的问题 假设一个接口里面有两个方法: package demo.long; public interface CustomerService { pu ...

  3. PostgreSQL分区表实现——pg_pathman安装、配置

    近日由于系统运行时间太长,数据库库表中的数据也是越来越多,为了缩短库表的操作时间,所以对数据库中的部分库表进行分区的操作. 通过研究,决定采用pg_pathman插件对库表进行分区操作.pg_path ...

  4. MySQL创建用户和加限权

    目录 1.权限管理 1.1对新用户增删改 1.2对当前的用户授权管理 1.权限管理 ​ 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete ...

  5. Linux-负载均衡HAproxy

    负载均衡之HAProxy 现在常用的三大开源软件负载均衡器分别是Nginx.LVS.HAProxy.三大软件特点如下: LVS负载均衡的特点: ()抗负载能力强,抗负载能力强.性能高.能达到F5硬件的 ...

  6. clipse调试web项目配置调试配置——没有Server

    文章:eclipse环境下如何配置tomcat(包含没有Server解决办法) 地址:https://blog.csdn.net/TimliangL/article/details/78882566

  7. python的tkinter,能画什么图?

    今天从下午忙到现在,睡觉. 这个能绘点图的. import json import tkinter as tk from tkinter import filedialog from tkinter ...

  8. docker学习1-CentOS 7安装docker环境

    前言 Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D ...

  9. 关于input标签checkbox属性 和checked

    我们设置了type的属性为checkbox时,记住以下3个关键点 1.点勾选时或者说点击时,checked为选中,在input标签中是checked=“checked”,注意这里面无论checked= ...

  10. 12.基于vue-router的案例

    案例分析 用到的路由技术要点: 路由的基础用法 嵌套路由 路由重定向 路由传参 编程式导航 根据项目的整体布局划分好组件结构,通过路由导航控制组件的显示 1.抽离并渲染 App根组件 2.将左侧菜 单 ...