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 日常运维: 集群搭建, 异常节点回归, 数据备份/恢复

mysql8.0 Innodb cluster 日常运维: 集群搭建, 异常节点回归, 数据备份/恢复

搭建 MySQL 8.0 InnoDB Cluster