美团点评基于MGR的CMDB高可用架构搭建之路【转】

王志朋

美团点评DBA

曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维。

MySQL Group Replication(以下简称MGR),于5.7.17版本正式GA,由Oracle官方出品,为MySQL的高可用方案注入了新血液。其一致性,以及不依赖外部组件实现的自动切换、多点写入,给DBA带来了不少期待。

一、背景

以MHA作为切换工具,CMDB管理元数据,结合中间件的高可用方案在MySQL生态中是比较常见的架构。在这个体系中,CMDB作为基础组件之一,不能再依赖这个架构实现自身的高可用,而需要一套自成体系的高可用架构保障。

美团点评基于MGR的CMDB高可用架构搭建之路

2017年下半年开始,美团点评数据库计划全面升级上线5.7版本,也正是这个契机,基于MGR的CMDB高可用想法应运而生。

二、关于MGR

MGR是以Plugin的形式嵌入在MySQL实例中,插件内部实现了冲突检测、Paxos协议通信等。

美团点评基于MGR的CMDB高可用架构搭建之路

可能有同学了解它与PXC很像,社区中关于二者的口水战也非常的热闹,具体二者的优劣与争端此处不表,但有一点值得说明,MGR集群当中,仍然是通过binlog实现节点同步的。这一点对DBA很友好,意味着我们可以很轻易的找回熟悉的主从的感觉(Still A MySQL)。

美团点评基于MGR的CMDB高可用架构搭建之路

三、解决方案

MGR包括多主与单主两个模式,出于多主模式的一些已知问题以及实际业务场景的考虑,我们决定选择单主模式作为主要方案,即当主节点故障后,集群自动选举新的主节点,应用将写访问指向新的主节点。

美团点评基于MGR的CMDB高可用架构搭建之路

那么具体的解决方案还有哪些需要考虑呢?

  • MGR的限制;

  • 相关测试;

  • 合理的参数。

1.MGR的限制

  • 只支持InnoDB存储引擎;

  • 必须有主键;

  • binlog_format只支持ROW格式;

  • 不支持save point(后修复);

  • ……

官方给出了一些明确的要求及限制。针对这些限制我们要对线上要接入的数据库进行排查,调研可行性,规范其满足MGR的要求。包括收敛MyISAM存储引擎的表、无主键的表,应用逻辑中去除save point(新版本去掉此限制)等。

此外我们生产关心的问题,如网络抖动对MGR的影响、备份恢复工具可用性、Online-DDL可用性等,同样需要考虑在内。对此我们做了系统性的功能测试:

美团点评基于MGR的CMDB高可用架构搭建之路

同时在测试中也对MGR的行为有了一些新的认识,比如MyISAM引擎、无主键的表等MGR明确不支持的场景,都是以一种“乐观”的方式处理,即允许你创建、Alter,但不允许写入数据。

2.MGR的参数

同时在上面提到的测试中,我们也遇到了几个重要参数不同值的不同行为。比如group_replication_unreachable_majority_timeout这个参数,它真正的含义是MGR节点由ONLINE状态进入UNREACHABLE状态后(一般是由于网络抖动、节点异常等引起),等待相应的时间,如果仍保持UNREACHABLE,则将节点置为ERROR状态,即这个参数是UNREACHABLE状态的一个timeout,单位秒。

美团点评基于MGR的CMDB高可用架构搭建之路

(MGR节点的几个状态)

该参数默认值为0,含义是无timeout,即无限等待,这在实际的生产环境中,如发生网络的异常,是个不可接受结果。

以下是我们根据官方的文档,以及实践过程中的一些问题,总结的参数,可作为一个参考:

美团点评基于MGR的CMDB高可用架构搭建之路

3.最终架构

最后我落实了三机房三节点MGR集群,作为高可用方案主体,同时向下扩展了一套主从集群,作为不可挽回问题的灾备。毕竟MGR作为新生儿,可靠性还有待验证,相信不远的将来我们也有足够的信心放弃回滚到主从的方案。

美团点评基于MGR的CMDB高可用架构搭建之路

四、上线历程

美团点评从2018年以来,总共将三个系统迁移上线了MGR,包括流程系统、报表系统以及CMDB。

美团点评基于MGR的CMDB高可用架构搭建之路

五、典型问题

在几个集群上线的过程中,我们也积累了一些问题,其中典型的几个在这里简单回顾一下:

1.大事务

在报表系统上线后,集群出现了一点诡异的状况:在某些时间点,节点不定时会出现UNREACHABLE的状态,严重时直接导致集群选主切换,而在此期间,机房机器网络并没有什么异常。

美团点评基于MGR的CMDB高可用架构搭建之路

这个问题最初困扰了我们一段时间,通过对之前流程系统的对比,我们发现两个集群网卡的流量大小有些区别,且报表系统有比较明显的尖刺:

美团点评基于MGR的CMDB高可用架构搭建之路

