1. MSSQL的HA高可用部署简介
高可用性(High Availability, HA)在信息技术领域指系统或组件无需停机(包括计划和未计划停机)即可实现 24*7 的连续服务可用性。对于企业应用系统来说,HA 是最基本的需求之一。Microsoft SQL Server(以下简称 MSSQL)是目前使用最广泛的关系型数据库之一,它提供了多种 HA 技术和解决方案来满足企业高可用性的需求。
2. MSSQL HA 解决方案
2.1 Always On 可用性组
Always On 是 MSSQL 2012 提供的一种高可用性解决方案,它基于 Windows Server Failover Cluster(WSFC)技术和数据库镜像技术。Always On 可用性组是逻辑容器,由多个数据库和镜像组成。其中一个数据库被指定为主数据库,负责接收应用程序的写入操作,其他数据库是从数据库,负责接收主库的同步更新。在发生故障的情况下,WSFC 会自动切换主库角色,使系统保持运行。
2.2 数据库镜像
数据库镜像是一种基于主-备(Principal-Mirror)模式的高可用性解决方案,它通过将主服务器的事务日志传输到备份服务器上来实现数据的同步更新。在主服务器故障时,备服器会接管主服务器的角色,并向客户端提供服务。该方案可以通过简单的 T-SQL 语句实现自动故障转移。
2.3 复制
复制是一种可为应用程序提供数据分发和访问分离的高可用性解决方案。它可以将一个数据库中的数据异步复制到一个或多个数据库中,实现数据的分发和共享。在主服务器故障时,从服务器可以继续提供服务。
3. Always On 可用性组的 HA 部署
3.1 节点选择
Always On 可用性组依赖 WSFC 技术,要求 MS SQL Server 节点必须加入一个 Windows Server 集群。Windows Server 集群通常包含至少两个节点,每个节点都是物理或虚拟服务器。应尽量选择具有相同配置和性能的节点,否则可能导致性能的不均衡。
3.2 创建可用性组
创建可用性组需要执行以下步骤:
在 WSFC 管理器上创建一个或多个群集资源。
使用 SQL Server Management Studio(SSMS)创建一个可用性组,并添加主库和从库。
配置故障转移(failover)策略和监听器(listener)名称。
在 SSMS 中启用 Always On 可用性组。
以下是创建 MSSQL Always On 可用性组的示例代码:
-- 创建 WSFC 群集资源
USE [PowerShell]
GO
Add-ClusterResource -Name "Cluster Disk 1" -StorageType "Disk" -DiskNumber 1 -Group "SQL Group"
-- 创建可用性组
USE [master]
GO
CREATE AVAILABILITY GROUP [MyAg]
WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
FAILURE_CONDITION_LEVEL = 3,
HEALTH_CHECK_TIMEOUT = 30000)
FOR DATABASE [MyDb]
REPLICA ON N'Node1' WITH (ENDPOINT_URL = N'tcp://Node1.Domain.com:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10),
N'Node2' WITH (ENDPOINT_URL = N'tcp://Node2.Domain.com:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10)
LISTENER N'MyAgListener' (WITH IP ((N'192.168.1.2', N'255.255.255.0')))
GO
3.3 监控和故障排除
对 Always On 可用性组进行监控是确保高可用性的重要一环。MSSQL 提供丰富的监控工具和视图,如 DMV 和 PerfMon 等,用于监控可用性组的运行状况和性能指标。在发生故障时,需要对故障进行分析和排查。
4. 数据库镜像的 HA 部署
4.1 镜像模式选择
数据库镜像提供了两种镜像模式:高安全性模式(High Safety mode)和高性能模式(High Performance mode)。高安全性模式可以最大限度地保证数据的完整性和一致性,但会产生一定的性能开销。高性能模式可以提高数据同步的性能,但在主服务器故障时可能会出现数据丢失的情况。根据业务需求和 SLA 的要求,应选择适合的镜像模式。
4.2 配置镜像
配置数据库镜像需要执行以下步骤:
创建数据库,设置镜像属性。
打开数据库镜像监视器,开始监视镜像同步状态。
当主服务器故障时,手动进行故障转移,或者使用 SQL Server 自动镜像切换机制。
以下是创建 MSSQL 数据库镜像的示例代码:
-- 创建数据库,并设置镜像属性
USE master
GO
CREATE DATABASE [MyDb] ON
PRIMARY (NAME = N'MyDb_Primary', FILENAME = N'C:\SQL\Databases\MyDb_Primary.mdf', SIZE = 100MB , FILEGROWTH = 10%)
LOG ON (NAME = N'MyDb_Log', FILENAME = N'C:\SQL\Log\MyDb_Log.ldf', SIZE = 100MB , FILEGROWTH = 10%)
GO
ALTER DATABASE [MyDb] SET RECOVERY FULL
ALTER DATABASE [MyDb] SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE [MyDb] SET READ_COMMITTED_SNAPSHOT ON
GO
USE [MyDb]
GO
ALTER DATABASE [MyDb] SET HADR AVAILABILITY GROUP = [MyAg]
GO
-- 打开镜像监视器
USE master
GO
EXEC sp_monitorDatabaseMirrorState [MyDb]
GO
4.3 监控和故障排除
数据库镜像提供了一些监控和故障排除的工具和视图,如镜像监视器、数据库镜像状态和镜像性能监视器等。使用这些工具可以有效地跟踪数据库镜像的同步状态和性能,以及进行故障排除。
5. 总结
MSSQL 提供了多种 HA 解决方案,每种解决方案都有其自身的优缺点和适用场景。在实际环境中应根据业务需求和 SLA 的要求,综合考虑性能、可用性和数据一致性等因素,选择适合的 HA 解决方案,并进行合理的配置和监控,确保系统的连续可用性。