首页 > 数据库 >SQL Server 各种高可用性(HA)方案对比

SQL Server 各种高可用性(HA)方案对比

时间:2024-12-11 11:54:59浏览次数:5  
标签:副本 数据库 Server 故障 复制 高可用性 SQL

SQL Server 高可用性方案架构图、原理及最佳实践

1. 数据库镜像(Database Mirroring)

         +--------------------+
         |    Primary DB      |
         | (SQL Server 1)     |
         +--------------------+
                   |
                   | Transaction Logs
                   |
         +--------------------+
         |   Mirror DB        |
         | (SQL Server 2)     |
         +--------------------+

原理:

数据库镜像技术通过维护两个数据库副本(一个主副本和一个镜像副本)来提供高可用性。在数据库镜像中,主数据库会将其事务日志发送到镜像数据库,并实时应用。镜像模式可以是同步模式(保证数据一致性)或异步模式(提高性能但可能导致数据丢失)。

使用场景:

  • 小型企业或简单的应用:适用于对高可用性要求较低,且只需提供灾难恢复的场景。
  • 低预算项目:成本较低,部署和管理相对简单。
  • 灾难恢复:在灾难发生时,可以迅速将主数据库切换到镜像数据库。

优缺点:

  • 优点:简单,低成本,支持自动故障转移。
  • 缺点:不支持扩展,性能可能受影响,不能用于读写分离。

最佳实践

  • 使用同步模式确保数据一致性。
  • 配置故障转移自动化,减少系统停机时间。
  • 避免在高负载场景中使用,因其会对性能产生影响。

2. Always On 可用性组(Always On Availability Groups)

         +--------------------+
         |   Primary Replica  | <--- Read/Write
         | (SQL Server 1)     |
         +--------------------+
                   |
        +------------------------+
        |   Secondary Replica    | <--- Read-Only
        | (SQL Server 2)         |
        +------------------------+
                   |
         +--------------------+
         |   Secondary Replica  | <--- Read-Only
         | (SQL Server 3)       |
         +--------------------+

原理:

Always On 可用性组允许将一个数据库的多个副本(包括主副本和多个次副本)用于高可用性和灾难恢复。它支持同步和异步的复制模式,确保主副本的更新可以实时同步到次副本。通过自动故障转移机制,在主副本发生故障时,系统会自动将写操作切换到某个次副本。

使用场景:

  • 大型企业应用:尤其适用于对高可用性和性能要求较高的应用场景。
  • 读写分离:支持多个副本进行读操作,减轻主数据库的负载。
  • 跨地理位置的高可用性:可以跨多个数据中心进行部署,提供更好的灾难恢复能力。

优缺点:

  • 优点:支持多副本,提供读写分离,自动故障转移,高可扩展性。
  • 缺点:需要 SQL Server Enterprise 版本,部署和维护相对复杂。

最佳实践

  • 配置至少 2 个副本,并使用同步模式确保数据一致性。
  • 启用自动故障转移,减少系统停机时间。
  • 配置负载均衡,将读取操作分配到辅助副本,优化性能。
  • 定期检查副本同步状态,确保数据一致性。

3. 故障转移集群(Failover Cluster Instances, FCI)

         +--------------------+
         |  Cluster Node 1    | <--- Primary SQL Instance
         |  (SQL Server 1)    |
         +--------------------+
                   |
                   | Shared Storage
                   |
         +--------------------+
         |  Cluster Node 2    | <--- Secondary SQL Instance
         |  (SQL Server 2)    |
         +--------------------+

原理:

故障转移集群基于共享存储架构,所有集群节点都共享一个存储区域,故障发生时,可以将数据库实例从一个节点切换到另一个节点。节点间的高可用性由 Windows Server 故障转移集群管理,提供透明的故障转移机制。

使用场景:

  • 高可用性要求严格的企业:尤其适用于对零停机时间要求严格的场景。
  • 依赖共享存储的环境:适用于需要共享存储的业务系统。

优缺点:

  • 优点:零停机时间,自动故障转移,支持高可用性。
  • 缺点:需要共享存储,硬件和网络配置要求较高,成本较高。

最佳实践

  • 使用共享存储(如 SAN)来确保数据一致性。
  • 配置资源优先级,确保故障发生时能够顺利切换。
  • 定期检查节点健康状态和故障转移日志。

