当前位置: 首页 > news >正文

MySQL InnoDB Cluster 高可用集群部署与应用实践(下)

MySQL InnoDB Cluster 高可用集群部署与应用实践(上)-CSDN博客https://blog.csdn.net/xiaochenXIHUA/article/details/153044212?spm=1001.2014.3001.5501


一、安装部署MySQL Router并测试

 1.1、安装与配置MySQL Router

MySQL :: MySQL Router 8.0https://dev.mysql.com/doc/mysql-router/8.0/en/

#安装与配置MySQL Router路由的实战流程(需要在每个mysql服务器上都安装)#1-下载mysql router的二进制安装包到/data并解压到/usr/local/mysqlrouter目录下修改名称为mysql-router-8.4.6
wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.4.6-linux-glibc2.28-x86_64.tar.xz -c o -P /datamkdir -p /usr/local/mysqlroutercd /datatar -xvf mysql-router-8.4.6-linux-glibc2.28-x86_64.tar.xz -C /usr/local/mysqlrouter/cd /usr/local/mysqlrouter/mv mysql-router-8.4.6-linux-glibc2.28-x86_64 mysql-router-8.4.6cd mysql-router-8.4.6/mkdir myrouterchown -R mysql:mysql /usr/local/mysqlrouter#2-切换到mysql用户下,配置mysqlrouter在mysql用户下全局可用
su - mysql
vi /home/mysql/.bashrc
#添加内容【/usr/local/mysqlrouter/mysql-router-8.4.6/bin】该文件的完整内容是
export PATH=/usr/local/mysql-shell/mysql-shell-8.4.6/bin:/usr/local/mysqlrouter/mysql-router-8.4.6/bin:$PATH
#让修改的环境生效
source ~/.bashrc#3-在mysql用户下初始化所有的mysql节点(主备节点都需要执行)
#注意:当我们初始化时若提示“Error: The provided server is currently not an ONLINE member of a InnoDB cluster.”错误则需要到mysqlsh配置的主节点(192.168.1.40)重启MGR集群,并查看MGR集群状态是否正常
mysqlrouter --bootstrap ckadmin@127.0.0.1:13337 --directory /usr/local/mysqlrouter/mysql-router-8.4.6/myrouter --conf-use-sockets --user mysql#3.1-只在MGR集群的主库(192.168.1.40)切换到mysql用户下使用mysqlsh登录mysql查看MGR集群并重启MGR集群
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
\js
dba.configureInstance();
#若执行获取MGR集群时报51314错误则需要重启MGR集群
var cluster=dba.getCluster()
#重启MGR集群
dba.rebootClusterFromCompleteOutage()
#集群重启成功后再次查看MGR集群状态
var cluster=dba.getCluster()
cluster.status();#3.2-查看MGR集群状态成功后退出【按下Ctrl+d】,并切换到mysql用户下重新初始化mysqlrouter
mysqlrouter --bootstrap ckadmin@127.0.0.1:13337 --directory /usr/local/mysqlrouter/mysql-router-8.4.6/myrouter --conf-use-sockets --user mysql

        注意:当我们查看MGR集群状态时显示“Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active) (MYSQLSH 51314)”错误时,需要重启集群,重启集群命令是【dba.rebootClusterFromCompleteOutage()】

 1.2、启动并MySQL Router

#启动并测试MySQL Router路由实操流程(每个mysql节点都需要执行如下操作)#1-进入mysql router路由的配置目录
cd /usr/local/mysqlrouter/mysql-router-8.4.6/myrouter/#2-启动mysql router
./start.sh #3-查看当前mysql router占用的网络端口信息
netstat -antlp | grep mysqlrouter
MySQL Router 启动后其占用的端口说明
序号

mysqlrouter占用端口