从这个分析角度出发,我们查阅文档,发现有参数可以做相关的优化,即group_replication_compression_threshold,含义是事务超过相应大小则在传输前进行压缩处理。下图为参数调整后的对比,由1.5M减少到15K。实际场景中异常状态发生次数确实减少了,但没有根除。

美团点评基于MGR的CMDB高可用架构搭建之路

顺着这个思路我们做了一些测试,定位到了根本问题:大事务。

需要说明的是MGR的大事务有自己的“定义”,它的大事务与网络的传输时间有关,这就解释了为什么我们开启压缩后,节点异常状态次数减少的问题。最后我们通过限制事务的大小的方式,彻底解决了这个问题,同时也在业务逻辑上优化了大事务。以下是两个相关的参数:

美团点评基于MGR的CMDB高可用架构搭建之路

2. 应用HANG死

第二个问题发生在一次节点下线演练的过程中,DBA开始演练操作后,开发同学突然反馈说后台Nginx由于请求积压,机器挂掉了。如下图Nginx可用率:

美团点评基于MGR的CMDB高可用架构搭建之路

此时我们在DBA的慢查询监控中发现一个峰值,时间点基本吻合。下图为慢查询监控:

美团点评基于MGR的CMDB高可用架构搭建之路

由此我们分析了这段时间的慢查询,发现这个SQL我们非常眼熟——MGR查询主节点的语句。正常这个SQL执行时间在毫秒级,故障当时执行了10s,而这个10s与stop group_replication这个操作的耗时基本吻合。

美团点评基于MGR的CMDB高可用架构搭建之路

据此我们做了相应的测试验证了猜测:在MGR节点START和STOP过程中,当前节点的replication_group_member视图的查询全部hang住。这也就是解释了Nginx后台请求堆积造成的宕机。在此之后,我们在程序中查询这个视图时加入了超时的逻辑,解决了这个问题。

3. 机房故障

第三个问题发生在一次实际的机房故障中:CMDB主节点所在机房网络带宽减半,导致CMDB的MGR集群和一套业务主从集群几乎同时发生了切换,MGR的切换时间大概在3s左右,业务基本无感知,只发生部分报错,但业务集群切换发现回填CMDB失败。

究其原因主要是由于切换的逻辑仍然沿用DNS的连接方式,导致切换发生,DNS同步重新指向,而切换的应用程序对DNS新地址的解析迟迟未效。

美团点评基于MGR的CMDB高可用架构搭建之路

通过这次故障,也促使我们将所有核心CMDB访问全部迁移到内部开发的Smart Client端上。

美团点评基于MGR的CMDB高可用架构搭建之路

六、Smart Client

关于Smart Client,它是我们内部开发的一套Python连接API,是基于MySQLdb实现的一套MGR切换自动选主、读写分离的功能。对于熟悉Python访问MySQL的同学上手非常简单。

美团点评基于MGR的CMDB高可用架构搭建之路

七、日常运维

关于MGR的日常运维,实际情况比较省心。

初始化除部分参数区别外,基本与主从集群差异不大。监控方面,我们除了加入系统和MySQL的基础监控外(对MGR兼容良好),还加入了MGR节点状态的监控,即非ONLINE状态的节点全为异常。同时会有同学问,延迟怎么监控?理论上MGR是个最终一致的集群,它内部没有延迟的概念,但我们可以通过监控待执行事务队列中数值,近似看做是一种延迟。

美团点评基于MGR的CMDB高可用架构搭建之路

下图为线上一个集群的“延迟”情况,纵坐标为事务个数:

美团点评基于MGR的CMDB高可用架构搭建之路

同时还有主节点与其他节点的GTID_SET差值也可以作为一定参考。

八、写在最后

通过我们一系列的线上演练,甚至包括部分高峰期的演练,以及一段时间的运行状态观察,MGR确实是一个稳定、可靠的高可用架构。虽然对于写入密集型场景不是非常友好,但相信还是可以为DBA的高可用方案提供新的思路。

参考

  • MGR的要求:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements.html

  • MGR的限制:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-limitations.html

  • 参数配置:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html

  • python工具包:Python MySQL Group Replication 使用

    参考链接:https://km.sankuai.com/page/52289606

  • 转自 美团点评基于MGR的CMDB高可用架构搭建之路 https://www.toutiao.com/i6602060886867706376/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 redmind 进行项目任务管理

一、项目经理 1.1、新建任务(工单) 1.2、查看任务状态 二、团队成员 2.1、查看任务 作为这个团队的成员之一,每天开工第一件事便是进入redmine查看“我的工作台”中自己的任务 2.2、每日反馈任务完成状态 1、每天开始工作时,及时将任务状态从“新…

oracle11g创建表空间大文件,oracle11g创建表空间 sql语法

--oracle 11g创建有限制大小的永久表空间--create tablespace test--datafile F:\app\shan\product\11.2.0\dbhome_1\oradata\test.dbf size 1M--autoextend on next 2M maxsize 1024M;--修改表空间大小:--alter database datafile F:\app\shan\product\11.2.0\dbho…

