SQL Server 2016 + AlwaysOn 无域集群

[========]sql

AlwaysOn

AlwaysOn 可用性组概述 (SQL Server)数据库

搭建 WSFC

配置计算机的 DNS 后缀

  1. 配置计算机的 DNS 后缀,注意在同个工做组



    windows

  2. 每一个节点的机器都要作域名解析,修改 host 文件C:\Windows\System32\drivers\etc
    服务器

安装故障转移集群

  1. 节点服务器添加故障转移群集功能
    网络

  2. 等待安装完成负载均衡

验证集群

  1. 打开故障转移集群管理工具
  2. 点击验证配置
  3. 添加集群节点
  4. 运行全部测试
  5. 能够点击查看验证报告,勾选当即使用通过验证的节点建立集群

建立集群

  1. 配置集群的管理名称和管理IP
    工具

  2. 等待配置完成
    测试

  3. 能够查看集群报告,稍后配置文件共享见证.net

建立文件共享见证

因为咱们是两个节点的故障转移集群,因此须要加上共享文件夹,若是是奇数节点,这一步是不须要作的!

  1. 配置集群仲裁
  2. 选择文件共享见证

  3. 在集群节点以外的一台服务器上建立共享文件夹\\XIANGMU4TEST01\share,并设置 Everyone 彻底控制的权限

配置 AlwaysOn

  1. 开启 AlwaysOn

  2. 须要重启 SQL Server 服务

  3. 检查,若是 AlwaysOn 启用成功,在服务器属性里能够看到启用HADR为True

  4. 查看各节点的投票数
SELECT * FROM  sys.dm_hadr_cluster_members;

  1. 查看 cluster
SELECT * FROM SYS.[dm_hadr_cluster]

新建可用性组

可是既然节点没有加入AD,那么久不能用域认证,只能用证书认证,所以须要建立证书和端点。在配置可用性组前各节点进行证书认证信任。

  1. 修改 SQL 服务登录帐号为本机管理员帐号

  2. 建立证书,两个节点都要建立证书,注意修改证书名称
--节点二:建立主密钥/证书,备份证书。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'AAA111aaa';
GO
CREATE CERTIFICATE Cert_server228
WITH SUBJECT = 'Cert_server228',
START_DATE = '2017-01-01',EXPIRY_DATE = '2099-12-30';
GO
BACKUP CERTIFICATE Cert_server228
TO FILE = 'C:\Storage\Cert_server228.cer';
GO

注意:备份证书的文件夹要先建立好,而且赋予权限

  1. 将建立好的证书放到另外一台节点服务器,并加入证书
--节点二:建立其余节点证书
USE master;
GO
CREATE CERTIFICATE Cert_server227
FROM FILE = 'C:\Storage\Cert_server227.cer';
GO

证书建立好后以下

  1. 从新建立端点,受权帐号设置为本机管理员帐号,验证方式使用上面建立的证书
--节点:建立端点
CREATE ENDPOINT [testag_endpoint]
    AUTHORIZATION [POSTEST2-2016\Administrator]
    STATE=STARTED
    AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)
    FOR DATA_MIRRORING
    (ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_server228, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

若是存在已有的端点,则须要将已有端点删除

  1. 在主节点服务器操做新建可用性组。

  2. 设置可用性组名称,建议勾选数据库级别运行情况检测。
  • 在以前的 AlwaysOn 2012 和 2014 中,若是实例健康出现问题,将触发故障转移。若是有一个数据库有问题,只要实例OK,可用性组就不会故障转移。
  • 在 AlwaysOn 2016 中,勾选以后,不管是一个实例有问题,仍是一个或多个数据库有问题,都会发生故障转移。
  1. 选择数据库,要求数据库已经进行了完整备份

  2. 添加副本节点,并勾选自动故障转移,设置辅助副本为可读副本

  3. 将端点 URL 设置为 IP 方式,这里端点会显示为咱们上面建立的端点,登录帐号为咱们上面设置的帐号

  4. “备份首选项”和“侦听器”不须要设置,保持默认就行,可用性侦听器咱们后面再添加,能够直接点击“下一步”

  5. 数据同步这里建议使用完整的数据库和日志备份的方式更方便,须要有一个共享文件夹,而且节点服务器要有相同的数据库文件目录结构

  6. 等待可用性组建立成功

  7. 建立成功后数据库状态显示为已同步

    故障转移集群会显示拥有一个群集角色

  8. 显示面板能够查看集群信息

建立侦听器

一个侦听器包括虚拟IP地址、虚拟网络名称、端口号三个元素,一旦建立成功,虚拟网络名称会注册到DNS中,同时为可用性组资源添加IP地址资源和网络名称资源。用户就可使用此名称来链接到可用性组中。

  1. 添加侦听器

  2. 选择使用静态 IP

  3. 建立成功后,在故障转移集群管理器里的角色节点,能够看到客户端访问名称和 IP 地址

  4. 链接数据库时使用侦听器的地址

可读副本的负载均衡

SQL Server 2016 支持多个只读副本负载分担只读操做。

右键一个可用性副本能够查看副本的只读性设置:

主角色中的链接

主角色中支持的链接访问类型:

  • 容许全部链接(ALL):主数据库同时容许读写链接和只读链接。这是主角色的默认行为。
  • 仅容许读/写链接(READ_WRITE):容许 ApplicationIntent=ReadWrite 或未设置链接条件的链接。不容许 ApplicationIntent=ReadOnly 的链接。仅容许读写链接可帮助防止客户错误地将读意向工做负荷链接到主副本。

修改脚本:

USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE))
GO

