配置Always On AG

2023-11-05 12:40
文章标签 配置 always ag

本文主要是介绍配置Always On AG,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

转载于:https://www.cnblogs.com/guarderming/p/10375570.html

这篇关于配置Always On AG的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349930

相关文章

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华