共120分,其余20分到http://topic.csdn.net/u/20101115/22/a8bfe959-32c7-4068-b1a9-60160215ec94.html结分。
问题描述:有3台mysql主机(两台需要可读写),需要保证其数据内容完全一致,当其中一台发生故障时,剩余两台还需正常工作,并保证内容完全一致。我目前想到了两种方案:
第一是利用MySQL同步复制,A->B->C-A 的环状同步复制功能,但当其中某一台出现故障,剩余两台将无法同步,例如B挂掉时,向A写数据时将无法同步到C,因此无法满足要求;
第二种方案和方案一类似,A和B互主互从实现同步复制,C作为B的从机,即:A<->B->C,平时连接到A和B进行数据库操作,C作为从机从B同步数据,当A或B任一台故障时,将C升级为主机,和A进行同步,等B修复后,作为从机运行,即A<->C->B。
现在不知方案二是否可行,并且感觉可靠性不太靠谱,因此想知道有没有现成的工具可以实现方案二的过程,或者有其他的方案实现上述要求。另:
1.可以不判断MySQL是否当机,前台应用程序无法连接到MySQL时,会自动连接到从机,只要从机在连接前升级为主机即可;
2.目前只有3台主机,预算已固定,不能再增加硬件或收费软件;

解决方案 »

  1.   

    即使是双master也建议用单台读写,因为同步复制其实就是一个延时同步的过程,所以两台互相读写并不能保证数据完整性
      

  2.   

    比较难以实现。 安全一点的做法,还是申请DOWN机时间吧。
      

  3.   

    因为三台MySQL A、B、C分别分布在不同的物理地点,A、C在上海,B在北京,应用程序正常情况下会优先选用本地的数据库,只有主机A或B某一个挂掉时才会用从机C接管。
      

  4.   

    程序判断B是否还活着,如果活着就连B,死了就连C,这个好实现呀。但是当B死掉的时候,自动在A和C上进行CHANGE MASTER操作,好像就不简单了。
      

  5.   

    用mysql-Cluster吧,比主主同步要稳定一些,性能也好一些,因为就是专门针对这种应用的
      

  6.   


    主从复制和主主复制差不多啊, 数据延迟那是肯定的,你去用用新浪微博就知道了,不过一般数据同步花费的时间不会超过3秒,集群所用的ndb Cluster 数据同步性能比较高
      

  7.   

    因为mysql的master-slave同步数据是异步的,所以有延迟,也不能保证100%一致,极端情况就是要传输的时候master崩溃了。我觉得方案二应该可以,只是从代码上注意一下读写,A和B互相同步读写,C只是负责读,从A或者B同步即可,如果任意一台出现问题,都可以有时间来维护,毕竟两台同时坏的概率太小了