Mysql高可用性相关备忘

1 辙道辕门 发表于 2014-07-03 16:28:40 +0800 阅览(113) 评论(0)
 
 

组建MySQL集群的几种方案
LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)
DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂问题?)
MySQL Proxy(不够成熟与稳定?使用了Lua?是不是用了他做分表则可以不用更改客户端逻辑?)
MySQL Cluster (社区版不支持INNODB引擎?商用案例不足?)
MySQL + MHA (如果配上异步复制,似乎是不错的选择,又和问题?)
MySQL + MMM (似乎反映有很多问题,未实践过,谁能给个说法)


回答:

不管哪种方案都是有其场景限制 或说 规模限制,以及优缺点的。

1. 首先反对大家做读写分离,关于这方面的原因解释太多次数(增加技术复杂度、可能导致读到落后的数据等),只说一点:99.8%的业务场景没有必要做读写分离,只要做好数据库设计优化 和配置合适正确的主机即可。

2.Keepalived+MySQL --确实有脑裂的问题,还无法做到准确判断mysqld是否HANG的情况;

3.DRBD+Heartbeat+MySQL --同样有脑裂的问题,还无法做到准确判断mysqld是否HANG的情况,且DRDB是不需要的,增加反而会出问题;

3.MySQL Proxy -- 不错的项目,可惜官方半途夭折了,不建议用,无法高可用,是一个写分离;

4.MySQL Cluster -- 社区版本不支持NDB是错误的言论,商用案例确实不多,主要是跟其业务场景要求有关系、这几年发展有点乱不过现在已经上正规了、对网络要求高;

5.MySQL + MHA -- 可以解决脑裂的问题,需要的IP多,小集群是可以的,但是管理大的就麻烦,其次MySQL + MMM 的话且坑很多,有MHA就没必要采用MMM


建议:
1.若是双主复制的模式,不用做数据拆分,那么就可以选择MHA或 Keepalive 或 heartbeat
2.若是双主复制,还做了数据的拆分,则可以考虑采用Cobar;
3.若是双主复制+Slave,还做了数据的拆分,需要读写分类,可以考虑Amoeba;

参考资料: 高性能、高可用、可扩展的MySQL集群如何组建? 

==========继续================

如果发现keepalived狂写系统日志,可能是由于两个模块未被加载。执行:

modprobe ip_vs ;  modprobe ip_vs_wrr

查看是否解决问题。这时应该已经能够ping通虚拟IP。

使用mysql -hhostname -uusername -ppassword 可以远程访问数据库(当然,服务器端需要预设好权限和绑定IP,同时打开相应端口)。测试后发现:

keepalived只能检测整台服务器down掉的状况,而无法检测到mysqld挂掉的状况。前者的情况下,keepalived会将请求转发到备用服务器,并在主服务器恢复后,转回主服务器。而后者的情况下,会直接将请求发送到主服务器,并提示拒绝连接。

 

mysql/mariadb的master-slave同步前必须确保数据库“完全相同”。dump过去就可以。否则就可能出现宕机期间的数据无法被同步的问题。

 

 
|

评论列表

还没有人评论。
返回