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

news2024/11/17 13:36:47

前言

最近,我们与许多数据库用户进行了沟通和调研,了解到,目前仍有相当一部分投产的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路由转发正常(都在网络白名单或有相同网关地址)。

02/测试环境和测试方法

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

主机环境

测试主机采用3台16c 16g 200g 的KVM主机,操作系统均为CentOS 8.5 。安装部署使用GreatADM数据库管理平台,统一图形化安装MySQL8.0.32、GreatDB 最新版本组复制架构。

针对MIC的2个插件mysql-router和mysql-shell在GreatADM配置好的组复制基础上,手动配置mysql-router并初始化,启动插件,mysql-router做辅助MGR命令管理。

03/GreatADM 安装部署Paxos(mgr)高可用架构

1、部署2套数据库
 

此处请参考GreatSQL社区往期分享【探索MGR图形化部署】,点击查看文章原文。

图片

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();<Cluster:mycluster> MySQL  172.17.138.161:3311 ssl  JS > \sqlSwitching 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 > \qBye!

其次

开始初始化mysql-router,采用最直接的bootstrap方式引导,会自动生成mysqlrouter的目录和conf配置文件,如下。

本次在mgr的primary主节点配置1个mysql-router即可:

[root@gip mysql-router]# cd /root/mysql-router/bin;./mysqlrouter --bootstrap greatdb@localhost:3311 --directory /root/mysqlrouter --conf-use-sockets --user=root --conf-bind-address=172.17.138.161 --forcePlease enter MySQL password for greatdb: Bootstrapping MySQL Router instance at '/root/mysqlrouter'...Creating account(s) (only those that are needed, if any)Verifying account (using it to run SQL queries that would be run by Router)Storing account in keyringAdjusting permissions of generated filesCreating configuration /root/mysqlrouter/mysqlrouter.conf

MySQL Router configured for the InnoDB Cluster 'mycluster'After this MySQL Router has been started with the generated configuration    $ ./mysqlrouter -c /root/mysqlrouter/mysqlrouter.confInnoDB Cluster 'mycluster' can be reached by connecting to:MySQL Classic protocolRead/Write Connections: localhost:6446, /root/mysqlrouter/mysql.sock  #router的读写端口Read/Only Connections:  localhost:6447, /root/mysqlrouter/mysqlro.sock #router的只读端口MySQL X protocol

Read/Write Connections: localhost:6448, /root/mysqlrouter/mysqlx.sockRead/Only Connections:  localhost:6449, /root/mysqlrouter/mysqlxro.sock

最后

启动mysql-router即可

[root@gip bin]# [root@gip mysqlrouter]# pwd/root/mysqlrouter[root@gip mysqlrouter]# lsdata  log  mysqlrouter.conf  mysqlrouter.key  run  start.sh  stop.sh[root@gip mysqlrouter]# sh start.sh [root@gip mysqlrouter]# PID 307283 written to '/root/mysqlrouter/mysqlrouter.pid'stopping to log to the console. Continuing to log to filelog[root@gip mysqlrouter]# mysql -ugreatdb -p'!QAZ2wsx' -h172.17.138.161 -P6446   #测试通过6446连接MGR

3、GreatDB 启用VIP PLUGIN 配置VIP

 通过拓扑界面选择【配置数据库VIP】

图片

填写【VIP地址配置】--【预检查】,检查对应的VIP是否被占用,以及对应配置vip所需要的操作系统权限和运行使用的lib库正常加载。

图片

【提交】之后,数据库会在my.cnf配置文件中添加greatdb_ha.so 插件,完成VIP的参数变量加载。此阶段需要重启数据库实例,请勿在业务高峰或有业务运行时配置VIP,否则可能导致业务中断。

重启完成之后,拓扑结构如下:

图片

【登录数据库】:查看数据库实例的VIP变量配置信息,3个数据库实例配置相同,自动识别要绑定的网卡名称。

图片

通过GreatADM图形化界面配置,相对简单高效,屏蔽了参数配置和lib加载的复杂性。

04/执行对比测试

1、MySQL MGR启用和不启用mysql-router性能耗损测试

数据库版本:MySQL Community Server 8.0.32

mysql-shell:ver 8.0.34 for Linux on x86_64

mysql-router: ver 8.0.34 for Linux on x86_64

 

图片

压测命令:

sysbench  oltp_read_write.lua  \ #使用 oltp_read_write.lua  混合读写脚本--mysql-user=username \ --mysql-password='pwd' \--mysql-host=172.17.138.161 \ --mysql-port=3311  \   #MGR端口3311 ,MIC mysql-router为6446  --mysql-db=sysbench \--threads=64 \    #分别测试16、32、64并发--report-interval=1 \--tables=50 \     --table-size=100000  \--time=300   run

测试结果:

图片

性能曲线对比:

图片

结论:实际MGR单主模式下,通过mysql-router压测,在16、32、64 并发下,性能相对于直接压测primary节点分别下降了-14.2%、-24.7%、-17.3%,3个并发3次的平均性能损耗在18.7%。

2、GreatDB 启用和未启用VIP Plugin性能耗损测试

