您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

一分钟搭建MySQL InnoDB Cluster高可用集群

时间:2023-03-29 14:23:58  来源:今日头条  作者:spbdev

1、为什么需要集群

单台数据库服务器存在并发能力低、存在单点故障风险等局限,集群能够很好的通过多台服务器的协作,实现互为主备、高可用/故障转移、负载均衡、读写分离等特性。

MySQL InnoDB Cluster集群基于MGR(MySQL Group Replication,MySQL组复制)技术,支持单主(Single-Primary)和多主(Multi-Primary)两种模式,且可以随时切换。集群中只有主节点可以读写,从节点只读,所以单主模式适合做读写分离;多主模式因为每个节点都是主节点,所以只要做负载均衡就可以了。

2、快速搭建InnoDB Cluster集群

2.1、预备知识

配置InnoDB Cluster需要借助工具MySQL Shell,主要涉及Shell的两个对象:dba和cluster,可以通过以下语句获取帮助:

h dba h cluster cluster.help(<方法名>) //要先var cluster=dba.getCluster([clusterName]);

2.2、搭建集群

操作系统选择ubuntu server22.04LTS,用其他linux系统请自行转换安装命令。

# 下载安装mysql server,以下命令在每台服务器执行 sudo apt install -y mysql-server # 修改bind_address为0.0.0.0或本机IP;修改server_id值,每个节点唯一即可 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # 添加以下3行配置 binlog_transaction_dependency_tracking = WRITESET enforce_gtid_consistency = ON gtid_mode = ON # 重启生效 sudo systemctl restart mysql # 下载安装mysql-shell sudo wget -4 --no-check-certificate https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell_8.0.32-1ubuntu22.04_amd64.deb sudo dpkg -i mysql-shell_8.0.32-1ubuntu22.04_amd64.deb # 启动mysql shell,注意-S参数默认值是/var/lib/mysql/mysql.sock,文件不存在 sudo mysqlsh --mysql -u icadmin -S /var/run/mysqld/mysqld.sock # 检查数据库是否已为InnoDB Cluster进行了必要的配置,包括账户 dba.configureInstance() # 按交互提示,选Create a new admin account,创建账户(icadmin密码icadmin123!) # 退出,并用刚刚创建的账户icadmin重新登录mysqlsh quit sudo mysqlsh --mysql -u icadmin -S /var/run/mysqld/mysqld.sock # 开启配置持久化 dba.configureLocalInstance() # 以下命令在主节点执行(任选一台作为主节点)即可,其它节点不执行 # 创建集群。如果退出mysqlsh重登录,可以var cluster = dba.getCluster('testCluster') var cluster = dba.createCluster('testCluster') # 添加其它节点,例如mysql2、mysql3,注意必须在已加入(而非待加入)集群的节点执行 cluster.addInstance('icadmin@mysql2') cluster.addInstance('icadmin@mysql3') # 查看集群状态 cluster.status() # 查看指定节点的状态 cluster.checkInstanceState('icadmin@mysql3')

完成以上操作,集群就搭建起来了,这是一个单主集群,可以在主节点创建数据库、表、插入数据,在从节点查看是否同步过来了,验证效果。

2.3、单主和多主模式切换

要切换单主和多主模式也很简单,通过mysql shell一行命令就可以切换:

# 切换集群到Multi-Primary模式 Cluster.switchToMultiPrimaryMode() # 切换集群到Single-Primary模式,[instance]参数可选,例如:'icadmin@mysql2' Cluster.switchToSinglePrimaryMode([instance])

2.4、集群管理

常用的管理功能还包括移除节点、节点重新加入集群、切换主节点、解散集群等,如下:

# 将集群节点从集群移除。Instance格式为<user>@<host>[:<port>],例如icadmin@mysql3 Cluster.removeInstance(<instance>) # 节点重新加入集群 Cluster.rejoinInstance(<instance>) # 切换主节点 Cluster. setPrimaryInstance(instance[, options]) # 切换集群到Multi-Primary模式 Cluster.switchToMultiPrimaryMode() # 切换集群到Single-Primary模式 Cluster.switchToSinglePrimaryMode([instance]) # 解散集群 Cluster.dissolve()

2.5、高可用和负载均衡

单主模式

可以配合MySQL Router实现高可用和负载均衡,MySQL Router相当于一个透明代理,客户端访问MySQL Router,由MySQL Router将请求分流到不同服务器节点实现负载均衡;如果某节点故障,MySQL Router会自动将请求分流到其它可用节点,实现故障转移。

具体配置和使用这里就不详述了。

多主模式

多主模式每个节点都可以读写,所以代理就有很多选择了,比如MySQL Router、四层反向代理(LVS、Nginx等),这里也不多讲了。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  Search: MySQL  点击:(6)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  Search: MySQL  点击:(11)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  Search: MySQL  点击:(10)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  Search: MySQL  点击:(24)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10  Search: MySQL  点击:(6)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  Search: MySQL  点击:(28)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  Search: MySQL  点击:(46)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  Search: MySQL  点击:(53)  评论:(0)  加入收藏
为什么高性能场景选用Postgres SQL 而不是 MySQL
一、 数据库简介 TLDR;1.1 MySQL MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP...【详细内容】
2024-02-19  Search: MySQL  点击:(38)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: MySQL  点击:(54)  评论:(0)  加入收藏
▌简易百科推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  爱可生开源社区    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  爱可生开源社区  微信公众号  Tags:MySQL   点击:(11)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  MySQL学习  微信公众号  Tags:MySQL   点击:(10)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  字节跳动技术团队    Tags:ByteHouse   点击:(24)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10    dbaplus社群  Tags:MySQL   点击:(6)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  转转技术  微信公众号  Tags:MySQL   点击:(28)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  数据库干货铺  微信公众号  Tags:MySQL   点击:(46)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  编程技术汇    Tags:MySQL   点击:(53)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  数据库干货铺  微信公众号  Tags:MySQL   点击:(54)  评论:(0)  加入收藏
mysql索引失效的场景
MySQL中索引失效是指数据库查询时无法有效利用索引,这可能导致查询性能显著下降。以下是一些常见的MySQL索引失效的场景:1.使用非前导列进行查询: 假设有一个复合索引 (A, B)。...【详细内容】
2024-01-15  小王爱编程  今日头条  Tags:mysql索引   点击:(85)  评论:(0)  加入收藏
站内最新
站内热门
站内头条