Mysql8 InnoDB Cluster Shell Router HA配置图解
Posted ShenLiang2025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql8 InnoDB Cluster Shell Router HA配置图解相关的知识,希望对你有一定的参考价值。
mysql8 InnoDB集群配置图解
声明与简介
本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。本文主要介绍mysql InnoDB Cluster(集群)的配置及操作。
注: 1 当前已经在CentOS8里安装配置单主MGR集群,详见 Mysql 8 MGR集群单主配置图解 、 Mysql8 MGR集群操作图解
2 当前各节点内mysql版本是8.0.23,其中host_128是单主、host_129、Host_130是从节点。
3 当前安装方式是RPM离线包。
官方介绍
- MySQL InnoDB Cluster为MySQL提供了完整的高可用性解决方案。
- MySQL Shell的AdminAPI可以轻松地配置和管理一组至少三个MySQL服务器实例,以充当InnoDB集群。每个数据库实例都运行组复制,这通过内置故障转移提供一个复制 InnoDB Clusters数据的方法。有了AdminAPI,客户端将不在与InnoDB群集直接交互。
- MySQL Router可以根据之前的部署自动配置, 可以协助客户端程序跟数据库服务实例无感连接,在集群内某个实例掉线时集群会自动重新配置。
- 在单主模式下,InnoDB集群仅有一个读写服务器实例(即单主节点)。多个从节点是单主的副本。如果主发生故障,则从节点会选举一个作为单主。MySQL Router会检测到这种变化并将客户端应用程序转发到新的单主上。高级用户还可以将集群配置配置成多主模式。
个人理解
- MySQL InnoDB Cluster是建立在group repalication基础之上的高可用方案,其中MGR是基础。
- Mysql shell作为客户端提供对集群的管理和访问,支持JS、Python、SQL三种方式。可谓新一代mysql client。
- Mysql Router主要提供对集群的检测和自动配置以及访问端口的映射。
- MySQL InnoDB Cluster的HA方案有三剑客MySQL MGR、MySQL SHELL、MySQL Router构成。
InnoDB集群工作流程
MySQL InnoDB Cluster Workflow:
下载安装Mysql Shell
下载并安装Mysql Shell,这里采用离线rpm的方式,免安装(解压配置环境变量)方式,后文会有提及。
下载Mysql Shell
Step 1 下载安装Mysql Shell
https://dev.mysql.com/downloads/shell/ 里找到 Archives(归档)按钮下载Mysql Shell 8.0.23
Step 2 :选择软件版本、操作系统、操作系统版本
注:绿色(免安装)版可下载gz文件如 mysql-shell-8.0.23-linux-glibc2.12-x86-64bit.tar.gz,见下例:
安装Mysql Shell
此步骤在集群的3台主机上都要操作。
Step 1 通过SSH客户端重新上传Mysql Shell rpm包。
Step 2:切换到上传后的目录准备安装
#切换到rpm包目录
cd /root/softwares/mysql/
Step 3:通过rpm方式离线安装
# 安装mysql-shell
rpm -ivh mysql-shell-8.0.23-1.el8.x86_64.rpm
注:如果不知道Mysql Shell目录行的位置,可以通过 rpm的ql参数查询:
#查询rpm包的安装路径
rpm -ql mysql-shell-8.0.23-1.el8.x86_64
Step 4:查看mysql-shell版本
# 查看mysql shell的版本,结果见如下注释部分
mysqlsh –V
#mysqlsh Ver 8.0.23 for Linux on x86_64 - for MySQL 8.0.23 (MySQL Community Server (GPL))
Step 5:分发到其它节点,重复Step1到Step4,这里仅演示分发。
# SCP分发到从节点,并以上述步骤安装
scp -r mysql-shell-8.0.23-1.el8.x86_64.rpm root@host_129:/root/softwares/mysql/
使用Mysql Shell配置集群
Step 1:Mysql shell连入单主节点
# 通过mysqlsh进入本机数据库
mysqlsh -uroot -proot1234
Step 2:创建Innodb集群,这里adoptFromGR即以适应当前group replication方式加入集群。
// 创建集群
dba.createCluster('testInnodbCluster', {adoptFromGR: true});
注:这里mysql的root用户访问主机权限(比如'%')需要打开,如果仅能访问localhost则命令为报错。详见文末的问题章节。
Step 3:查看集群状态
//查看集群状态
dba.getCluster("testInnodbCluster").status()
Step 4:生成Innodb Cluster集群管理员,单独管理集群而不再以root方式。
//通过root用户登录后指定新的集群管理员,手动输入用户密码。
dba.getCluster("testInnodbCluster").setupAdminAccount('icadmin');
注:icadmin用户密码是icadmin123
下载安装mysql router
下载mysql router
Step 1 下载安装Mysql Router
https://dev.mysql.com/downloads/router/ 里找到 Archives(归档)按钮下载Mysql Router 8.0.23
Step 2 :选择软件版本、操作系统、操作系统版本
安装mysql router
Step 1 通过SSH客户端重新上传Mysql Shell rpm包。
Step 2 集群里单主节点安装mysql router。
#切换到rpm包目录
cd /root/softwares/mysql/
#rpm 安装mysql router
rpm -ivh mysql-router-community-8.0.23-1.el8.x86_64.rpm
Step 3 查看mysql router版本
#查看mysql router版本
mysqlrouter -V
配置启动mysql router
Step 1 :初始化mysql router,这里配置文件地址为/data/mysqlrouter,可自行修改。conf-bind-address可选集群内其它节点,当前选择是单主节点。
#初始化mysqlrouter
mysqlrouter --bootstrap root@localhost:3306 --directory /data/mysqlrouter --conf-use-sockets --user=mysql --conf-bind-address=192.168.111.128
Step 2:查看router目录及配置信息
#切换到mysqlrouter配置目录
cd /data/mysqlrouter
tree .
#查看router配置信息
more mysqlrouter.conf
注:不难发现单主映射端口为6446,从节点端口为6447.
Step 3: 启动mysql router
#启动mysqlrouter(以指定配置文件的方式)并查看mysqlrouter进程
mysqlrouter -c /data/mysqlrouter/mysqlrouter.conf
ps –ef | grep mysqlrouter
Step 4 其它节点均安装mysql router(选做,当前环境仅安装在单主节点)
客户端访问集群
访问单主节点(RW)
#通过绑定地址和映射的端口访问集群里可RW的节点
mysql -uicadmin -p -h 192.168.111.128 -P 6446
# 执行查看主机和端口号SQL命令
# select @@hostname,@@port;
# exit;
访问从节点(RO)
这里模拟两次访问,同样的客户端命令,mysql router可能会转发不到不同的从节点上。
#通过绑定地址和映射的端口访问集群里可RO的节点
# 这里模拟两次访问,对应到两个从节点。
mysql -uicadmin -p -h 192.168.111.128 -P 6447;
# 执行查看主机和端口号SQL命令
# select @@hostname,@@port;
# exit;
mysql -uicadmin -p -h 192.168.111.128 -P 6447;
#select @@hostname,@@port;
#exit;
可见mysql router会根据内部算法(如Round-Robin)选举某个从节点接受客户端的访问。是不是有点像HAPRoxy?
问题
Issue 1: mysqlsh直连,不加任何参数报错。
解决方法:msqlsh需要以某个用户连接进入。
Issue 2: 集群名参数错误
解决方法:集群名只能以字符、数字和下划线“_”,其它符号如空格属非法。
Issue 3:当前管理用户root访问从节点受限,当前虚拟机内mysql root用户不能以IP方式访问自己和从节点。
解决方法: 在组复制的单主节点上创建个集群管理员用户root或者更新root的host限制为%。
-- Way 1:
create user 'root'@'%' identified by 'root1234';
grant all on *.* to 'root'@'%';
flush privileges
/*
注:此时会有两个root用户,但访问的host不一样,一个是localhost,一个是无限制。可用Way 2直接更新host为‘%’(无限制)。
*/
-- Way 2:
use mysql
update user set host = '%' where user = 'root';
注:该操作仅需要在单主上执行,其它节点会自动同步。
以上是关于Mysql8 InnoDB Cluster Shell Router HA配置图解的主要内容,如果未能解决你的问题,请参考以下文章
docker 部署mysql8搭建innodb_cluster
Mysql8 InnoDB Cluster Shell Router HA配置图解
mysql8.0 Innodb cluster 日常运维: 集群搭建, 异常节点回归, 数据备份/恢复
mysql8.0 Innodb cluster 日常运维: 集群搭建, 异常节点回归, 数据备份/恢复