数据库版本:Server version:8.0.32-23-GreatDB最新版本

图片

压测命令:

sysbench  oltp_read_write.lua  \ #使用 oltp_read_write.lua  混合读写脚本--mysql-user=username \ --mysql-password='pwd' \--mysql-host=172.17.138.161 \   #vip地址 172.17.138.100 --mysql-port=3322  \   #数据库访问端口3322,vip和物理ip访问相同端口  --mysql-db=sysbench \--threads=64 \    #分别测试16、32、64并发--report-interval=1 \--tables=50 \     --table-size=100000  \--time=300   run

测试结果:

图片

性能曲线对比:

图片

结论:实际GreatDB paxos架构,单主模式下,相对于通过内置VIP plugin配置的VIP压测,直接压测primary节点的性能在16、32、64 并发下分别下降-2%、+0.9%、-1.4%,3个并发下3次性能耗损平均为0.83%。

05/综合对比

图片

图片

结果横向对比:通过对比GreatDB最新版本和原始社区MySQL8.0.32版本,在相同的3台配置主机上,使用相同my.cnf参数情况下,使用50张10w行表数据分别进行16、32、64并发的读写压力测试,GreatDB的paxos优化改进方案较原生MySQL MGR的性能分别提升12.6%、18.4%、26.8%,3个并发3次测试,平均性能提升19.3%左右。

图片

结果横向对比:GreatDB最新版本提供企业版本的VIP故障转移能力,相较于MySQL Innodb Cluster在16、32、64并发下,性能提升分别为26.1%、49%、46.7%,3个并发3次测试,平均性能提升约40.6%。

06/总结

根据以上对比分析,我们了解到两者在组复制方案性能上的差异。

2个方案均基于group_replication组复制插件,建立多个数据副本,通过paxos协议实现高可用的选主和故障切换。

虽然mysql-router定位尽可能简单、轻量化,但增加mysql-router的路由转发后,基于端口的读写路由和基于权重轮询的负载均衡,在性能上表现不尽人意。

而GreatDB 采用集成的greatdb_ha.so插件化支持,通过内置plugin方式,实现故障切换对外无感知,配置简单,且性能消耗相对于mysql-router来说,TPS性能提升近40%,并且可以灵活地install plugin和uninstall plugin,做到了真正的高效易用。

GreatDB Paxos+VIP 高可用架构方案特点

1、兼容性更强

GreatDB 数据库内置集成plugin,不需要额外组件,数据库自身插件兼容性更强;

2、架构稳定性更好

结合GreatDB对group_replication的网络层优化,事务认证流控代码层改进,架构稳定性更好;

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高可用方案。

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

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

相关文章

Crypto(4)NewStarCTF 2023 week2 Crypto Rotate Xor

题目代码: # 导入所需的库和从secret模块加载"flag" from secret import flag from os import urandom from pwn import xor from Cryptodome.Util.number import *# 生成两个随机的 64 位素数&#xff0c;分别存储在变量 k1 和 k2 中 k1 getPrime(64) k2 getPrim…

科普丨语音芯片烧录流程概述

语音芯片的烧录是将特定的固件或软件加载到芯片中&#xff0c;以使其能够执行特定的语音处理功能。以下是一般的语音芯片烧录过程&#xff1a; 1. 准备固件或软件&#xff1a;开发人员需要编写或获取特定的固件或软件&#xff0c;这些固件或软件包含了语音处理算法和功能的代码…

Lake Formation 和 IAM 之间的区别与联系

IAM 和 Lake Formation 都是 AWS 上的权限管理服务,且默认都是自动开启并生效的,只是如果你没有特别配置过它们,可能感觉不到它们的存在,特别是Lake Formation(后文简写为 LF),通常情况下都是“透明”的,虽然但它确实在每次请求时进行了权限检查。本文会详细介绍一下两…

22款奔驰S400L升级原厂360全景影像 倒车更加的安全

您是否经历过这种场面呢&#xff1f; 停车位&#xff0c;狭窄障碍停车困难 避免盲区&#xff0c;倒车盲区危及生命安全 狭窄路段&#xff0c;无法判断是否安全通过 视角盲区&#xff0c;小孩站在视野盲区看不到&#xff0c;Xjh15863 360度无缝3D全车可见&#xff0c;解决各…

手撸大文件上传:实现切片上传,断点上传和文件秒传的功能。

一、前提说明 此文章主要讲述后端服务代码和前后端实现思路部分&#xff0c;不涉及前端代码。 二、应用场景 上传视频等大文件的时候&#xff0c;调用服务器的上传接口&#xff0c;可能出现因为文件过大&#xff0c;连接时间超时导致的上传失败&#xff0c;如果文件太大了&…

如何修复Python中的缩进错误?

目录 缩进的概念和规则 缩进错误的类型 &#xff08;1&#xff09;缩进量错误 &#xff08;2&#xff09;缩进范围错误 修复缩进错误的方法 &#xff08;1&#xff09;检查代码块的层次结构 &#xff08;2&#xff09;统一使用空格或制表符 &#xff08;3&#xff09;使…

java三层架构/表现层-业务层-持久层