说明
16446对应传统 MySQL协议读写会话,MySQL路由器将传入连接重定向到Primary服务器实例
26447对应传统MySQL协议只读会话,MySQL路由器将传入连接重定向到其中一个从服务 器实例。实现读负载均衡。
36448对应X协议读写会话,MySQL路由器将传入连接重定向到Primary服务器实例。
46449对应X协议只读会话,MySQL路由器将传入连接重定向到其中一个从服务器实例。实现读负载均衡。
56450对应传统MySQL协议只读会话,MySQL路由器将传入连接重定向到主或者从服务 器实例,实现读写分离和读负载均衡。

 1.3、测试MySQL Router

  1.3.1、复制同步测试

        选择任意一个客户端(192.168.1.9)或者程序连接mysql集群任意一个节点(如:192.168.1.42)访问6450端口后,执行写操作会自动调度到主节点,数据写入完成后,看看从库是否实现自动同步。

#我们在192.168.1.9的mysql客户端连接MGR集群中的任意节点(如:192.168.1.42)#1-进入192.168.1.9的mysql客户端路径开启连接MGR的(192.168.1.42)创建ckdb数据库及其在该数据库下创建cktest表和给该表插入一条数据
cd /usr/local/mysql/mysql-8.4.6/bin
./mysql -h 192.168.1.42 -P 6450 -u ckadmin -pshow databases;
create database ckdb;
show databases;
use ckdb;
show tables;
create table cktest(id int not null primary key auto_increment,name nvarchar(12) not null,sex int not null);
insert into cktest(name,sex)values("张三",1);
select * from cktest;#2-分别在MGR的主节点(192.168.1.40)和从节点(192.168.1.41)使用root用户登录查看是否有刚创建的ckdb数据库和cktest表和查看cktest表的数据【有该数据库则表示复制同步正常】
cd /usr/local/mysql/mysql-8.4.6/bin
./mysql -uroot -p
show databases;
use ckdb;
show tables;
select * from cktest;

        注意:若在任意客户端(如:192.168.1.9)连接MGR集群中的任意节点(如:192.168.1.42)时显示“ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.42:6450' (113)”错误,则我们需要检查192.168.1.42的防火应该是没有关闭,则需要放开6450端口。

#若Linux的防火墙是开启的则需要将对应的端口永久放开(如:这里永久放开6446、6447、6540端口)
firewall-cmd --zone=public --add-port=6446/tcp --permanent
firewall-cmd --zone=public --add-port=6447/tcp --permanent
firewall-cmd --zone=public --add-port=6450/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port

  1.3.2、读写分离与负载均衡测试

《1》选择任意一个客户端(192.168.1.9)或者程序连接mysql集群任意一个节点(如:192.168.1.42)访问6447端口(只读)后,看是否可以创建数据库、表等操作,不能创建则表示正常;而刚才主从复制同步测试使用的6450端口则是读写分离可以创建数据库、表等操作。

《2》选择任意一个客户端(192.168.1.9)或者程序连接mysql集群任意一个节点(如:192.168.1.42)访问6447端口(只读)后查看当前的主机名称;然后在退出重新登录后再次查看当前的主机名称;可以发现每次登录显示的主机名称是不一样的则体现了负载均衡。

  1.3.3、故障转移测试

        我们使用mysqlsh登录MGR的任意从库(192.168.1.41或192.168.1.42)上查看当前MGR集群的状态信息,我们可以观察MGR集群的主节点会发生改变(比如:我们将主库的mysql服务停止后再次去查看MGR集群的状态可以发现主库在MGR集群中已经下线,且从库会自动转为主库),详细操作如下所示:

#测试MGR集群故障转移实操流程#1-使用mysqlsh工具登录任意MGR从库查看当前集群状态
su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
\js
var cluster=dba.getCluster()
cluster.status();#2-到MGR主库上切换到root用户停止mysql服务来模拟故障
systemctl stop mysqld.service 
systemctl status mysqld.service#3-回到刚才使用mysqlsh工具登录到的MGR从库再次查看当前集群状态(此时MGR集群中mysql-master(192.168.1.40y)自动切换为从库且下线,而另外的从库mysql-slave1(192.168.1.41)已经切换为主库)
var cluster=dba.getCluster()
cluster.status();#若要将离线的mysql-master重新加入MGR集群,则只用重启该mysql服务即可(注意:即使该离线的mysql-master节点重新加入后也不会切换为主库了)
systemctl start mysqld.service 

