加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

网易资深运维工程师潘威:MySQL高可用在网易的最佳应用与实践

发布时间:2021-01-19 22:07:39 所属栏目:电商 来源:网络整理
导读:《网易资深运维工程师潘威:MySQL高可用在网易的最佳应用与实践》要点: 本文介绍了网易资深运维工程师潘威:MySQL高可用在网易的最佳应用与实践,希望对您有用。如果有疑问,可以联系我们。 讲师介绍: 潘威 网易资深系统运维工程师 现任职于网易,负责网易对

缺点及限制:由于同一个事务需要在集群的多台机器上执行,因此网络传输及并发执行会导致性能上有一定的消耗.所有机器上都存储着相同的数据,全冗余.若一台机器既作为主服务器,又作为备份服务器,出现乐观锁导致rollback的概率会增大,编写程序时要小心.不支持的SQL:LOCK / UNLOCK TABLES / GET_LOCK(),RELEASE_LOCK()…不支持XA Transaction.目前基于Galera Cluster的实现方案有三种:Galera Cluster for MySQL、Percona XtraDB Cluster、MariaDB Galera Cluster.

6、MySQL Group Replication

MySQL Group Replication是16年 MySQL 5.7官方推出的多节点数据同步解决方案,它也支持多节点写和强一致性.在架构上它与Galera相似,但是多节点事务一致性提交是基于paxos来实现的,性能更高.可以预见MySQL Group Replication,这类基于强一致性协议的MySQL数据同步方案,是MySQL高可用的下一个研究热点,目前腾讯、阿里均有类似的方案推出.

MySQL Group Replication中的Replication-group就是一组节点,每个节点都可以独立执行事务,读写事务会在group内的其它节点进行协调之后再commit.因此,当一个事务准备提交时,会自动在group内进行原子性的广播,告知其他节点变更了什么内容/执行了什么事务.基于Paxos协议使得事务在每一个节点上都保持着同样顺序执行,这意味着每一个节点都以同样的顺序,接收到了同样的事务日志,所以每一个节点以同样的顺序重演了这些事务日志,最终整个group保持了完全一致的状态.

MySQL Group Replication仅支持InnoDB表,并且每张表一定要有一个主键,用于做冲突检测;必须打开GTID特性,二进制日志格式必须设置为ROW.这是使用MGR的一些限制.

二、MySQL高可用在网易的实践

1、分布式数据库高可用实践

首先是分布式数据库方面的.由于OLTP的业务特性和业务量大的特点,分布式数据库在网易有广泛的应用,下面我们简单介绍下网易的分布式数据库架构以及重点介绍下其高可用解决方案.

DDB的组织架构如上图所示,DBN(MySQL)负责实际的数据存储与读写提供.管理服务器负责数据库表、用户权限、数据分布路由的维护以及DBN状态的监控与管理.除此之外DDB最核心的模块是被称之为DBI的数据库驱动,它是一个类jdbc驱动,一方面可以与管理服务器交互,获取分布式数据库的表结构与分布路由;另一方面可以解析用户发过来的SQL语句,转换成适用于分布式场景的sql直接发送给DBN节点,并且将DBN返回的结果进行聚合或者排序并最终返回给应用程序.正是由于DBN这一系列的改写与聚合动作,才能使得应用程序可以像访问一个简单的关系型数据库那样去访问DDB这样一个分布式数据库.

管理服务器的高可用主要是基于分离持久化信息到sysdb中实现的,也就是管理服务器本身是一个无状态的服务,可以部署多个,短暂的故障也不会影响DBI到DBN节点的正常数据读取.而sysdb本身是个MySQL节点,它的高可用可以用经典的MySQL高可用方案解决.

DBN的高可用也可以使用MySQL原生的高可用方式,比如基于VIP的高可用.但是使用分布式数据库做高可用的优势就是有一个管理服务器的角色维护数据路由,因此只要可以根据当前的节点的状态更新数据路由就可以做到一个自动的failover的过程.具体到DDB这个场景,我们引入了一个DDBSwitch高可用切换工具,这个工具可以监控DBN状态,维护DBN主从关系.当主DBN存在异常时,DDBSwitch工具会检测到节点异常,并且触发管理服务器更新DBN列表,管理服务器会通知所有客户端的DBI更新本地的DBN列表,切换缓存中的路由,从而完成了一次完整的切换.除了最基本的故障切换,DDBSwitch还可以通过逐步放开DBN连接池的方式控制新切入节点的流量,防止新上线的节点由于之前堆积的请求而瞬间被压垮.

目前网易杭州这边的项目,绝大多数的分布式数据库都是使用的DDB,因此有比较多的线上实践,事实也证明DDB这套高可用架构是稳定可靠的.目前像网易云的项目,比如视频云、云信后端依赖的数据库都是DDB,可以做到数据库相关模块故障异常在30s内自动恢复.在减少人工运维成本的前提下,提高系统整体可靠性.

除了分布式数据库,网易也有少量的单节点MySQL.出于成本和易用性的考虑,我们没有选择MHA方案,而是配合keepalive使用自定义的脚步进行故障自切换与尽可能的保障可靠性.首先keepalive本身是一个多进程的程序,可靠性和成熟度很高,不止可以做无状态的nginx的高可用代理,还能通过配合第三方的脚本来做类似MySQL这种有状态服务的高可用.

2、基于keepalive的MySQL高可用改造

网易的这套keepalive的MySQL高可用方案采用的也是经典的MySQL主主复制的架构,然后配合自研的切换脚本进行自定义故障判定以及升主的一致性检查功能.一次完整的故障切换包含如下几个步骤:首先利用Master上的keepalive定时调用故障检查check脚本,发现异常后进行3次重试,重试后MySQL依然无法正常服务则触发切换.切换不是采用keepalive传统的降低权值的方式进行的,而是直接stop keepalive来触发slave抢占VIP,升级为主.升级为主后slave keepalive会调用升主检查脚本,判定relay log应用完成后才放开写,关闭read only正式提供服务.

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读