性能评测 | GreatDB VIP PLUGIN方案 VS MySQL InnoDB Cluster高可用方案



前言
最近,我们与许多数据库用户进行了沟通和调研,了解到,目前仍有相当一部分投产的MySQL高可用或故障转移方案,用到了读写分离功能或业务接入VIP(Virtual IP Address)的方式,来屏蔽后端数据库架构。
MySQL中,VIP机制一般借助于2个组件,即结合HaProxy和Keepalived两个软件完成。
HaProxy是一款高性能的负载均衡器,支持TCP/HTTP流量的代理和转发。Keepalived是一个开源软件,它实现了虚拟IP地址的分配和故障转移,而且支持主备模式,能确保高可用性,许多生成环境都采用此方式作为数据库故障切换的高可用方案之一。



随着国产化发展进程加速,一批优秀的国产数据库高可用方案也随之应运而生,万里数据库的核心产品安全数据库GreatDB ,以内置VIP plugin的形式对外提供读写分离和故障转移功能。


安全数据库GreatDB结合客户的众多部署和投产实践,将上述HaProxy+Keepalived 2个软件的能力,结合组复制的paxos协议选主切换机制,以数据库可插拔的plugin形式,内置集成了VIP插件。

用户可通过install plugin greatdb_ha soname 'greatdb_ha.so';实现快速、灵活、便捷的方式对外提供VIP,屏蔽后端数据库的架构复杂性。


另一方面,2017年,MySQL推出MySQL InnoDB Cluster(简称:MIC)高可用架构,在MySQL8.0发版后不断更新迭代,通过轻量化的mysql-router路由组件及mysql-shell管理工具,搭配MySQL的Group Replicaton组复制,形成了配套的高可用方案架构,以此来提供读写分离和自动故障转移能力。


今天,我们就来横向对比一下2种方案在各自性能上的表现,以及适用场景和优缺点。



01/两种高可用架构介绍

1、MySQL Innodb Cluster架构

MySQL Innodb Cluster(简称为MIC)是基于MySQL的group_replication组复制插件,提供自动成员资格管理、容错、自动故障转移等功能。

在MGR组复制基础上扩展了2个组件工具,即mysql-shell和mysql-router。

其中,mysql-shell拓展了整个高可用架构的管理能力,通过mysql-shell的AdminAPI 在 SQL、JavaScript 、Python语言之间快速切换,非常适合脚本编写和自动化部署 MySQL的高可用复制,增加了数据库实例扩展的灵活性。通过使用MySQL Shell的AdminAPI,改进了原始手动配置多个实例之间的存量数据同步,以及节点配置的检查、用户创建、权限分配、插件加载等诸多配置环节。

mysql-router则是提供对业务透明的故障转移及读写分离能力。官方将其定位为轻量级的路由插件,运行在MGR内部,结合mysql-shell创建的mysql_innodb_cluster_metadata库,mysql-router通过获取集群元数据,自动识别MGR内部的primary和secondary节点,通过默认6446 读写、6447只读端口来提供读写分离支持。


 (图片来源:MySQL开源社区8.0产品文档)


架构描述:

MGR 组复制支持单主模式和多主模式,一般MIC使用场景多使用单主模式,即分区primary 主节点和secondary备节点(从属节点),本文主要针对单主模式下组复制性能的测试对比。



2、万里数据库GreatDB Paxos架构

GreatDB VIP Plugin通过虚拟IP地址提供对复制组的访问(单主模式)。

启用插件时,VIP默认绑定组复制中的primary节点网卡。当primary节点手动或自动切换时,VIP随之漂移到其他GreatDB实例上,以保证业务的持续读写能力,从而实现透明的故障转移,并做到性能上接近0损耗的高性能访问,技术上实现高效易用的目标。


(图片来源:GreatDB官方产品架构图简化)


架构描述:

业务侧只需关心对外暴露的VIP地址和原始的组复制PORT,无需关系谁是primary主节点,VIP会自动判断组复制中group_replication_group_seeds对应IP所在的网卡,绑定网卡子口,如网卡为eth0:0 192.168.1.100/24。

同时支持跨网段,前提是VIP和IP路由转发正常(都在网络白名单或有相同网关地址)。



1、测试对象

1)MySQL官方MySQL Innodb Cluster架构

2)万里数据库GreatDB Paxos+VIP 高可用架构

通过sysbench分别压测原生私有交付的组复制架构和增加组件mysql-router、启用VIP插件的情况下,对比两种高可用架构差异带来的性能影响和变化。


使用软件版本:

1、MySQL8.0.32

