设为首页 收藏本站
查看: 766|回复: 0

[经验分享] lvs+keepalived+mha+mysql高可用架构

[复制链接]

尚未签到

发表于 2018-12-30 07:41:54 | 显示全部楼层 |阅读模式
  http://www.chocolee.cn/archives/276
  MHA介绍
  MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本人youshimaton开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能最大程度上保证数据库的一致性,以达到真正意义上的高可用。
  MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。当Master出现故障是,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master。整个故障转移过程对应用程序是完全透明的。
  1.1存在隐患
  在MHA自动故障切换的过程中,MHA试图从宕掉的主服务器上保存二进制日志,最大程度保证数据的不丢失,但这并不总是可行的。
  例如,如果主服务器硬件故障或无法通过SSH访问,MHA没有办法保存二进制日志,只能进行故障转移而丢失了最新数据。
  拓:MySQL服务挂了,但是可以从服务器拷贝二进制。但如果硬件宕机或者SSH不能连接,不能获取到最新的binlog日志,如果复制出现延迟,会丢失数据。
  使用MySQL5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以和半同步复制结合起来。如果只有一个Slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有Slave服务器上,保持数据一致性。
  最新版0.56版本,增加了支持GTID的功能,建议在MySQL5.6及之后版本使用。MySQL5.5建议使用管理节点版本0.55,数据节点0.54。
  1.2 适用场景
  目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器,一主二从,即一台充当Master,一台充当备用Master,另一台充当从库。出于成本考虑,淘宝在此基础上进行了改造,目前淘宝开发的TMHA已经支持一主一从。
  1.3 MHA工作原理

  1. 从宕机崩溃的Master保存二进制日志事件(binlog event);
  2. 识别含有最新更新的Slave;
  3. 应用差异的中继日志(relay log)到其他Slave;
  4. 应用从Master保存的二进制日志事件;
  5. 提升一个Slave为新的Master;
  6. 使其他的Slave连接新的Master进行复制;
1.4 MHA的组成
  MHA软件由两部分组成,Manager工具包和Node工具包,具体如下。
  Manager工具包情况如下:
  l masterha_check_ssh:检查MHA的SSH配置情况。
  l masterha_check_repl:检查MySQL复制状况。
  l masterha_manager:启动MHA。
  l masterha_check_status:检测当前MHA运行状态。
  l masterha_master_monitor:检测Master是否宕机。
  l masterha_master_switch:控制故障转移(自动或手动)。
  l masterha_conf_host:添加或删除配置的server信息。
  Node工具包(通常由MHA Manager的脚本触发,无需人工操作)情况如下:
  l save_binary_logs:保存和复制Master的binlog日志。
  l apply_diff_relay_logs:识别差异的中级日志时间并将其应用到其他Slave。
  l filter_mysqlbinlog:去除不必要的ROOLBACK事件(已经废弃)
  l purge_relay_logs:清除中继日志(不阻塞SQL线程)
  注:为了尽可能的减少因为主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置MySQL5.5半同步复制。如果对性能要求较高,允许丢失一小部分数据,可以不做半同步复制。
  拓展思想:为了保证数据一致性,MySQL复制中,常常会在Master上使用sync_binlog参数保证binlog持久化,保证数据一致性。但这种方式对磁盘I/O会造成10~20%的影响。但是还有另外一个思路,就是使用MySQL半同步复制来保证数据一致性,MySQL半同步复制是在从服务器的内存中处理数据并进行发聩,虽然也会造成性能影响,但是相对于对Master造成的磁盘I/O的影响来说,反而是个更好的方法。据《高性能MySQL》 第三版中10.9的测试,写入远程的内存(一台从库的反馈)比写入本地的磁盘(写入并刷新)要更快。使用半同步复制相比主在主库上进行强持久化的性能有两倍的改善。
  2.1 软件部署表
  lvs版本:ipvsadm-1.26
  keepalived版本:keepalived-1.1.19
  mysql版本:mysql-5.5.32
  mha-manger版本:mha4mysql-manager-0.55-0.el6.noarch
  mha-node版本:mha4mysql-node-0.54-0.el6.noarch


  2.2架构实现原理
1. 读操作
1) LVS实现读操作的负载均衡;
2) Keepalived在上层管理LVS,并对两台从库进行健康检测(通过定义Check脚本);
3) 一台从库出现故障后,Keepalived将其剔除出负载均衡集群;
2. 写操作
1) 在Master上绑定写VIP(MHA启动后会通过脚本进行操作);
2) MHA监控Master状态,当Master出现故障后(宕机、复制暂停)时;
3) 通过Failover脚本,卸载Master上的WVIP;
4) 通过Failover脚本在Backup Master上绑定WVIP,提升其为主库;
5) 同步并应用差异日志,并将从库指向新主库;
  问题:当MHA把Master切换到了Backup Master上后,LVS如何处理分发在Backup Master上的读操作?
  解释:由于Keepalived会通过脚本定期监控Backup Master的状态,包括同步、SQL线程、I/O线程,所以当Backup Master升级为主库后,这些状态都将消失,Keepalived将自动将Backup Master剔除出负载均衡集群。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657394-1-1.html 上篇帖子: lvs + keepalived + httpd DR模式web层高可用方案架构 下篇帖子: LVS DR模式搭建、 keepalived + LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表