千家信息网

Windows 2012 always on 读写分离集群搭建配置

发表于:2024-11-13 作者:千家信息网编辑
千家信息网最后更新 2024年11月13日,Windows 2012 always on 读写分离集群搭建配置。Always on简介AlwaysOn 可用性组 (SQL Server)AlwaysOn 可用性组功能是一个提供替代数据库镜像的企
千家信息网最后更新 2024年11月13日Windows 2012 always on 读写分离集群搭建配置

Windows 2012 always on 读写分离集群搭建配置。

Always on简介

AlwaysOn 可用性组 (SQL Server)

AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案。SQL Server 2012 中引入了 AlwaysOn 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性。"可用性组"针对一组离散的用户数据库(称为"可用性数据库",它们共同实现故障转移)支持故障转移环境。一个可用性组支持一组读写主数据库以及一至八组对应的辅助数据库。(可选)可使辅助数据库能进行只读访问和/或某些备份操作。

可用性组在可用性副本级别进行故障转移。故障转移不是由诸如因数据文件丢失而使数据库成为可疑数据库、删除数据库或事务日志损坏等此类数据库问题导致的。

Always on 优点

AlwaysOn 可用性组提供了一组丰富的选项来提高数据库的可用性并改进资源使用情况。主要组件如下:

· 支持最多九个可用性副本。"可用性副本"是可用性组的实例化,此可用性组由特定的 SQL Server 实例承载,该实例维护属于此可用性组的每个可用性数据库的本地副本。每个可用性组都支持一个主副本和最多八个辅助副本

支持替代可用性模式:

· 异步提交模式。此可用性模式是一种灾难恢复解决方案,适合于可用性副本的分布距离较远的情况。

· 同步提交模式。此可用性模式相对于性能而言更强调高可用性和数据保护,为此付出的代价是事务延迟时间增加。一个给定的可用性组可支持最多三个同步提交可用性副本(包括当前主副本)。

支持几种形式的可用性组故障转移:自动故障转移、计划的手动故障转移(通常简称为"手动故障转移")和强制的手动故障转移(通常简称为"强制故障转移")。

· 支持几种形式的可用性组故障转移:自动故障转移、计划的手动故障转移(通常简称为"手动故障转移")和强制的手动故障转移(通常简称为"强制故障转移")。有关详细信息,请参阅故障转移和故障转移模式(AlwaysOn 可用性组)

· 使您能够将给定的可用性副本配置为支持以下一种或两种活动辅助功能:

o 利用只读连接访问,与副本的只读连接可以在此副本作为辅助副本运行时访问和读取其数据库。有关详细信息,请参阅活动辅助副本:可读辅助副本(AlwaysOn 可用性组)

o 当副本作为辅助副本运行时,对副本的数据库执行备份操作。有关详细信息,请参阅活动辅助副本:辅助副本备份(AlwaysOn 可用性组)

通过使用活动辅助功能,可更好地利用辅助硬件资源,从而提高 IT 效率并降低成本。此外,通过将读意向应用程序和备份作业转移到辅助副本,有助于提高针对主副本的性能。

· 支持每个可用性组的可用性组侦听器。"可用性组侦听器"是一个服务器名称,客户端可连接到此服务器以访问 AlwaysOn 可用性组的主副本或辅助副本中的数据库。可用性组侦听器将传入连接定向到主副本或只读辅助副本。侦听器在可用性组故障转移后提供快速应用程序故障转移。有关详细信息,请参阅可用性组侦听器、客户端连接和应用程序故障转移 (SQL Server)

· 支持灵活的故障转移策略以便更好地控制可用性组故障转移。

· 支持用于避免页损坏的自动页修复。

· 支持加密和压缩,这提供了安全且高性能的传输方式。

· 提供了一组集成的工具来简化部署和管理可用性组,这些工具包括:

o 用于创建和管理可用性组的 Transact-SQL DDL 语句。有关详细信息,请参阅AlwaysOn 可用性组的 Transact-SQL 语句概述 (SQL Server)

o SQL Server Management Studio 工具,如下所示:

§ 新建可用性组向导 创建和配置可用性组。在某些环境中,此向导还可以自动准备辅助数据库并且为每个数据库启动数据同步。有关详细信息,请参阅使用"新建可用性组"对话框 (SQL Server Management Studio)

§ 将数据库添加到可用性组向导 向现有可用性组添加一个或多个主数据库。在某些环境中,此向导还可以自动准备辅助数据库并且为每个数据库启动数据同步。有关详细信息,请参阅使用"将数据库添加到可用性组"向导 (SQL Server)

§ 将副本添加到可用性组向导 向现有可用性组添加一个或多个辅助副本。在某些环境中,此向导还可以自动准备辅助数据库并且为每个数据库启动数据同步。有关详细信息,请参阅使用"将副本添加到可用性组向导"(SQL Server Management Studio)

§ 故障转移可用性组向导 启动对可用性组的手动故障转移。根据您指定为故障转移目标的辅助副本的配置和状态,该向导可以指定计划的手动故障转移或强制手动故障转移。有关详细信息,请参阅使用故障转移可用性组向导 (SQL Server Management Studio)

o AlwaysOn 面板 监视 AlwaysOn 可用性组、可用性副本和可用性数据库,并且评估 AlwaysOn 策略的结果。有关详细信息,请参阅使用 AlwaysOn 面板 (SQL Server Management Studio)

o "对象资源管理器详细信息"窗格显示有关现有可用性组的基本信息。关详细信息,请参阅使用对象资源管理器详细信息监视可用性(SQLServer Management Studio)

