客户端经由过程Galera Load Balancer拜访数据库,提交的每个事务都邑经由过程wsrep API 在所有办事器中履行,要不所有办事器都履行成功,要不就所有都回滚,包管所有办事的数据一致性,并且所有办事器同步及时更新。
wsrep API是一系列应用回调和复制调用库,来实现事务数据库同步写集(writeset)复制以及应用。其重要思惟是在不出现冲突的背景下事务正常履行并持续到commit为止;当客户端提议commit敕令时(此时仍然没有产生真正的commit),所有本领务内对数据库的修改与修改数据行的主键都邑被放入一个写入集(writeset)中,该写入集随后会被复制到其他节点履行,在每个节点上应用主键进行冲突检测断定该写入集是否可以被应用,如不雅出现主键冲突,则个一一个事务会被回滚。
缺点及限制:因为同一个事务须要在集群的多台机械上履行,是以收集传输及并发履行会导致机能上有必定的消费。所有机械上都存储着雷同的数据,全冗余。若一台机械既作为主办事器,又作为备份办事器,出现乐不雅锁导致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高可用在网易的实践
起首是分布式数据库方面的。因为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>现象:
推荐阅读
固然以前写过 若何抓取WEB页面 和 若何大年夜 WEB 页面中提守信息。然则感到照样须要一篇 step by step 的教程,不然没有一个总体的熟悉。不过,没想到这个教程居然会变成一篇译文,在这>>>详细阅读
本文标题:MySQL高可用在网易的最佳应用与实践
地址:http://www.17bianji.com/lsqh/35128.html
1/2 1