二、InnoDB Cluster集群维护

 2.1、InnoDB Cluster集群的基础操作

#InnoDB Cluster集群的基础操作(注意:以下操作都是在脚本模式【\js】下执行)#1-查看集群状态
var cluster = dba.getCluster('mysqlcluster');
cluster.status();#2-显示集群结构
cluster.describe();#3-显示集群配置选项
cluster.options();#4-移除集群成员
cluster.removeInstance('ckadmin@192.168.1.42:13337');
cluster.status();#5-添加集群成员(注意:若添加集群成员提示:Cluster.addInstance: error uninstalling plugin 'clone': mysql02:3306: Plugin 'clone' is force_plus_permanent and can not be unloaded (RuntimeError)则将三个节点中的MySQL配置文件中clone=FORCE_PLUS_PERMANENT注释掉,然后重启MySQL即可)
cluster.addInstance('ckadmin@192.168.1.42:13337');
cluster.status();#6-手动切换主节点
cluster.setPrimaryInstance('ckadmin@192.168.1.40:13337');
cluster.status();#6.1再次切换主节点
cluster.setPrimaryInstance('ckadmin@192.168.1.41:13337');
cluster.status();#7-切换成多主模式
cluster.switchToMultiPrimaryMode();
cluster.status();#8-切换成单主模式
cluster.switchToSinglePrimaryMode('ckadmin@192.168.1.40:13337');
cluster.status();#9-列出和集群相关的Router实例
var cluster = dba.getCluster();
cluster.listRouters();
#InnoDB Cluster集群的基础操作(注意:以下操作都是在脚本模式【\sql】下执行)#1-显示复制统计信息
SELECT * FROM performance_schema.replication_group_member_stats\G;#2-关闭组复制
STOP GROUP_REPLICATION;#3-启动组复制
START GROUP_REPLICATION;#4-查询元数据表
SELECT * FROM performance_schema.replication_group_members\G;

 2.2、InnoDB Cluster集群异常解决

《1》原主库变成只读模式,原因是mysqld-auto.cnf里面添加了super read only,解决办法: 需要启动主库,执行如下命令:" set persist super read only=off ;. 查看状态:

#查看mysql节点的只读状态
show variables like '%read%only';

《2》InnoDB Cluster集群的所有主机都关机后,再次重启后,InnoDB Cluster集群并没有启动,则需要使用mysqlsh命令登录主库节点后重启集群

su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
\js
dba.configureInstance();
#若执行获取MGR集群时报51314错误则需要重启MGR集群
var cluster=dba.getCluster()
#重启MGR集群
dba.rebootClusterFromCompleteOutage()
#集群重启成功后再次查看MGR集群状态
var cluster=dba.getCluster()
cluster.status();

 2.3、InnoDB Cluster集群的关闭顺序

#InnoDB Cluster集群的关闭顺序#1-先查看集群的状态
su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
\js
var cluster=dba.getCluster()
cluster.status();#2-把主库设置为只读(主要是为了避免备库关闭后,主库数据改变无法同步)
\sql
SET GLOBAL read_only = ON;
SHOW VARIABLES LIKE 'read_only';#3-关闭所有备库
systemctl  stop mysqld#4-关闭主库
systemctl  stop mysqld

 2.4、InnoDB Cluster集群的启动顺序