o PowerShell cmdlet。有关详细信息,请参阅AlwaysOn 可用性组PowerShell Cmdlet 概述 (SQL Server)

文档出处,详见:https://msdn.microsoft.com/zhcn/library/hh610230(v=sql.120).aspx

测试环境:

4台Windows 2012 R2 服务器

服务器功能

服务器IP

系统

服务

AD节点

10.92.37.2

Windows 2012 R2

AD

Sql 2012节点

10.92.37.3

Windows 2012 R2

故障转移+sql2012

Sql 2012节点

10.92.37.4

Windows 2012 R2

故障转移+sql2012

Sql 2012节点

10.92.37.5

Windows 2012 R2

故障转移+sql2012

、安装故障转移

Always on 集群需要故障转移集群支持。首先需要搭建故障转移集群。

10.92.37.2安装域。打开服务器管理器,打开-管理-添加角色和功能。


勾选Active Directory 服务


等待所有安装完成。

配置域控服务器。点击下图是所示按钮

选择"添加新林"域名填入名称。

输入还原密码

下一步

等待系统分配NetBIOS名称。然后一直下一步。等待完成重启服务器。重启完成注意需要域账号登陆。例如jianjian\administrator

安装

配置好之后自动把网卡dns改成127.0.0.1,或者您安装域控前手动改成127.0.0.1,sql节点的dns为了加入域需要改成控的地址10.92.37.2

Sql 节点服务器加入域。

配置sql节点服务器的网卡(和域控在同DNS为域控的地址。确保可以解析域名称

开始我的电脑右键属性à更改设置à更改à选择域,填入控名称。确定,输入域控的管理员账号和密码加入域。重启服务器

重启通过域用户登陆服务器例如jianjian\administrator

安装故障转移角色

sql节点的所有服务器安装故障转移角色服务

安装方式一样,下一步即可。

故障转移磁盘配置。完整故障转移集群需要仲裁磁盘数据盘MSDTC发生转移时候磁盘也会整体进行转移从而起到2边数据同步的作用。具体可以参考相关文档。

此次我们为3节点(奇数集群并不需要创建仲裁。


建立故障转移集群

下一步

下一步

下一步

角色不选,直接下一步

选择功能-故障转移集群。

下一步直接安装结束。


浏览查找您需要添加到集群的节点,为了更好辨认建议更改计算机名称。

下一步

下一步

下一步

下一步

下一步

安装sql 2012

Sql2012安装正常操作即可,需要注意的就是服务账号配置(如图1)时候使用域账号。分别在3台节点安装sql 2012。安装完成后,(图2所示)打开sql server 配置管理器-SQL ServerMSSQLSERVER)--右键属性。启用always on 可用性组。重启数据库服务。

图(1

2


配置读写集群

首先在你选择节点导入数据库。读写集群配置需要数据库的完整备份。选择数据库右键属性-选项-调整恢复类型为完整。

这个数据完整备份。

always on 集群配置


输入名称随性即可。

点击添加副本使用域账号连接其他2个sql节点。勾选自动故障转移)(同步提交)

辅助副本"可读辅助副本"选择为仅只读意向。备份首选项默认即可。


添加侦听器。也可以创建完后再添加。选择子网,输入指定IP地址即可注意监听的端口sql server1433


"所有副本可访问的共享网络位置。"任意节点建立共享文件夹,并且另外2台挂载(注意开机挂载)即可

验证结果全部成功即可。下一步等待创建完成即可完成后结果如下。主节点可以看到"主要"字样。此时可以做到3台服务器数据同步同步有1-2s延迟)并且可以实现故障转移。当主节点故障其他节点可以自动成为主节点接替工作


此时数据库集群还无法做到读写分离由于always on局限性需要手动配置只读路由表,这个路由表大致结构是主节点----对应2个只读节点并且只读节点有优先级,前面的优于后面的 无法实现2个或者多个只读节点实现负载。其实只为热备只读路由表通过T-sql语言实现,具体如下。更改相关参数保存为.sql文件,通过sqlcmd命令执行Sqlcmd -S 服务器名称 -U 用户 -P 密码 -i 脚本

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH

(

SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH

(

SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.3:1433')

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH

(

SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH

(

SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.6:1433')

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH

(

SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH

(

SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.5:1433')

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH

(

PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-K0VKE108NM8',N'WIN-LF5RK32CE87',N'WIN-2N0I1AI1BHC'))

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH

(

PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-2N0I1AI1BHC',N'WIN-K0VKE108NM8','WIN-LF5RK32CE87'))

);

GO

ALTER AVAILABILITY GROUP [weitui_sql_wr]

MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH

(

PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-K0VKE108NM8',N'WIN-LF5RK32CE87','WIN-2N0I1AI1BHC'))

);

GO

验证读写路由表。使用同样的命令验证。

select a.*,c.is_local,c.role_desc,d.endpoint_url,d.read_only_routing_url

from sys.dm_hadr_availability_replica_cluster_nodes a

join sys.dm_hadr_availability_replica_cluster_states b

on a.replica_server_name = b.replica_server_name

join sys.dm_hadr_availability_replica_states c

on b.replica_id = c.replica_id

join sys.availability_replicas d

on c.replica_id = d.replica_id

测试只读路由是否生效。Always on 集群web链接过程中需要传递ApplicationIntent = ReadOnly 此类参数。测试方式如下。


完成以上操作后点链接。如果可以连接到只读节点,并且符合只读路由表的顺序表示配置完成。


0