4. 日志传送(Log Shipping)

         +--------------------+
         |   Primary Server   | <--- Transaction Log Backup
         | (SQL Server 1)     |
         +--------------------+
                   |
        +-------------------------+
        |    Backup Server 1      | <--- Restore Transaction Logs
        | (SQL Server 2)          |
        +-------------------------+
                   |
        +-------------------------+
        |    Backup Server 2      | <--- Optional
        | (SQL Server 3)          |
        +-------------------------+

原理:

日志传送是一种异步的高可用性方案,主服务器周期性地备份事务日志并将其传送到备份服务器,备份服务器再将日志恢复到本地数据库。日志传送不支持自动故障转移,但可以快速恢复到备份服务器。

使用场景:

  • 灾难恢复:适用于灾难恢复需求较为简单的场景。
  • 低预算应用:对于不需要高性能的环境,日志传送是一种成本较低的高可用性方案。
  • 异地备份:适用于需要将备份和数据恢复部署在不同地点的情况。

优缺点:

  • 优点:低成本,适用于灾难恢复,备份服务器可以是只读的。
  • 缺点:不支持自动故障转移,存在数据恢复延迟。

最佳实践

  • 定期调整日志备份频率,以减少数据恢复的延迟。
  • 确保备份服务器与主服务器之间的网络连接可靠,避免因网络问题造成数据延迟。
  • 使用独立的服务器进行日志恢复,避免对主服务器性能产生影响。

5. 同步复制(Transactional Replication)

         +--------------------+
         |   Publisher        | <--- Master SQL Server
         | (SQL Server 1)     |
         +--------------------+
                   |
                   | Transaction Log Replication
                   |
         +--------------------+
         |   Subscriber 1      | <--- Read-Only Replicas
         | (SQL Server 2)     |
         +--------------------+
                   |
         +--------------------+
         |   Subscriber 2      | <--- Read-Only Replicas
         | (SQL Server 3)     |
         +--------------------+

原理:

同步复制通过将发布数据库的数据实时复制到订阅数据库,保证多个副本的数据一致性。在事务性复制中,数据变更会实时从主数据库复制到订阅数据库,实现高可用性和读写分离。

使用场景:

  • 实时数据同步:适用于需要跨多个地点进行实时数据同步的场景。
  • 负载均衡:可以将读操作分配给多个副本,减轻主数据库的压力。

优缺点:

  • 优点:高一致性,实时复制,支持读写分离。
  • 缺点:配置较复杂,容易产生冲突。

最佳实践

  • 配置合理的发布和订阅策略,确保高效的复制操作。
  • 使用适当的监控工具来检测复制延迟和错误。
  • 配置适当的冲突解决方案,特别是合并复制场景中。

6. SQL Server 复制(SQL Server Replication)

         +--------------------+
         |   Publisher        | <--- Publish Changes
         | (SQL Server 1)     |
         +--------------------+
                   |
        +-------------------------+
        |    Distributor Server   | <--- Distribute Data
        | (SQL Server 2)          |
        +-------------------------+
                   |
         +--------------------+
         |   Subscriber 1      | <--- Receive Data
         | (SQL Server 3)     |
         +--------------------+
                   |
         +--------------------+
         |   Subscriber 2      | <--- Receive Data
         | (SQL Server 4)     |
         +--------------------+

原理:

SQL Server 复制利用发布、订阅和分发的机制,将数据从发布服务器复制到订阅服务器。它支持事务性复制合并复制等模式,可以将数据从一个数据库分发到多个订阅数据库,适用于大规模数据分发。

使用场景:

  • 多地点数据分发:适用于跨多个地点分发数据的场景。
  • 低延迟需求:适合需要低延迟数据同步的应用场景。

优缺点:

  • 优点:灵活的复制模式,适用于分布式环境。
  • 缺点:管理复杂,容易产生同步延迟。

最佳实践

  • 定期监控分发队列和订阅状态,确保复制过程的稳定性。
  • 配置适当的备份策略,避免数据丢失。
  • 根据负载需要,合理安排复制频率和发布的对象。

总结