#InnoDB Cluster集群的启动顺序#1-先启动所有备库,再启动主库
systemctl start mysqld
systemctl status mysqld#2-【主库启动后,要把只读给关闭】
su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
SET GLOBAL read_only = off;#3-只用在主库上启动 MGR 集群即可
su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p
\js
dba.rebootClusterFromCompleteOutage();
var cluster=dba.getCluster();
cluster.status();#4-启动 mysqlroute
cd /usr/local/mysqlrouter/mysql-router-8.4.6/myrouter/
./start.sh
#4.1-也可以直接使用如下命令直接启动mysqlrouter
mysqlrouter -c /usr/local/mysqlrouter/mysql-router-8.4.6/myrouter/mysqlrouter.conf#5-查看读写分离路由端口配置情况
mysqlrouter  --report-host mysql-master --bootstrap root@localhost:13337

 2.5、InnoDB Cluster集群的重新配置

        如果遇到主备库故障导致同步无法进行,则需要重新配置集群:

#-InnoDB Cluster集群的重新配置流程#0-切换到mysql用户使用mysqlshell工具登录各个mysql节点
su - mysql
mysqlsh --mysql -h 127.0.0.1 -P 13337 -uckadmin -p#1-在【主库】上使用mysqlsh登录后删除已有集群元数据
\js
dba.dropMetadataSchema();#2-检查集群条件,在每个集群节点执行一遍(若有报告显示不满足MGR集群要求的则统一输入y自动配置符合要求)
dba.configureInstance();3-创建集群(默认为单主模式,且第一个加入的为写节点,在第一个节点创建集群实例(192.168.1.40))
var cluster= dba.createCluster('mysql8.4.6cluster')#4-查看MGR集群状态并添加节点(添加其他节点 192.168.1.41/42,此时会进行数据库克隆,把节点1的数据库复制到其它数据库,同时进行同步)
var cluster=dba.getCluster();
cluster.status();
cluster.addInstance('ckadmin@192.168.1.41:13337')
cluster.addInstance('ckadmin@192.168.1.42:13337')#5-查看集群状态
var cluster=dba.getCluster();
cluster.status();

三、其他资料

MySQL :: MySQL Shell 8.0 :: 7 MySQL InnoDB Clusterhttps://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

http://www.dtcms.com/a/478320.html

相关文章:

  • commons-rng(伪随机数生成)
  • qemu 串口模拟输入的整个流程
  • 在git commit时利用AI自动生成并填充commit信息
  • 【完整源码+数据集+部署教程】可回收金属垃圾检测系统源码和数据集:改进yolo11-AggregatedAtt
  • HakcMyVM-Crack
  • emmc extcsd寄存器
  • 利用径向柱图探索西班牙语学习数据
  • wordpress建淘宝客网站吗上海网站制作最大的公司
  • 定制网站平台的安全设计房地产公司网站建设
  • 筛法(Sieve Method)简介
  • 【论文阅读】基于指数-高斯混合网络的视频观看时间预测的多粒度分布建模-小红书recsys25
  • 网站开发过程模型做电影网站怎么接广告
  • 手机群控软件在游戏运营中的行为模拟技术实践
  • MySQL----触发器
  • 汕头模板建站平台朝阳市做网站
  • C8051F351-GMR工业用 8051 MCU 开发板C8051F351-GMR嵌入式处理器和控制器,适用于高精度模拟信号处理
  • [嵌入式系统-107]:语音识别的信号处理流程和软硬件职责
  • OkHttp源码解析(一)
  • 拆分PDF.html 办公小工具
  • 网站编辑用什么软件有关于网站建设类似的文章
  • 陶瓷网站制作wordpress导购主题
  • 分割——双线性插值
  • 北京天仪建设工程质量检测所网站上海做网站的公司电话
  • 建站优化一条龙新闻型网站建设
  • Petslist – Pet listing WordPress Theme Free Download
  • STM32 GPIO-------设置成51单片机模式输出
  • C++之多层继承、多源继承、菱形继承
  • 双目三维重建-1相机标定
  • GIT 提示 remote: HTTP Basic: Access denied
  • 建设门户网站都需要什么成都网站设计新闻