三层架构 什么是 Java 三层架构 三层架构是指&#xff1a;视图层view&#xff08;表现层&#xff09;&#xff0c;服务层service&#xff08;业务逻辑层&#xff09;&#xff0c;持久层Dao&#xff08;数据访问层&#xff09;&#xff0c; Java的三层架构是指将Java程序分为三…

公众号留言功能卖多少钱?报价多少?

为什么公众号没有留言功能&#xff1f;2018年2月12日之后直到现在&#xff0c;新注册公众号的运营者会发现一个问题&#xff1a;无论是个人还是企业的公众号&#xff0c;在后台都找不到留言功能了。这对公众号来说绝对是一个极差的体验&#xff0c;少了一个这么重要的功能&…

Vue2基础知识(二) 计算属性/侦听器/生命周期

&#x1f48c; 所属专栏&#xff1a;【Vue2】&#x1f600; 作 者&#xff1a;长安不及十里&#x1f4bb;工作&#xff1a;目前从事电力行业开发&#x1f308;目标&#xff1a;全栈开发&#x1f680; 个人简介&#xff1a;一个正在努力学技术的Java工程师&#xff0c;专注基础和…

vue记住密码

<div class"checkbox-login"><input type"checkbox" id"defaults" v-model"loginForm.rememberMe" /><label class"label" for"defaults">记住密码</label></div> .checkbox-logi…

RPA的尽头是超自动化?

超自动化在经过数年的发酵期后&#xff0c;已从一个科技概念崛起为市值近千亿元的新赛道&#xff0c;包括各大互联网巨头、科技公司都纷纷围绕超自动化进行战略布局。 一方面&#xff0c;是行业巨头选择纷纷跻身超自动化新赛道&#xff0c;另一方面&#xff0c;RPA行业的领军企…

邯郸学院软件学院软件工程专业教师参加“火焰杯”软件测试颁奖典礼

近日&#xff0c;全国第三届“火焰杯”软件测试河北赛区颁奖典礼在河北工程技术学院举行。我院软件工程教研室主任张颖、教师王金如受邀参与此次颁奖典礼。王金如老师获得大赛优秀指导教师二等奖&#xff0c;软件学院荣获优秀组织单位奖。 赛事开始之际&#xff0c;学院就积极…

如何安装nvm管理node版本

如果已经有node可以先卸载&#xff08;也可以不卸载&#xff0c;安装nvm的时候会有提示&#xff0c;可以管理现有的node&#xff09; 一、在控制面板卸载程序中卸载现有的node 二、下载nvm并进行安装 nvm官网地址&#xff1a;nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm…

JMH:让你的Java程序性能翻倍的神器

大家好&#xff01;今天我要向大家详细介绍JMH&#xff08;Java Microbenchmark Harness&#xff09;&#xff0c;这个被誉为Java性能测试的利器。无论你是想优化现有的Java代码还是开发新的项目&#xff0c;JMH都能够帮助你准确、可靠地测量和分析代码的性能&#xff0c;让我们…

复制交易为什么用经纪商信号?anzo capital昂首资本3点理由心服口服

为什么那么多成功的交易者喜欢复制经纪商的信号进行交易呢&#xff1f;anzo capital昂首资本认为这种模式具有以下优势&#xff1a; 首先&#xff0c;复制信号是免费的&#xff0c;投资者无需支付任何费用即可享受到信号提供商的交易策略。 其次&#xff0c;交易员的排名是透…

双指针——移动零

一&#xff0c;题目要求&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0…

零代码编程:用ChatGPT下载lexfridman的所有播客音频和文本

莱克斯弗里德曼&#xff08;Lex Fridman&#xff09;&#xff0c;男&#xff0c;麻省理工学院&#xff08;MIT&#xff09;研究科学家兼播客节目主持人&#xff0c;是一位俄罗斯裔美国计算机科学家。2014年&#xff0c;弗里德曼加入谷歌&#xff0c;但在6个月后离开了公司。201…

苹果电脑如何修改文件创建时间

如果您想修改 Mac 上的文件创建时间&#xff0c;可以采用几种不同的方法。您可以使用 Finder 修改文件创建时间&#xff0c;也可以使用终端修改文件创建时间。当然&#xff0c;您还可以使用第三方应用软件进行修改文件创建时间。 小编比较懒&#xff0c;不喜欢太麻烦的操作&am…

苹果手机怎么隐藏照片?(详细图文教程)

我们的手机相册中可能会保存一些与个人隐私相关的照片&#xff0c;比如&#xff1a;银行卡、身份证、护照等私人信息。这些照片如果不进行加密处理的话&#xff0c;会很容易泄露出去。 在别人使用您的手机时&#xff0c;如果您不想这些隐私照片被人看到该怎么办呢&#xff1f;…

Java基础练习(矩阵的加减乘除运算)

简介 对于有了解&#xff0c;但是了解不深的同学&#xff0c;学习Java总是感觉一看就会&#xff0c;一些就废。往往需要一些实操练习&#xff0c;来夯实我们的学习结果。九九乘法表和计算器都是在编程学习领域比较经典的案例。本文为大家讲解一下两个基础实操&#xff0c;熟悉一…