暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server数据库读写分离——概念介绍+主从数据库配置示例

熊泽有话说 2021-07-08
731


      01

                               概念篇



    在一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力。很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡。遗憾的是,SQL Server 的所有版本,包括2012年3月发布的SQL Server 2012,也未提供该功能。

扩展单台SQL Server 服务器,解决性能瓶颈,有两种方法:


 一、分布式数据库。扩展和分布数据库到多台服务器,由多台服务器分布存储不同的数据,通过将数据和访问压力分布到多台服务器来解决性能瓶颈。以一个大型电子商务网站数据库为例,可以按照业务模块或功能模块,将数据分布到多台服务器存储。这种方法对程序改造难度较大,设计起来较为复杂,本文不作介绍。


二、读写分离。读写分离是中型规模应用的数据库系统常见设计方案,通过将数据从主服务器同步到其他SQL Server 服务器,提供非实时的查询功能,扩展性能并提高并发性。



数据库的读写分离的好处如下:

    1.通过将“读”操作和“写”操作分离到不同的数据库服务器上,降低对主服务器的CPU、内存、存储、网络资源的争用;

    2.主服务器的增删改进行时,不影响查询服务器的查询,降低阻塞的发生,提高了并发性;

    3.在应用程序提交了报表请求、不合理的查询请求时,不会导致长时间的锁表;

    4.建立容灾副本甚至实现异地容灾,在发生灾难时,可以减少数据的损失;


    绝大部分的企业内部应用,可能不需要上图那么庞大的架构,一台主数据库服务器和一台查询服务器通常能满足读写分离的要求。而且应用程序调整起来非常方便:

    1.在应用程序的配置文件中设置两个数据库连接字符串,一个指向主服务器,一个指向查询服务器;

    2.增删改或者实时性查询使用指向主服务器的连接字符串;

    3.允许非实时的查询及报表请求使用指向查询服务器的连接字符串。

那么主数据库服务器的数据如何同步到查询服务器上?同步的间隔又是怎样的?主服务器发生故障的时候,查询服务器能否接管用户的请求呢?有什么技术要求呢?

SQL Server 提供了三种技术,可以用于读写分离的实现:日志传送、事务复制和SQL 2012 中新增的功能Always On 技术。这三种技术的比较如下:


SQL Server 日志传送示意图


SQL Server 复制示意图



SQL Server Always On 示意图

   


     02

                    主从数据库配置示例


    我们都知道,随着用户的增多,请求数量的增大,单个数据库最终会面临瓶颈。根据二八原则,数据库操作中,写入数据的操作只占20%,剩下的80%为读取操作。那么我们设计主从数据库将读写操作分离,就可以把压力分散到多个库中,并且数据实时性不强的情况下,可以先将写入操作存入消息队列进行缓冲。所以主从数据库读写分离是解决大数据高并发的有效手段。



主从数据库架构





配置分发服务器 

1.选中“复制”---右键选择“---配置分发”---下一步


2.使用默认的本机充当分发服务器,也可以使用别的服务器---下一步

3.启动SQL Server 代理----下一步

 4.指定一个共享目录

5.下一步

6.完成

7.选中复制---右键选择“新建发布”

8.选择发布数据库---下一步

9.选择事务发布---下一步

10.选择需要发布的表

11.勾选立即创建快照

12.设置代理

13.取一个发布名字

创建订阅

1.选中“本地订阅”---右键选择新建订阅

2.下一步

3.选择订阅模式

  1. 第一个是由服务器向从库推送

  2. 第二个是从库向服务器拉取

 两个都可以,这里我们选择由服务器推送

4.选择订阅数据库,这里我们新建了一个test_copy的空数据库进行订阅

5.指定代理用户

6.下一步

7.完成

成功后可以看到test_copy库中也生成了一张Cousmer表

当然,读写分离中的一些注意事项和坑也要注意,比如:

主从同步延迟 、分配机制等。




文章转载自熊泽有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论