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

[经验分享] GitHub Availability Issue 总结

[复制链接]

尚未签到

发表于 2015-9-10 12:09:44 | 显示全部楼层 |阅读模式
  这周GitHub网站发生了两次重大的不可访问事故,以及若干小时的服务降级。GitHub运维团队特地发了一篇Blog来总结整个事件的过程。
  事故的主要原因可以归结为:
  1. 数据库的Active角色在不应该发生failover切换时,进行了切换。 First, several failovers of the 'active' database role happened when they shouldn't have.
  2. 数据库集群发生了脑裂,导致集群管理软件(Pacemaker+HeartBeat)做了错误的操作。Second, a cluster partition occurred that resulted in incorrect actions being performed by our cluster management software.
  3. 前两点中提到的Failover切换,造成了比预计情况更恶劣的性能问题。Finally, the failovers triggered by these first two events impacted performance and availability more than they should have
  基于这三点总结就抛出了三个问题:
  1. 现有的HA软件是否可靠,可信?是否在正确的时候做了正确的判断和操作?
  2. 没有集中管理机的HA架构(即内部投票)是否可靠?
  3. HA的Failover过程是否要考虑数据预热?
  
  以下是对于这三个问题的一些分析和个人看法:
  
  问题一:现有的HA软件是否可靠,可信?是否在正确的时候做了正确的判断和操作?
  GitHub团队认为:The automated failover of our main production database could be described as the root cause of both of these downtime events.
  而对于这个问题,我的想法和 Xaprd的观点 一致:事故的关键在于现有的HA软件都没法照顾到所有可能发生的情况,以至于在某些情况下的行为是不可预测的,或者非我们所想的。
  因此一味的将切换操作置成手工模式,虽然避免了风险,但显然没有很好的使用HA软件所提供的service。
  个人想法是,对于一些原因明确且有明确cookbook的事故,可以让HA去完成failover。而对于那些需要人工介入分析故障原因的事故,做手工切换,如果github遇到的timeout等。
  当然这个只是理想情况,目前真正能够通过配置case决策的HA软件还并不存在。
  因此,保守原则还是一个比较推荐的办法,即:HA部署完成后先切入手工模式,前几次failover通过阅读报错日志后手工处理。在几次production实践之后再认为此HA架构是可信的,并切入自动模式。
  
  问题二: 没有集中管理机的HA架构(即内部投票)是否可靠?
  从目前的流行程度来看,MMM,MHA这些使用Manager管理模式的架构,已经逐渐替代 Heartbeat + LVS/ Pacemaker 等投票模式的架构。
  其主要原因就是在没有仲裁机的情况下,发生网络partition会造成脑裂,从而导致active角色的互相争抢,最后使整个cluster瘫痪。
  Github再次用血的教训告诉我们脑裂是无仲裁架构的致命缺陷。
  
  问题三:HA的Failover过程是否要考虑数据预热?
  这个问题显然是引起本次问题的关键:没有预热的切换才是万恶之源。脑裂只是连锁反应而已。
  而貌似整个社区的blog中对于这个问题的讨论却是少之又少,也许是重视程度不够?
  会造成切换后压力剧增可能的情况,我总结为以下三种:
  1. stand-by-master完全作为冗余,BufferPool 基本没有热点数据
  2. stand-by-master提供read-only服务,但read-only 和 acitve master 的请求业务类型不同,导致热点数据不同
  3. 原本active的MySQL宕机后重新回归,此时重启后的MySQL是处于完全Cold 状态
  但目前众多HA软件中都没有考虑预热的因素,毕竟所有的failover都希望尽快的将业务转移至stand-by master,而预热则需要尽可能多的时间来获取业务的请求。
  也许这是一个无解命题?
  
  updated @2012-09-27
  附上两个相关讨论的URL:
  不可能存在完美的MySQL automatic failover方案 http://openlife.cc/blogs/2012/september/failover-evil
  http://www.hastexo.com/blogs/florian/2012/09/26/pacemaker-and-recent-github-service-interruption
  
  

运维网声明 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-111929-1-1.html 上篇帖子: GitHub 的两次故障分析 下篇帖子: centos 升级git到高级版本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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