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高可用架构方案来提高系统的可用性和稳定性。一般而言,需要考虑的因素包括系统的规模、数据量、业务需求、数据安全要求等。