.Net 下的数据库主从分离以及简单的几种负载均衡策略代码实现 (上)

业务背景:

在业务量增大的情况下,原有操作模式中一个数据库支撑系统的整个业务已经到达了瓶颈,不得不对原有服务器进行硬件升级以达到更好的性能去计算处理逻辑,这极大增加了硬件成本。
数据库的读与写操作了同一个数据库,使得数据量大的查询长时间占用了数据库链接管道,会极大造成数据库表死锁的概率,在没有配合事务的情况很容易导致数据丢失甚至出现脏数据。
在此背景上,对数据库的读、写进行分开处理,是非常有必要。
这种优化方式,称为数据库的主从分离,主数据库仅负责对数据的增、删、改,而从数据库仅针对数据的,以这样的方式来解决日益增长的业务量。

配置数据库主从分离

本文使用的是MSSQL数据库。

首先需要准备两个服务器。当然一个服务器也是可以做到的,只不过效率的提高并不是很大。因为使用的还是同一个服务器的硬件资源。
在这里插入图片描述
准备好了服务器,那么就需要对两台服务器的数据库中的数据做一个同步,在主数据库中的修改,需要定时的将数据同步给从数据库中,否则从数据库查询的数据,都是已经过时的数据。MSSQL 提供了发布订阅的方式来实现这种主从数据库的数据同步。

配置本地发布

在这里插入图片描述
选择主服务器 > 打开复制 > 选择 本地发布 > 右键选择新建发布.
注意,发布仅允许使用服务器名称。在这里插入图片描述
出现这种错误,有两种解决办法,到指定的服务器上用本地服务器名称登录数据库再发布。
另一种方式,打开 C:\Windows\System32\drivers\etc 下的 hosts文件,本地代理设置。

在这里插入图片描述
如上图设置对应的IP 以及对应的服务器名称 保存即可,这样就可以使用该服务器名称登录了。

这里有个需要注意:配置服务器的IP映射,需要在对应服务器中配置映射,而且在从服务器中,需要配置主服务器的地址映射。例如,从服务器192.168.66.41 需要在hosts文件下添加对主服务器 192.168.66.31的映射

再选择发布就不再提示需要实际的服务器名称才能连接到服务器。在这里插入图片描述
因为我这里配置过了,所以没有显示配置分发服务器的页面。
1、未配置过的就选择当前服务器作为分发服务器即可。
2、并且会要求 启动 SQL Server 代理,直接选择自动启动即可。
3、第三步会提示要求选择保存快照文件的路径,选择对应的路径即可。

接下来选择主数据库。在这里插入图片描述

选择数据库后下一步选择发布类型,一般选择 事务发布 ,该发布类型是基于事务结束后触发,主数据库进行增删改之后的事务提交则自动发布消息供从服务器接收订阅。这种方式有效的保证数据的实时性。

注:读写分离后,数据的实时性是无法百分百保障的,因为主数据库进行写操作后,会将写的操作事务发布到该服务器中,供从服务器订阅,再在从服务器中执行该事务。那么两台服务器之间的网络传输,必定会有一定的耗时。而且这种发布订阅的方式,其中也会产生一定的延迟,具体可搜索相关资料查询这种方式的实现逻辑。

读写分离产生的数据延迟大概是5s到10s。当然,如果要追求数据的实时性,可以查询主数据库,并不是主数据库就不能读了。

在这里插入图片描述
下一步选择需要表。勾选需要将数据同步到从数据库的表,也就是发布该表的增删改事务。

仅供参考:对于表的选择,一般选择一些读写比较频繁,且能够容忍数据延时差的表。不经常查询操作的表,完全可以使用作业来同步数据。(作业同步的方式这里不做诉说,与本文无关。) 因为发布订阅的方式也会占用一定的带宽与硬件资源。

在这里插入图片描述
选择完成后,下一步筛选表行,直接下一步即可,当然某些字段无需同步的,可在本步骤中剔除。
在这里插入图片描述
下一步配置快照执行代理,发布订阅会自动同步数据,但是会出现发布的事务耗时且数据量大的情况,这种时候发布的事务,有可能没时间处理或处理失败,那么这些快照会保存起来,供配置的计划调用重新同步数据。在这里插入图片描述
下一步,设置快照代理
在这里插入图片描述
点击安全设置。
在这里插入图片描述
点击确认完成
在这里插入图片描述
直接下一步
在这里插入图片描述
填写发布名称
在这里插入图片描述
点击完成创建发布。

在这里插入图片描述

如果代理启动失败,会发生报错,发生错误只需要启动服务 SQL server 代理 即可
在这里插入图片描述

这样发布就完成了。

配置本地订阅

选择从服务器,打开复制,右键本地订阅>选择新建订阅

在这里插入图片描述
在这里插入图片描述
下一步选择发布服务器,默认会以本机为发布服务器,这时候需要选择主服务器为发布服务器。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
选择刚刚创建的本地发布,下一步

这个简单解释一下,推送订阅与请求订阅的区别。推送订阅为分发服务器的主动推送,当主服务器发生了事务,会主动推送给从服务器,这种方式就是推送。请求订阅为从服务器去请求主服务器,判断是否发生事务,如果发生再从主服务器拉取事务执行。
这里还是一样,为了事务的时效性。选为分发服务器主动发送事务至从服务器。

在这里插入图片描述
以当前的从服务器作为订阅服务器,选择新建空数据库。新建完成后选择下一步。

如果订阅服务器为空,点击下方 ‘添加订阅服务器’ 按钮 添加在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置分发代理安全性,完成后点击下一步。
在这里插入图片描述
代理计划选择连续运行,直接下一步。在这里插入图片描述

初始化订阅是为了同步表结构以及表数据,选择立即即可。完成后选择下一步。
在这里插入图片描述
直接下一步
在这里插入图片描述
点击完成创建订阅。
在这里插入图片描述
在这里插入图片描述
至此本地发布与本地订阅就已经完成。

注意:如果这里没有配置成功,没有同步结构,是因为从服务器hosts没有配置主服务器的IP映射。

在这里插入图片描述

测试是否数据有同步

在这里插入图片描述
执行插入测试语句。

在这里插入图片描述
至此已成功配置了主从数据库,当主数据库的数据发生改变时,从数据库的数据跟着同步改变。

本篇幅有限,仅介绍了数据库负载均衡的前期准备工作,既MSSQL数据库的读写分离配置。在下一篇将介绍几种简单的数据库负载均衡策略。

下一章:负载均衡策略代码层实现

最后,我尽可能详细的去解释介绍如何实现,如果在本文中有错漏之处,请各位大佬们多多指教。如果我的文章能帮到你,也请各位不吝点个赞点个收藏,如果对文中代码有疑问,也请下方评论。谢谢各位看官。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值