为了建立对我们的故障转移的信赖,我们建立了一个类临盆情况的测试集群,并且我们赓续地崩溃它来不雅察故障转移情况。
这个类临盆情况的测试集群是一套复制情况,与我们的临盆集群的各个方面都雷同:硬件类型、操作体系、MySQL 版本、收集情况、VIP、puppet 设备、haproxy 设置 等。与临盆集群独一不合的是它不二送/接收临盆流量。
我们的测试集群有来自三个数据中间的典范的办事器。我们欲望故障转移可以或许大年夜同一个数据中间内晋升替代副本。我们欲望在如许的限制下尽可能多地恢复副本。我们请求尽可能地实现这两者。调和器对拓扑构造没有先验假定prior assumption;它必须根据崩溃时的状况作出反竽暌功。
然而,我们有兴趣创建各类复杂而多变的故障恢复场景。我们的故障转移测试脚本为故障转移供给了基本:
- 它可以或许辨认现有的主办事器
- 它可以或许重构拓扑构造,来代表主办事器下的所有的三个数据中间。不合的数据中间具有不合的收集延迟,并且预期会在不合的时光对主机崩溃做出反竽暌功。
- 可以或许选择崩溃方法。可以选择干掉落主办事器(kill -9)或收集隔离(比较好的方法: iptables -j REJECT 或无响应的方法: iptables -j DROP)方法。
脚本经由过程选择的办法使主机崩溃,并等待调和器靠得住地检测到崩溃然后履行故障转移。固然我们期望检测和晋升在 30 秒钟内完成,但脚本会稍微放宽这一期望,并在查找故障转移结不雅之前休眠一段指定的时光。然后它将检查:
- 一个新的(不合的)主办事器是否到位
- 集群中有足够的副本
- 主办事器是可写的
- 对主办事器的写入在副本上可见
- 内部办事发明项已更新(如预期般辨认到新的主办事器;移除旧的主办事器)
- 其他内部检查
这些测试可以证实故障转移是成功的,不仅是 MySQL 级其余,而是在更大年夜的基本举措措施范围内成功的。VIP 被付与;特定的办事已经启动;信息达到了应当去的处所。
该脚本进一步持续恢复那个掉败的办事器:
- 大年夜备份恢复它,大年夜而隐含地测试了我们的备份/恢复过程
- 验证办事器设备是否相符预期(该办事器不再认为其是主办事器)
- 将其参加到复制集群,期望找到在主办事器上写入的数据
看一下以下可视化的筹划的故障转移测试:大年夜运行优胜的群集,到在某些副本上发明问题,诊断主办事器(7136)是否逝世机,选择一个办事器(a79d)来晋升,重构该办事器下的拓扑,晋升它(故障切换成功),恢复掉败的(原)主办事器并将其放回群集。
automated master failover
测试掉败怎么样?
我们的测试脚本应用了一种“停止世界”的办法。任何故障切换组件中的单个故障都将导致全部测试掉败,是以在有人解决该问题之前,无法进行任何进一步的主动化测试。我们会获得戒备,并检查状况和日记进行处理。
脚本将各类情况下掉败,如弗成接收的检测或故障转移时光;备份/还原出现问题;掉去太多办事器;在故障切换后的不测设备等等。
我们须要确保调和器精确地连接办事器。这是竞争性写入负载有效的处所:如不雅设置不精确,复制很轻易中断。我们会获得 DUPLICATE KEY 或其他缺点提示掉足。
这是特别重要的,是以我们改进调和器并惹人新的行动,以许可我们在安然的情况中测试这些变更。
膳绫擎所示的测试法度榜样将捕获(并已经捕获)我们基本举措措施很多部分的问题。这些够了吗?
automated master failover
在临盆情况中老是有其他的器械。有些特定测试办法不实用于我们的临盆集群。它们不具有雷同的流量和流量方法,也不具有完全雷同的办事器集。故障类许可能有所不合。
我们正在为我们的临盆集群设计纷乱测试。 纷乱测试将会在我们的临盆中,然则按照预期的时光表和充分控制的方法来逐个破坏我们的部分临盆情况。 纷乱测试在恢复机制中惹人更高层次的信赖,并影响(是以测试)我们的基本举措措施和应用法度榜样的更大年夜部分。
这是奥妙的工作:当我们承认须要纷乱测试时,我们也欲望可以避免对我们的办事造成不须要的影响。不合的测试将在风险级别和影响方面有所不合,我们将尽力确保我们的办事的可用性。
测试结不雅经由审核,发送到机械人聊天室,作为事宜发送到我们的度量体系。下图中的每条垂直线代表成功的迁徙测试:
模式迁徙
我们应用 gh-ost来运行及时模式迁徙schema migration。gh-ost 是稳定的,但也处于活泼开辟中,重大年夜新功能正在赓续开辟和筹划中。
gh-ost 经由过程将数据复制到 ghost 表来迁徙,将由二进制日记拦截的进一步更改应用到 ghost 表中,就如颇┞俘在写入原始表。然后它将 ghost 表交换代替原始表。迁徙完成时,GitHub 持续应用由 gh-ost 生成和填充的表。
在这个时刻,几乎所有的 GitHub 的 MySQL 数据都被 gh-ost 从新创建,个中大年夜部分从新创建多次。我们必须高度信赖 gh-ost,让它一遍遍地操弄我们的数据,即使它还处于活泼开辟中。下面是我们若何获得这种信赖的。
gh-ost 供给临盆情况测试才能。它支撑在副本上运行迁徙,其方法与在主办事器上运行的方法大年夜致雷同: gh-ost 将连接到副本,并将其视为主办事器。它将采取与实际主机迁徙雷同的方法解析其二进制日记。然则,它将复制行并将二进制日记事宜应用于副本,并避免对主办事器进行写入。
我们在临盆情况中给 gh-ost 供给专用的副本。这些副本并不为临盆情况供给办事。每个如许的副本将检索临盆表的当前列表,并以随机次序对其进行迭代。一个接一个地选择一个表并在该表上履行复制迁徙。迁徙实际上并不修改表构造,而是运行一个眇乎小哉的 ENGINE=InnoDB 更改。该测试运行迁徙时,如不雅表正在临盆情况中应用,会复制实际的临盆数据,并接收二进制日记之外的┞锋实的临盆情况流量。
推荐阅读
当语音输入不再受时光的限制,用户是否可以真正实现“动口不着手”?近日,百度AI开放平台向开辟者免费开放长语音辨认功能,经由过程SDK调用办事,可将长语音转换为文字。据懂得>>>详细阅读
地址:http://www.17bianji.com/lsqh/37750.html
1/2 1