2、万里数据库GreatDB最新版本

3、压测工具sysbench-master 1.1.0



2、测试方法介绍

• 压测工具:sysbench

• 压测环境:50张table,每张表100w行数据,压测时长不低于5分钟,分别测试16、32、64成倍数增加的性能变化差异。每个并发测试完成后均清理压测数据,重启数据库、清理缓存,重新初始化数据后,执行下一轮并发压测。参数配置:my.cnf

• 数据库:3节点组复制方案

• 主备模式:单主模式

• 数据一致性:均设置为最终一致性


    sysbench oltp_read_write.lua --mysql-user=$username --mysql-password=$pwd --mysql-host=$host --mysql-port=$port --mysql-db=sysbench --threads=16/32/64 --report-interval=1 --tables=50 --table-size=100000 --time=300 run

     


    2、配置MySQL InnoDB Cluster组件mysql-router


    1)MySQL InnoDB Cluster启用mysql-router插件

    首先

    使用mysql-shell(解压之后可直接到mysql-shell/bin下调用mysqlsh),为已经配置好的MGR创建一个集群名字,如下:


      [root@gip bin]# cd root/mysql-shell/bin;./mysqlsh -ugreatdb -p'!QAZ2wsx' -P3311 -h172.17.138.161
      MySQL 172.17.138.161:3311 ssl JS >
      MySQL 172.17.138.161:3311 ssl JS > dba.createCluster('mycluster')
      MySQL 172.17.138.161:3311 ssl JS > dba.getCluster();

      MySQL 172.17.138.161:3311 ssl JS > sql
      Switching to SQL mode... Commands end with ;
      MySQL 172.17.138.161:3311 ssl SQL > show databases;
      +-------------------------------+
      Database |
      +-------------------------------+
      information_schema |
      mysql |
      mysql_innodb_cluster_metadata |
      performance_schema |
      sys |
      sysbench |
      +-------------------------------+
      MySQL 172.17.138.161:3311 ssl JS > q
      Bye!


      3、性能提升

      GreatDB针对优化器的开发增强,支持基于cost的并行查询等能力,相比社区版本MGR,性能提升19.3%左右;


      4、提高运维效率

      可维护性方面,GreatDB开发支持的AWR自动负载信息库、ASH活跃会话历史分析报告,让用户在运行维护方面可追踪性能的变化趋势,增强问题定位和排查的效率。



























      GreatDB Paxos+VIP 方案适用场景

























      1、可用于原始基于MySQL5.7的双主+keepalived或搭配Haproxy等方案架构,故障切换次数和故障恢复代价高的升级替换场景;
      2、可用于借助官方MySQL InnoDB Cluster架构,受性能和业务稳定性困扰的场景,此类场景可考虑升级为GreatDB Paxos+VIP方案;
      3、可用于借助Sqlproxy等实现读写分离,人工维护、读写扩展性受限的业务场景,此类场景可考虑升级GreatDB Paxos+VIP方案,有利于增强可扩展性和读写性能。







      就在本周六,MySQL5.7版本也将迎来其生命周期的终结,GreatDB Paxos+VIP 方案同样可满足希望获得长期维保支持或想平行迁移到企业级商业数据库的企业用户需求。


      此外,如果想寻找第二个有长期社区更新支持的开源版本,可选择万里数据库主导成立的GreatSQL开源社区中的GreatSQL开源数据库,GreatSQL开源数据库亦可同步支持vip plugin高可用方案。



      ●解决方案 | 如何轻松替代开源MySQL?万里数据库一站式解决方案送给你!●干货丨GreatSQL到底行不行?GreatSQL vsMySQL性能测试来了,速围观~●大V前瞻丨紧急提醒!MySQL5.7即将停服…

      关于万里数据库


      北京万里开源软件有限公司(简称“万里数据库”)成立于2000年,是专注于国产自主可控数据库产品研发的国家高新技术企业、国家级专精特新“小巨人”企业,拥有发明专利、软件著作权百余项。


      万里数据库的技术底蕴源自对底层核心代码的掌控,产品始终坚持以“极致稳定、极致性能、极致易用”为目标,经过20余年的研发经验积累,产品在功能、性能、稳定、易用等方面均处于行业领先水平,广泛应用于金融、运营商、能源、政府、交通等行业重要业务系统中的超1000个业务场景,得到了用户和市场的认可与肯定。


      2021年,公司创立GreatSQL开源社区,通过对MySQL技术的优化,目前已成长为国内活跃的自主开源数据库社区。


      极致稳定  极致性能  极致易用