架构建立基于SQL Server的高可用架构

1. 什么是高可用架构

高可用架构(High Availability Architecture)是指在系统发生故障、自然灾害等情况时,系统可以自动或手动地转移到备份系统上,从而保证系统的可用性和稳定性。

1.1 高可用性的意义

网站或系统挂掉会给企业或组织带来较大的损失,而出现这种情况的原因可能是各种各样的,比如硬件故障、网络中断、人为失误等。为了保证系统可用性,需要采取措施来应对这些事故。

1.2 高可用架构的主要特征

容错性:在系统运行过程中,防止因为硬件故障、软件bug等问题导致的系统崩溃或停机。

负载平衡:在系统面对大量请求时,将请求分配到不同的服务器处理,提高系统的并发处理能力。

灾备处理:准备备用数据中心,当主数据中心发生故障时,可以实现快速切换数据中心,避免停机时间太长。

自动化:通过自动化的技术手段,实现系统的自动恢复和切换。

可扩展性:在用户量剧增时,系统可以快速扩展,以适应更多用户使用系统的情况。

2. SQL Server高可用架构方案

2.1 常用的高可用架构方案

常用的SQL Server高可用架构方案有以下几种:

数据库镜像(Database Mirroring)

Always On可用性组件(Always On Availability Groups)

复制(Replication)

日志传送(Log Shipping)

集群(Clustering)

2.2 数据库镜像

数据库镜像是一种实现数据冗余、提高可用性的技术。

数据库镜像有以下特点:

可以将一个数据库的数据和日志实时地复制到另一台服务器上。

可以将主数据库切换到备用数据库上,实现自动或手动故障切换。

在主数据库发生故障时,备用数据库可以接管请求而不会造成服务中断。

对于可以容忍一定数据丢失的应用,还可以采用异步模式实现镜像,确保主数据库定期将更新的数据和日志传送到备用数据库上。

数据库镜像的应用场景:

对数据传输时延和容许的数据丢失都有较高要求的场景。

工作负载不高的服务器。

--启动镜像

ALTER DATABASE [mydb] SET PARTNER ='TCP://backupserver.fqdn.com:5022'

GO

--数据保持一致性

ALTER DATABASE [mydb] SET SAFETY FULL

GO

2.3 Always On可用性组件

Always On可用性组件是一个高可用性和灾难恢复的解决方案。

Always On可用性组件的特点:

可以在多台服务器之间自动或手动切换数据库副本。

可以实现跨数据中心的异地容灾。

在副本间实时同步数据,并可以负载均衡查询请求。

支持多个副本共享读取和写入权限。

Always On可用性组件的应用场景:

对数据传输时延和容许的数据丢失都有较高要求的场景。

需要负载均衡的服务场景。

多数据中心的异地容灾。

--创建可用性组

CREATE AVAILABILITY GROUP [AG01]

WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY_ONLY);

--创建副本

CREATE AVAILABILITY REPLICA ON sql02

WITH (ENDPOINT_URL = 'TCP://sql02.MyDomain.Com:5022', FAILOVER_MODE = MANUAL);

--创建监听器

CREATE AVAILABILITY GROUP LISTENER [AG01_Listen]

(WITH IP((1.1.1.1,'255.255.255.0')))

```

2.4 复制

复制是一种通过将数据从一个SQL Server实例复制到另一个SQL Server实例来创建和维护多个相同数据集的技术。

复制的特点:

适用于分布式应用中数据分发和集成的需求。

可以将数据和对象从一个SQL Server实例复制到另一个SQL Server实例。

可以按照表、行或列的级别进行复制,实现定制化的数据同步。

复制的应用场景:

需要将数据从应用程序开发中心分发到其他部门或关联公司,保证各部门或公司都使用同样的数据。

进行报表、数据仓库等类型的数据分析工作。

--创建发布

EXEC sp_addpublication @publication = N'mypublication', @description = N'My Transactional Publication', @sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'false', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active';

--添加订阅

EXEC sp_addsubscription @publication = N'mypublication', @subscriber = N'sql02', @destination_db = N'mydb', @sync_type = N'replication', @subscription_type = N'pull', @update_mode = N'read only', @immediate_sync = 1

2.5 日志传送

日志传送是一种异步的数据库同步方案,它通过将一个SQL Server实例的事务日志转移到另一个SQL Server实例,实现数据库的备份和恢复。

日志传送的特点:

支持同城或异地容灾

同步性较差,有一定的数据丢失风险

复杂度和成本较低

日志传送的应用场景:

保护小规模数据库的解决方案。

需要支持跨城或异地容灾的场景。

--配置备份服务器

EXEC sp_add_log_shipping_secondary_primary @primary_server = 'PrimaryServer', @primary_database = 'MyDB', @backup_source_directory = '\\PrimaryServer\BackupDirectory', @backup_destination_directory = '\\BackupServer\BackupDirectory', @copy_destination_directory = '\\BackupServer\LogCopyDirectory', @overwrite = 1, @delete = 1, @backup_job_name = null, @threshold_alert_enabled = 0, @threshold_alert_dbid = 0, @threshold_alert_delay = 0, @monitor_server = null, @monitor_server_security_mode = 1, @monitor_server_login = 'monitor_login', @monitor_server_password = 'monitor_password';

--配置备用服务器

EXEC msdb.dbo.sp_add_log_shipping_secondary_database @secondary_database = 'MyDB', @primary_server = 'PrimaryServer', @primary_database = 'MyDB', @restore_source_directory = '\\BackupServer\BackupDirectory', @restore_destination_directory = 'C:\Data', @file_retention_period = 1440, @overwrite = 1, @backup_mode = 1, @threshold_alert_enabled = 1, @threshold_alert_delay = 14420, @threshold_alert_seconds = 1200

2.6 集群

集群是将多台服务器组成一个逻辑实体,提供共享存储和访问单个服务器的虚拟ip功能。

集群的特点:

高可用性:网络、存储、电源、节点等的双重冗余保证了系统的稳定性。

可扩展性:可以在集群中添加节点,适应用户量的快速增长。

高可靠性:可以实现节点的自动检测和自动故障转移。

集群的应用场景:

需要高可用性、高可靠性、高性能等要求的应用场景。

需要保证系统不停机、不丢数据的应用场景。

--添加节点

Add-ClusterNode -Cluster 'MyCluster' -Name 'NewNode' -StaticAddress '192.168.1.2'

--重复验证

Test-Cluster -Node 'MyCluster', 'NewNode'

--创建组

New-ClusterGroup -Name 'MyGroup' -Cluster 'MyCluster'

--添加资源

Add-ClusterResource -Name 'MyIPAddress' -ResourceType 'IPAddress' -Group 'MyGroup' -StaticAddress '192.168.1.3/24'

3. 总结

根据不同的应用场景和需求,可以选择合适的SQL Server高可用架构方案来提高系统的可用性和稳定性。一般而言,需要考虑的因素包括系统的规模、数据量、业务需求、数据安全要求等。