方案 特点 使用场景
数据库镜像 简单配置、同步/异步模式、自动故障转移 小型企业,灾难恢复,高可用性要求简洁的应用场景
Always On 可用性组 支持多个副本、跨站点部署、读写分离、自动故障转移 大型企业应用,跨地理位置、高负载系统,灾难恢复
故障转移集群(FCI) 基于共享存储、自动故障转移、依赖硬件 数据中心、零停机时间要求的企业级应用
日志传送 低成本、手动故障转移、数据恢复延迟 灾难恢复、低预算环境、异地备份
同步复制 实时数据复制、读写分离、高一致性 高可用性要求高的读密集型应用,跨地理位置数据同步
SQL Server 复制 灵活的复制模式、多站点部署 数据分发、分布式系统、跨地理位置的数据同步

标签:副本,数据库,Server,故障,复制,高可用性,SQL
From: https://www.cnblogs.com/Jas0n0ss/p/18599193

相关文章

  • MySQL执行计划字段解析
    MySQL执行计划是通过`EXPLAIN`或`EXPLAINANALYZE`命令生成的,它提供了SQL查询的执行信息,帮助我们分析和优化查询性能。以下是执行计划中各个字段及其含义的详细解释:1.**id**:QueryOptimizer所选定的执行计划中查询的序列号。如果多个行有相同的ID,它们属于同一个查询的一部分,并且......
  • MySQL一些运维命令
    1、数据库连接数数据库查看连接数的方法如下: 使用命令行查看SHOWPROCESSLIST命令:。这个命令会列出所有正在运行的线程,包括用户连接、内部线程等信息。例如,它会显示每个连接的Id(线程ID)、User(用户)、Host(来源主机)、db(连接的数据库)、Command(执行的命令类型,如Sleep、Query等)......
  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL 心理治愈平台
    摘 要随着社会的飞速发展和信息时代的到来,我们所处的社会也在发生着前所未有的变化。这主要体现在人们的生活节奏不断加快,活动范围在不断拓展,人与人的交往越来越多,处理微妙复杂的人际关系为每个人所不可避免,各种各样的竞争强度也越来越巨大,人与人之间的收入、社会地位等差......
  • 人工智能(强化学习)—— Why is Soft Q Learning not an Actor Critic method? —— SQL
    原文:https://ai.stackexchange.com/questions/39545/why-is-soft-q-learning-not-an-actor-critic-methodI'vebeenreadingthesetwopapersfromHaarnojaet.al.:SoftActor-Critic:Off-PolicyMaximumEntropyDeepReinforcementLearningwithaStochastic......
  • SQL Server 中的检查账号是否被锁定-用户登陆失败的原因与解决方案
    在使用SQLServer数据库时,用户可能会遇到“用户登陆失败”的问题。这种问题不仅会影响数据库的使用,也可能导致应用程序的中断。因此,了解这一问题的原因及其解决方案至关重要。一、常见的登录失败原因用户登录失败的原因有很多种,以下是几种常见的原因:用户名或密码错误:这种情......
  • 【GreatSQL优化器-06】条件过滤导致选择非最佳
    【GreatSQL优化器-06】条件过滤导致选择非最佳一、condition_fanout_filter导致计划非最佳GreatSQL的优化器对于join的表需要根据行数和cost来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,condition_fanout_filter会根据一系列方法计算出一个数据......
  • MySQL 运算符
    主要介绍MySQL的运算符及运算符的优先级。MySQL主要有以下几种运算符:算术运算符比较运算符逻辑运算符位运算符算术运算符MySQL支持的算术运算符包括:运算符作用+加法-减法*乘法/或DIV除法%或MOD取余在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL......
  • A306 基于Java+jsp+SQL的社交论坛 BBS 源码 文档
    社交论坛的设计与实现1.摘要2.开发目的和意义2.1系统开发目的2.2系统开发意义3.系统功能设计4.系统界面截图5.源码获取1.摘要摘要随着信息技术的快速发展,人与人之间交流方式越来越先进。在当今时代,QQ、留言板、博客、微信等已成为人们彼此沟通、交流信息的主要......
  • PyMysql库实现数据库操作
    '''PyMysql库实现数据库操作PyMysql环境部署:pymysql是python中操作mysql数据库的第三方库所以需要进行pip安装1.启动cmd2.输入指令pipinstallpymysql,如有需要可以加载国内源3.需要提前安装mysql数据库PyMysql操作数据库主要用于操作mysql数据库调用的......
  • 快速了解Mysql索引
    索引是什么官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,他是对表中一列或多列排序,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件......