主备切换和心跳机制的一点考虑

来源:互联网 发布:如何购买淘宝网店 编辑:程序博客网 时间:2024/06/05 02:10

master-slave模式的数据库架构我们经常听到,心跳机制也是生活 中常用的一个名词。而对于我这个不满足于词汇的人来说总想知道这两个词所代表的东西到底是怎么实现的。
1.先说数据库切换
使用mysql的replication功能可以很好的实现master-slave,或者是master-slave-slave,更或者是dual-master-slave等等的架构的高可用的数据库集群,但是针对出现的master机器crash的情况,一些博客或者文章里面所说的就是“主备切换”,那么怎么切换呢?不会也不说怎么切换那么都是空话(当然这里不排除,这个可能是常识,我的见识太少,我会积累的)。关于这个切换,我的初步的思考是:既然是切换master,那么是不是对master做某种处理。可以发现,我的思考的一个特点就是在master和slave两个方向中,我是从master的角度去考虑的。这导致我不知道怎么做,后来都一个博客看到change master to命令,才豁然开朗:我的方向是错误的,既然master都已经crash,那还为什么要从master的角度去考虑问题的解决方法呢?所以必然是从slave的角度出发,在slave上使用change master to 一个已经准备好的(或者dual-master中的另一个master)不就切换了吗?更或者把一个slave的bin-log功能打开,然后用change master to命令把其他slave的master设置为这个salve也是可以的。这不就master切换完成了吗?我想到了这个层次,传说的主备切换就不过如此了吧!
2.再说心跳机制
其实心跳机制和主备切换就不是一个东东,关系也不大,只是我在理解数据库切换的时候发散的想了下这个东东的。下图是传播十分广泛的:

其中的第7个过程就是心跳了,即heartbeat了。是slave用来向master报告自己的健康状态的一个机制,或者说是master用来获取slave的健康状态的一个机制。我之所以吧主备切换和心跳机制放一起考虑,就是因为想到为什么要主备切换?我们怎么知道什么时候主备切换了呢?对就是要知道机器的状态才能明确的知道那个机器crash了。所以heartbeat不就可以在这里场地发挥作用了吗?还有借助heartbeat可以自动切换master,这样本博客讨论的两个问题就统一了。
关于heartbeat的实现,有一个开源的软件就叫heartbeat:http://www.linux-ha.org/wiki/Main_Page/
这里顺便推荐一篇博客,介绍的比较详细:http://www.cnblogs.com/google4y/archive/2011/08/12/2136720.html