可读辅助副本

辅助角色支持的链接访问类型:

  • 无链接(NO):不容许任何用户链接。辅助数据库不可用于读访问。这是辅助角色中的默认行为。
  • 仅读意向链接(READ_ONLY):辅助数据库仅接受链接参数 ApplicationIntent=ReadOnly 的链接,其它的链接方式没法链接。
  • 容许任何只读链接(ALL):辅助数据库所有可用于读访问链接。此选项容许较低版本的客户端进行链接。

修改脚本:

USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))
GO

设置数据库实例监听端口

  1. Sql Server 配置管理工具找到数据库实例的网络配置,

  2. 右键 TCP/IP,默认配置的是动态端口

  3. 这里修改成固定端口 1433

  4. 最后须要重启 Sql Server 服务。

配置可用性组只读路由

执行下面 sql 获取可用性组名称:

select name,* from  sys.availability_groups

执行下面 sql 获取要配置的可用性副本名称(服务器实例):

select replica_server_name,* from sys.availability_replicas
  1. 为可用性副本(服务器实例)配置只读路由 URL,路由地址能够填 IP 或者计算机名,端口填数据库实例绑定的 TCP/IP 端口。
    执行脚本:
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.227:1433'))
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST2-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.228:1433'))
GO

也能够右键可用性组选择属性,经过 UI 方式更改

  1. 每一个自动转移副本配置只读路由列表
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST1-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST2-2016\POSTEST'),'POSTEST1-2016\POSTEST')));
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST2-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST1-2016\POSTEST'),'POSTEST2-2016\POSTEST')));
GO

使用“()”对只读路由列表进行分组,
List 1: 'POSTEST1-2016\POSTEST'
List 2: 'POSTEST2-2016\POSTEST'
按以下方式工做:

  1. 路由到第一个列表中的副本,若是第一个列表存在多个副本,则对读取链接进行轮询分发。
  2. 若是第一列表中任一副本不可用了,路由将继续到第一个列表中的其余可用副本。
  3. 若是第一个列表中的全部副本都不可访问,将会路由到下一个列表
  4. 若是第一个列表中的任一副本可用,将会恢复路由到第一个列表

  5. 测试只读路由效果,sqlcmd 使用 Readonly 指定为只读链接,
sqlcmd -S 10.98.98.231 -K Readonly -d test -Q "select @@servername" -e

只读链接被链接到辅助副本

使用 SSMS 或者 EF 等须要在链接字符串设置参数ApplicationIntent=ReadOnly

注意:
想要使用辅助副本负载读操做,必需要在链接字符串中配置为只读链接,而后在程序中指定使用只读链接进行数据库读取操做,AlwaysOn 自身不能自动负载均衡。

配置帐号

为每一个数据库节点配置登录帐号,而后经过监听器使用该帐号登录数据库。

  1. 主副本建立登录帐号 satest

  2. 查看主库上该帐号的 sid 为库名
SELECT * FROM [test]..sysusers
  1. 在副本数据库上建立对应帐号,其中 sid对应的值是主库上所查到的sid的值
CREATE LOGIN [satest] WITH PASSWORD=N'xxxxxxx',
SID =0x99AD266AFD26F841B3E49EF9633B0D4B, DEFAULT_DATABASE=[test],
 CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

使用故障转移

建议使用 SSMS 中 AlwaysOn 进行手动故障转移。

文章参考:
SQL Server 2016 无域群集配置 AlwaysON 可用性组
SQL Server 2016 AlwaysOn 安装及配置介绍
SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测 https://www.cnblogs.com/ajiangg/p/3668936.html

相关文章
相关标签/搜索