没有双机热备软件下的数据库热备方案
没有双机热备软件下的数据库热备方案
原文地址:
http://zhangzeshuai.com/2011/12/02/%E5%8F%8C%E5%87%BB%E7%83%AD%E5%A4%87/
首先声明,代替双机热备的中间件想法,是3年前和一个朋友谈话时,得到的思路.而这个思路是多年前一个日本老头级别的软件工程师提出来的,并不是某个人或者某个公司的解决方案.其次,SQL Server的集群故障转移技术是微软的解决方案.也不牵涉到其他公司的核心技术.
因为blog中引用了其他公司的图片,涉及保密原因,已经撤下.但是此blog中并不是将包含客户信息的工作文档发布到公网上,文章中不保护任何客户信息,文章也不是工作文档.引用的图片用到了客户的一些图片,我在这里深表歉意.并且已经及时删除原有文章,并自己重新制作图片后发布.
文章原理不变,措辞稍作修改.
当开发系统需要双机热备,而双方都不愿意出钱购买双机热备软件时,我们该如何处理这种Case,在这里提供两个解决方案.第一种是3年前从朋友那里得到一个思路.开发数据库中间件的方式,通过数据库中间件来同步数据,切换连接.第二种是使用微软提供的集群故障转移技术.
开发中间件需要熟悉ADO.net原理,并需要花费大量开发和测试精力,项目中并不可取.,而SQL server提供的镜像(集群故障转移技术)来解决此问题却非常简单
中间件解决方案
缺点
1:无论是从时间成本还是人力成本上,我们都没时间来完成此中间件的开发.
2:就算是开发出来的中间件,也不能保证系统恢复异常时的处理都能够完全正确.
集群故障转移的解决方案
方案方法:
1:在客户端访问数据库时,添加镜像的访问地址,其实很简单.在原来字符串的基础上
connectionString=”SERVER= (主服务) DATABASE=dbname;UID=XXX;PWD=XXX”
添加 Failover Partner= (镜像服务)变成后来的.
connectionString=”SERVER=ip;Failover Partner=ip;DATABASE=dbname;UID=XXX;PWD=XXX”
2:配置POS服务器2为服务器1的镜像.
参考文献: http://wenku.baidu.com/view/bbc8fdc7aa00b52acfc7ca0d.html
方案原理:
正常情况:集群服务(主服务)会通过事务一直同步故障转移服务(镜像服务),以保持两个数据库的一致和完整性.
故障情况:当主服务发生故障时,镜像服务就会变为主服务.
通过在Config中配置的ADO连接字符串,ADO.NET会自动判断去连接哪台服务器.
在几乎没有增加代码的情况,我们就完成了数据库的同步与恢复.
与双机热备软件比较:
优点:省钱,部署简单.
缺点:发生故障时只能从主到从,不能自动由从到主.需要人工干预
下一篇: docker简易实现数据库的双机热备