前一段时间,部门接入了新业务,由于业务量小,架构非常简单,采用了最简单的LNMP架构,整个项目是交给一个刚毕业的RD负责的,这是背景。

上线前半天,服务平稳运行。下午的时候,开始收到大量报警:No host could be connected in the cluster。第一反应:mysql服务器不会挂了吧。打开监控,一切正常,登录也一切正常,但报警一直没有间断,这奇怪了。

实际上一点都不奇怪。“No host could be connected in the cluster”本身不是mysql的错误,所以并不是mysql服务器本身出了问题,问题的原因一定是出在封装的底层的类库,为了描述的更明白一些,我先总结一下这个mysql连接管理类库的功能。

为了保证mysql服务的稳定性,我们的mysql连接类库实现了一个故障自动切换的功能:维护一个当前的mysql服务器的列表,每次连接时随机选择一台服务器连接(这里不考虑跨机房的问题,也不考虑选择的算法。选择机器的算法可以是随机的,也可以是轮询的,这不是关键),同时维护一个失败的服务器列表。如果某一次mysql执行失败,那么便把这台服务器从可用的服务器中摘除,同时放置到失败的服务器列表中, 在一定时间内(interval,比如2s)这台mysql便不在被访问。 需要注意的是,这台mysql并不是一直在失败的服务器列表中的,经过一段时间后,便会重新释放,重新进入可用的服务器列表中。这么做的主要目的,是在某一台mysql服务器发生故障时,由于这台mysql被访问到的概率变小,不至于出现线上服务的大面积瘫痪,也给线上故障转移提供更多的时间buffer。

问题就出在这里!这个自动切换的功能只适用于mysql cluster,也就是存在多个mysql服务器的情况,如果服务器只有一台,那么问题就很严重了:如果某一次mysql查询执行失败了,那么这台mysql会被打入冷宫,在接下来的时间间隔内,便没有任何可用的mysql服务器了!这样一来,流量一大,所有的interval间隔内的请求便都失败了!这也是为什么线上会出现大量的“No host could be connected in the cluster”的报警。

这个问题很典型,很多人不清楚类库的作用,便信手拈来直接使用,所以出现问题的时候常常也是一头雾水,不知从何下手。尤其在大公司中,类库、工具、成熟的解决方案都比较齐全,在使用方便的同时,也隐藏了内部的实现逻辑,往往会造成“使用很熟练,原理一窍不通”的问题。

一次Debug过程的思考的更多相关文章

  1. Debug过程中的mock (及display窗口的使用)

    转载:http://m.blog.csdn.net/blog/u012516903/18004965 在debug的时候,有3个地方可以进行mock测试 测试代码如下: 1.使用display窗口 W ...

  2. 【实习记】2014-08-10(上)代码跟踪git的想法+归并排序的debug过程

        (冒泡,选择,插入,希尔,快速,归并,堆排)周末加班学习C++,打算用C++写七大经典排序代码.发现3个月前自己写的七大经典排序代码(C Language)突然运行出错. Makefile内容 ...

  3. android一个下拉放大库bug的解决过程及思考

    android一个下拉放大库bug的解决过程及思考 起因 项目中要做一个下拉缩放图片的效果,搜索了下github上面,找到了两个方案. https://github.com/Frank-Zhu/Pul ...

  4. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

  5. dubbo debug过程中一个有趣的问题

    最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在Reference ...

  6. Jeddict:从服务器的验证过程,思考学习新事物的套路

    结合一路研究Jeddict使用的过程经验来看,在这里说一下关于服务器配置的东西.在我们团队,最开始用这个插件的时候,因为公司用的应用服务器是Jboss EAP 7,所以,我们自然而然的,想当然的直接使 ...

  7. vue生命周期updated的触发时机之debug过程中发现的firefox问题

    现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...

  8. 线上问题debug过程(cat,grep,tr,awk,sort,uniq,comm等工具的综合使用)

    问题:发现线上到货单的数量,小于实际到货的数量. 怀疑一些隐藏的条件,将部分唯一码进行了过滤,导致数量变少. 开展了如下的跟踪流程: 1.找到其中一个明细的唯一码 grep 6180e-4b09f p ...

  9. 一个关于 ie 浏览器的 bug 解决过程和思考

    首先我们测试了老师反馈的异常情况.这所中学使用的是 IE8 浏览器.IE8 浏览器提交作文评分的情况是:一直停留在“正在提交系统评分”的页面,停留了很长时间以后,页面空白. 换用火狐浏览器,可以正常评 ...

随机推荐

  1. EXCEL的导出

    具体实现代码: protected void EXCEL_Click(object sender, EventArgs e) { ToExcel(GridView1); } public void T ...

  2. MyBatis 环境搭建 (一)

    一.MyBatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简 ...

  3. andriod sdk模拟器安装过程中报错

    andriod sdk模拟器安装过程中,出现下述错误: Failed to fetch URL http://dl-ssl.google.com/android/repository/reposito ...

  4. 【5.1送礼】国内第一部Matlab和C#.Net混合编程视频教程【免费】

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 上一次写博客很久了 ...

  5. PhotoShop常用快捷键

    Photoshop常用快捷键: 图01 图02 图03 图04 图05 快捷键 PS快捷键是Photoshop为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令. 多种工具共用一 ...

  6. Web性能测试参数

    1.前言 最近在项目中引入了keyless,需要测试一下对web的性能影响.常见的web测试工具有ab.siege.http_load等.我用的是Apache的ab测试工具.在测试web性能之前,首先 ...

  7. 年度榜单:2013年最佳免费 PSD 设计素材揭晓

    <年度榜单>系列继续给大家带来2013年度发布的好东西,这篇文章要给大家分享的是本年度最佳的12套精美的 PSD 设计素材,你可以免费下载使用.这些免费素材不仅能帮助他们节省大量的时间,而 ...

  8. 转 Windows+VS2013爆详细Caffe编译安装教程

    1. 安装cuda Cuda是英伟达推出的GPU加速运算平台 我这里安装的是cuda7.5,已经安装过的忽略,还没有安装过的这里有安装教程.windows下面安装还是非常简单的. 点击打开链接    ...

  9. 地图定位IOS8之后的定位

    从ios8开始,苹果进一步加强了对用户隐私的保护. 当app想要访问用户的隐私信息时  系统不再自动弹出一个对话框让用户授权 解决方法: (1)调用ios8.0的API 主动请求用户授权 - (voi ...

  10. nodejs学习篇 (1)webstorm创建nodejs + express + jade 的web 项目

    之前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近看到使用jade模板来开发,觉得挺新奇的,于是试了一把,也了解了一些特性,算是个新 ...