百度Mysql数据库高可用实现方案

原文:百度Mysql数据库高可用实现方案 - 知乎 (zhihu.com)

数据库高可用背景

[图片上传失败...(image-fea36-1634817091659)]

以上是一个典型的mysql主从架构方案,分为两个层面:

1、数据流量接入层,即是mysql的proxy层,它连接mysql的client及后端的server端,它提供的主要功能如下:

  • sql拦截与修改
  • 性能分析与监控
  • 读写分离
  • 请求路由

高可用问题:

  • 服务器及网络异常
  • 接入层proxy异常

2、数据库存储层,包括mysql的主库及从库,提供读写服务。

高可用问题:

  • 服务器异常(磁盘故障、机器Down、机器假死)
  • Mysql故障(主库Down、主库假死、主库频繁切换)
  • 网络故障

对于流量接入层较好处理,探测之后由于多节点等价,可动态切换即可。

数据存储层的异常,原因众多,表征不一,难以覆盖完全,同时也容易误判。

这种情况对于人工恢复是一个灾难,同时还要求快速恢复,数据一致性及高可靠,这就要求有一套自动化高可用实施检测方案。

业内通用方案

MHA方案

image

通用配置参数说明如下:

MHA Manager

masterha_check_ssh:检查MHA的SSH配置状况

masterha_check_repl:检查MySQL的复制状况

masterha_manager:启动MHA

masterha_check_status:检测当前MHA运行状态

masterha_master_monitor:检测master是否宕机

masterha_master_switch:控制故障转移(自动或手动)

masterha_conf_host:添加或删除配置的server信息

masterha_stop:关闭MHA

MHA Node

save_binary_logs:保存或复制master的二进制日志

apply_diff_relay_logs:识别差异的relay log并将差异的event应用到其它slave中

filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用这个工具)

purge_relay_logs:消除中继日志(不会堵塞SQL线程)

MHA流程

image

MHA缺陷

通过select1进行主库状态判断,会导致如下问题:

  1. 机器及硬盘故障无法识别;
  2. 连接压力太大,导致响应问题,会产生误识别;
  3. 通过ssh拷贝数据,如果硬件故障或者ssh连接问题,无法获取最新数据,导致数据延迟或者丢失数据;
  4. 由于MHA是中心化管理选择主库,主库选择过程中会出现一些问题,例如脑裂如何处理?

优化架构方案

image

Xagent

托管MySQL实例

单点切换

相互通信(通过SSH授权账号)

DBProxy配置管理

日志切分、清理

Zookeeper

存储:拓扑信息、节点信息

协调: 状态信息

故障识别架构

image

其中ZMaster的功能:

  1. 对各proxy间的网络故障探测;
  2. 非硬盘的机器故障探测;
  3. Mysql反复故障识别;
  4. 中间层组件故障识别。

代理节点:

  1. 硬盘故障识别;
  2. Mysql故障识别。

故障识别流程

image

结合完整数据库内部识别故障。首先收集节点信息以及状态,查看连接数,判断是否是由于 MySQL 实例自身的压力问题或其他问题导致感知DB 有异常的状态,进而上升到联合从库的信息检测当前的主库是不是正常。检测感知异常是否是由于假死或压力过大,然后上升集群内部的联合诊治机制。最终上升到整体数据库 APP 检测机制,以此来决策到底要进行怎样的切换。同时,在切换时要考虑主从之间延时的问题。

主从延时处理

半同步复制

Mysql5.6版本的半同步默认是AFTER_COMMIT:

master将每个事务写入binlog(sync_binlog=1),传递到slave刷新到磁盘(sync_relay=1),同时主库提交事务。master等待slave反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。

Mysql5.7的半同步默认是AFTER_SYNC:

master将每个事务写入binlog , 传递到slave刷新到磁盘(relay log)。master等待slave反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。

因此5.7引入了无损复制(after_sync)模式,带来的主要收益是解决after_commit导致的master crash后数据丢失问题,因此在引入after_sync模式后,所有提交的数据已经都被复制,故障切换时数据一致性将得到提升。

日志数据校验补齐

基于主库Binlog的同步点校验,将差异值进行写入到slave进行同步。

故障处理流程

image

当在前面的识别阶段感知到做的主从切换的时候,百度会在代理层把主库完全替换掉,这个问题在一定程度解决切换的过程中出现主库重新写的问题。接下来就是选择主库的过程,当真正拓扑完成后,会将完成信息通过网通节点发送至代理节点。这一选取新主库的过程,就是进行故障处理的过程。

脑裂问题

解决的两个层面:

  1. 单区域内集群节点,可通过分布式一致性协议,例如RAFT或者Paxos进行自主选举解决,但是该模式适合较小集群;
  2. 如果每个HA节点就是一个agent端,数百或者上千个节点就会出现全民选举效率低下的问题,这种情况可以考虑将HA按照区域分为节点agent端和区域mgr端,agent负责各个节点,而mgr控制在一定的数量范围内,通过mgr进行选举,提升效率。同时一旦某一块区域出现故障就暂停本区域有主库,杜绝出现脑裂问题。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容