内存泄漏优化

目录介绍: 1.什么是内存泄漏2.内存泄漏造成什么影响3.内存泄漏检测的工具有哪些4.关于Leakcanary使用介绍5.Leakcanary捕捉常见的内存泄漏及解决办法 5.0.1 错误使用单例造成的内存泄漏5.0.2 错误使用静态变量,导致引用后无法销毁5.0.3 [常见]Handler使用…

redmine更换主题

主题列表:http://www.redmine.org/projects/redmine/wiki/Theme_List 虽然有很多主题,但是很多主题都是要钱的,像这类(上图)没有下载地址的,都是要钱的。 含GitHub的下载地址的,是免费可下载的&…

redmine 邮箱配置(阿里云+windows)

说明 密码是第三方的授权码,不是邮箱密码 需要登录126网页版,在设置里开启 smtp 等第三方服务,设置授权码 阿里云Linux 默认屏蔽25号端口,所以需要开启ssl,和使用 465 端口 重启下 redmind sh /opt/redmine-3.4.6-…

linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...

1、vi是linux系统上经常使用的一个文本编辑器,其有三种模式:命令模式、编辑模式(插入模式)、末行模式。命令模式——>编辑模式:“i a o I A O”linux编辑模式——>命令模式:“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 环境一键安装包 nginx配置thinkphp5

---恢复内容开始--- lnmp1.4 一键安装包 nginx配置thinkphp5 环境:Nginx1.12.1 PHP5.6 Coentos6.8 修改网站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安装与更新

截至2017年3月27日,Redmine-3.3.2-2安装以下的15款插件全部成功并通过测试(下面显示为插件正确文件夹名): easy_wbs redmine_ckeditor 提供所见即所得编辑器 redmine_graphs 提供部分问题图表功能 progressive_projects_list 是…

linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)

前一篇文章分析了Windows slim read/write lock的工作原理。我们知道它的设计相当精妙,于是我们可以借鉴它的思路来设计linux下的读写锁。在这个读写锁的设计上,需要注意的是linux和windows有以下几点区别:(1)windows使用的keyedevent机制需要…

Linux下redmine安装插件报错

报错如下: There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是: redmine不同版本对ruby版本有…

ajax post 提交无法进入controller 请求200

最近写js遇到个问题: 用ajax的post方式给后台提交数据,页面200,但是不进入controller 断点,我以为我post参数不对。 网上查的: 1.说路径不对,但是我通过get方式是可以进入的,路径是没问题的&…

cuda 编译 linux,Linux下安装Tensorflow源码及编译

下载Tensorflow源码git clone https://github.com/tensorflow/tensorflow如果无法下载也可以在github上直接下载tensorflow的打包文件,这样也能编译,但是不能使用git命令可根据需要切换到不同的分支安装bazel输入以下命令echo "deb [archamd64] htt…

testflight进行用户的beta测试

发发发转载于:https://www.cnblogs.com/caimaomao/p/9681483.html

linux限制ping的时间,如何限制Linux命令程序运行的时间

Linux提供了大量的命令,每个命令都是唯一的,并且在特定的情况下使用。Linux的目标是帮助您尽可能地高效工作。Linux命令的一个属性是时间限制。您可以为任何您想要的命令设置时间限制。如果时间过期,命令停止执行。在本教程中,您将…

微软网络工具psping介绍

该工具功能主要包括:ICMP Ping、TCP Ping、延迟测试、带宽测试,而且它是微软出品的下载地址:https://download.sysinternals.com/files/PSTools.ziphttp://technet.microsoft.com/en-us/sysinternals/jj729731解压后把psping.exe丢到C:\Windo…

mac svn

https://formac.informer.com/tortoisesvn

linux服务器虚拟内存设置,修改Linux服务器虚拟内存Swap大小

Linux的Swap相当于Windows的虚拟内存,当物理内存不够的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放出来的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间临时保存到Swap空间…

高级软件工程第一次作业--准备

1) 回想一下你对计算机/软件工程专业的畅想 考研之所以选择计算机专业,是因为本科就是这个专业。不去跨专业,是因为觉得换个专业考,比起那些科班出身的人,考上的机率会更小,也有一部分原因是因为比起计算机…

里程碑事件

里程碑事件:里程碑事件往往是一个时间要求为零的任务,即它并非是一个要实实在在完成的任务,而是一个标志性的事件。 例如,在软件开发项目中的“测试”是一个子任务,“撰写测试报告”也是一个子任务,但“完…

linux无法下载ftp,linux 不能下载怎么办

linux 不能下载怎么办?关于Linux下vsftp匿名用户上传和下载的配置配置要注意三部分,请一一仔细对照:1、vsftpd.conf文件的配置(vi /etc/vsftpd/vsftpd.conf)#允许匿名用户登录FTPanonymous_enableYES#设置匿名用户的登…