目录mysql组复制前置步骤三台机器全部执行节点区分操作功能测试流程MySQL路由器安装 MySQL Router (server4)MySQL 集群创建远程访问账号主库server1执行server4路由器连接测试InnoDB Cluster配置mgr 单主模式参数修改my.cnf 全局配置所有节点都要添加主节点server1启动集群状态查看命令mysql shell编辑验证集群状态MySQL Router 部署引导初始化自动生成 router 配置重启 mysqlrouter 服务加载配置mysql MHA高可用创建一主两从集群主库server1配置从库 server2server3操作流程测试MHA部署MHA Manager 配置文件部署创建配置目录编写主配置文件集群环境预检测检测 SSH 连通性检测 MySQL 主从复制状态配置 VIP 切换脚本实现自动漂移修改 app1.cnf启用 VIP 脚本确认脚本具备执行权限自动故障转移启动 MHA Manager 后台运行日志查看与故障排查编辑mysql组复制3 节点组复制server1192.168.239.132 server_id1server2192.168.239.133 server_id2server3192.168.239.134 server_id3多主特性三台节点均可执行增删改写操作前置说明server1/server2/server3 基础部署流程一致仅 IP、server_id、group_replication_local_address 不同。前置步骤三台机器全部执行停止 MySQL清空旧数据systemctl stop mysqld cd /data/mysql rm -fr *编写基础 my.cnf不含组复制参数使用配置文件初始化数据库mysqld --defaults-file/etc/mysql/my.cnf --initialize启动服务登录修改 root 临时密码alter user rootlocalhost identified by westos;创建组复制专用恢复账号关闭 binlog 避免日志冗余SET SQL_LOG_BIN0; CREATE USER rpl_user% IDENTIFIED BY password; GRANT REPLICATION SLAVE,CONNECTION_ADMIN,BACKUP_ADMIN,GROUP_REPLICATION_STREAM ON *.* TO rpl_user%; FLUSH PRIVILEGES; SET SQL_LOG_BIN1;退出数据库修改 my.cnf追加组复制配置段修改server_id三台分别 1/2/3修改group_replication_local_address本机 IP:33061group_replication_group_seeds、group_replication_group_name三台完全一致重启 mysqld 服务节点区分操作server1引导节点唯一执行 bootstrap# 配置恢复通道 CHANGE MASTER TO MASTER_USERrpl_user, MASTER_PASSWORDpassword FOR CHANNEL group_replication_recovery; # 开启集群引导仅首次搭建在server1执行 SET GLOBAL group_replication_bootstrap_groupON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_groupOFF; # 查看集群成员 SELECT * FROM performance_schema.replication_group_members;server2、server3普通加入节点不要 bootstrapCHANGE MASTER TO MASTER_USERrpl_user, MASTER_PASSWORDpassword FOR CHANNEL group_replication_recovery; START GROUP_REPLICATION; SELECT * FROM performance_schema.replication_group_members;功能测试流程在任意节点创建库、表、写入数据登录另外两台节点查询验证数据同步在不同节点分别执行 INSERT 写入验证多主读写能力server1 执行建库、建表、插入初始数据CREATE DATABASE test; USE test; CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL); INSERT INTO t1 VALUES (1, Luis); SELECT * FROM t1;查询结果成功查询到(1,Luis)。登录 server2验证数据同步并写入新数据SELECT * FROM test.t1;结果成功读取 server1 创建的数据(1,Luis)证明集群数据同步生效。INSERT INTO test.t1 VALUES (2, wxh);在 server2 完成写入操作。登录 server3验证数据同步并写入新数据SELECT * FROM test.t1;结果同时查询到两条数据(1,Luis)、(2,wxh)server1、server2 的数据均同步至 server3。INSERT INTO test.t1 VALUES (3, westos);在 server3 完成写入操作。MySQL路由器节点清单server4MySQL Router 路由节点192.168.239.135server1 (192.168.239.132)主库 Masterserver3 (192.168.239.133)、server2 (192.168.239.134)从库 Slave安装 MySQL Router (server4)rpm -ivh mysql-router-community-8.0.46-1.el7.x86_64.rpm编写路由配置文件cd /etc/mysqlrouter vim mysqlrouter.conf完整正确配置内容[routing:ro] bind_address 0.0.0.0 bind_port 7001 # 只读只放两台从库 destinations 192.168.239.133:3306,192.168.239.134:3306 routing_strategy round-robin [routing:rw] bind_address 0.0.0.0 bind_port 7002 # 读写首位放置主库 destinations 192.168.239.132:3306 routing_strategy first-available说明7002读写端口所有INSERT/UPDATE/DELETE写入操作连这个端口流量固定转发到主库 132。7001只读端口SELECT 查询连接此端口请求在两台从库 133、134 之间轮询负载均衡。启动路由服务systemctl enable --now mysqlrouter.serviceMySQL 集群创建远程访问账号主库server1执行create user wxh% identified by westos; grant all on test.* to wxh%;server4路由器连接测试# 只读端口 mysql -h 192.168.239.135 -P 7001 -u wxh -pwestos select * from test.t1; # 读写端口 mysql -h 192.168.36.239 -P 7002 -u wxh -pwestos select * from test.t1;验证流量分发在对应数据库服务器执行网络命令查看活跃连接yum install -y lsof lsof -i :3306 # 备选推荐 ss -ant | grep 33067001只读端口放行server3server1无连接7002读写端口放行server1server3无连接InnoDB Cluster配置mgr 单主模式参数修改my.cnf 全局配置所有节点都要添加group_replication_single_primary_modeON group_replication_enforce_update_everywhere_checksOFFgroup_replication_single_primary_modeON开启单主模式集群内只有一个 PRIMARY主节点支持读写其余节点为 SECONDARY从节点只读也是 MGR 最常用模式。group_replication_enforce_update_everywhere_checksOFF关闭多主严格校验单主模式必须配置 OFF如果开启会启动失败。⚠️ 配置修改后所有节点必须重启 mysqld 使参数生效。主节点server1启动-- 1.引导创建集群仅第一个启动节点执行 SET GLOBAL group_replication_bootstrap_groupON; -- 2.启动组复制 START GROUP_REPLICATION; -- 3.关闭集群引导重要防止后续重启重复创建集群 SET GLOBAL group_replication_bootstrap_groupOFF;group_replication_bootstrap_groupON仅集群初始化第一个节点临时开启集群创建完成立刻关闭。如果忘记关闭后续节点重启会造成集群脑裂、重复组建集群故障。集群状态查看命令SELECT * FROM performance_schema.replication_group_members;字段值含义MEMBER_STATEONLINE节点正常接入集群MEMBER_ROLEPRIMARY当前节点为唯一主节点支持读写MEMBER_VERSION8.0.36MySQL 版本server2、server3操作流程不要执行 bootstrap-- 直接启动组复制 START GROUP_REPLICATION;启动成功后自动加入集群自动成为 SECONDARY 只读节点。执行查询语句SELECT * FROM performance_schema.replication_group_members;最终能看到全部节点 ONLINE。mysql shell在 server4 安装 mysql-shellyum install -y mysql-shell-8.0.46-1.el7.x86_64.rpm作用提供mysqlsh工具用于 InnoDB Cluster 管理。在 MGR 主节点192.168.239.132创建集群管理员账号 icadmin登录 mysql 客户端执行CREATE USER icadmin% IDENTIFIED BY westos; GRANT ALL PRIVILEGES ON *.* TO icadmin% WITH GRANT OPTION; FLUSH PRIVILEGES;作用给 mysqlsh 提供远程管理集群的权限 ⚠️必须在 MGR PRIMARY 执行MGR 单主模式写操作只能在主节点。账号会自动同步到所有 MGR 从节点无需重复创建。server4 使用 mysqlsh 远程连接 MGR 主节点mysqlsh icadmin192.168.239.132:3306输入密码 westos进入 JS 交互模式。接管已经存在的 MGR 集群核心命令var cluster dba.createCluster(mgr_single_cluster, {adoptFromGR:true, force:true});参数解释mgr_single_cluster自定义集群名称adoptFromGR:true关键告知 shell不要新建集群接管现存 Group Replication (MGR)force:true强制接管规避部分一致性校验报错实验环境常用⚠️前提MGR 集群所有节点必须全部 ONLINE集群运行正常。验证集群状态cluster.status();输出内容可以看到主节点 PRIMARY、从节点 SECONDARY所有成员、角色、在线状态。MySQL Router 部署MySQL Router 作用提供统一访问入口自动识别主节点转发写请求从节点转发读请求。引导初始化自动生成 router 配置mysqlrouter --bootstrap icadmin192.168.239.132:3306 --usermysqlrouter--bootstrap自动连接集群拉取集群拓扑生成路由配置文件icadmin主节点使用刚才创建的集群管理员账号--usermysqlrouter指定运行进程系统用户重启 mysqlrouter 服务加载配置systemctl restart mysqlrouter.servicemysql MHA高可用创建一主两从集群主库server1配置清理旧数据 修改配置systemctl stop mysqld.service cd /data/mysql rm -fr * vim /etc/mysql/my.cnf[mysqld] server_id1 gtid_modeON enforce_gtid_consistencyON log_slave_updatesON log_binbinlog初始化、启动chown mysql:mysql /data/mysql mysqld --defaults-file/etc/mysql/my.cnf --initialize systemctl start mysqld登录数据库配置mysql -p-- 修改root密码 alter user rootlocalhost identified by westos; -- 创建复制账号指定mysql_native_password规避从库连接密码插件报错 CREATE USER repl% IDENTIFIED WITH mysql_native_password BY westos; GRANT REPLICATION SLAVE ON *.* TO repl%; -- 查看主库状态GTID模式无需记录File、Pos show master status;从库 server2server3操作流程systemctl stop mysqld.service cd /data/mysql rm -fr * vim /etc/mysql/my.cnf[mysqld] server_id2 gtid_modeON enforce_gtid_consistencyON # 从库默认不需要log_slave_updates除非准备把从库提升为主库 log_binbinlogchown mysql:mysql /data/mysql mysqld --defaults-file/etc/mysql/my.cnf --initialize systemctl start mysqld mysql -palter user rootlocalhost identified by westos; -- GTID自动点位同步 CHANGE MASTER TO MASTER_HOST192.168.239.132, MASTER_USERrepl, MASTER_PASSWORDwestos, MASTER_AUTO_POSITION1; START REPLICA; SHOW REPLICA STATUS\G测试Master主库 server1执行操作-- 创建数据库 create database westos; use westos; -- 创建数据表 create table user_tb ( username varchar(25) not null, password varchar(50) not null ); -- 插入测试数据 insert into user_tb values (user1,111); insert into user_tb values (user2,222);Slave从库 server2 /server3验证数据select * from westos.user_tb;MHA部署软件安装Manager 节点server4安装 MHA 管理端 节点依赖包[rootserver4 ~]# yum install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm在 server1、server2、server3 安装 MHA node 客户端[rootserver1 ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm # server2、server3执行相同命令配置所有节点 SSH 免密登录server4 生成密钥[rootserver4 MHA-7]# ssh-keygen推送本机密钥[rootserver4 MHA-7]# ssh-copy-id server4将密钥目录同步至全部数据库节点[rootserver4 ~]# scp -r .ssh/ server1: [rootserver4 ~]# scp -r .ssh/ server2: [rootserver4 ~]# scp -r .ssh/ server3:免密成功MySQL 集群账号授权主库执行自动同步到从库登录 MySQL 执行CREATE USER root% IDENTIFIED WITH mysql_native_password BY westos; GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; FLUSH PRIVILEGES;说明MHA 使用 root 账号远程管理 MySQL 集群集群需要提前搭建好 MySQL 主从复制。MHA Manager 配置文件部署创建配置目录[rootserver4 ~]# mkdir /etc/masterha编写主配置文件[rootserver4 ~]# vim /etc/masterha/app1.cnf[server default] userroot passwordwestos ssh_userroot repl_userrepl repl_passwordwestos master_binlog_dir/data/mysql remote_workdir/tmp secondary_check_script masterha_secondary_check -s 192.168.239.133 -s 192.168.239.134 ping_interval3 # master_ip_failover_script /etc/masterha/master_ip_failover # shutdown_script /script/masterha/power_manager # report_script /script/masterha/send_report # master_ip_online_change_script /etc/masterha/master_ip_online_change manager_workdir/etc/masterha/app1 manager_log/etc/masterha/app1/manager.log [server1] hostname192.168.239.132 candidate_master1 check_repl_delay0 [server2] hostname192.168.239.133 candidate_master1 check_repl_delay0 [server3] hostname192.168.239.134 no_master1192.168.36.134应该为192.168.239.134集群环境预检测检测 SSH 连通性[rootserver4 ~]# masterha_check_ssh --conf/etc/masterha/app1.cnf输出 success 代表所有节点 ssh 免密正常检测 MySQL 主从复制状态[rootserver4 ~]# masterha_check_repl --conf/etc/masterha/app1.cnf输出 MySQL Replication Health is OK 代表主从集群就绪配置 VIP 切换脚本实现自动漂移修改 app1.cnf启用 VIP 脚本[rootserver4 ~]# vim /etc/masterha/app1.cnf[server default] userroot passwordwestos ssh_userroot repl_userrepl repl_passwordwestos master_binlog_dir/data/mysql remote_workdir/tmp secondary_check_script masterha_secondary_check -s 192.168.36.133 -s 192.168.36.134 ping_interval3 master_ip_failover_script /etc/master_ip_failover # shutdown_script /script/masterha/power_manager # report_script /script/masterha/send_report master_ip_online_change_script /etc/master_ip_online_change manager_workdir/etc/masterha manager_log/etc/masterha/manager.log [server1] hostname192.168.36.132 candidate_master1 check_repl_delay0 [server2] hostname192.168.36.133 candidate_master1 check_repl_delay0 [server3] hostname192.168.36.134 no_master1确认脚本具备执行权限[rootserver4 ~]# cd /etc/masterha/ [rootserver4 masterha]# ls app1 app1.cnf #导入两个脚本 [rootserver4 masterha]# ls app1 app1.cnf master_ip_failover master_ip_online_change [rootserver4 masterha]# chmod x master_ip_* [rootserver4 masterha]# ll total 12 drwxr-xr-x 2 root root 25 Aug 3 09:49 app1 -rw-r--r-- 1 root root 873 Aug 3 09:51 app1.cnf -rwxr-xr-x 1 root root 2156 Aug 3 09:52 master_ip_failover -rwxr-xr-x 1 root root 3813 Aug 3 09:52 master_ip_online_change脚本内部根据环境修改网卡名称、VIP 地址。[rootserver4 masterha]# vim /etc/masterha/master_ip_failover[rootserver4 masterha]# vim /etc/masterha/master_ip_online_change自动故障转移重要一次故障转移完成后会生成锁文件再次测试前必须删除[rootserver4 app1]# rm -f app1.failover.complete启动 MHA Manager 后台运行[rootserver4 masterha]# masterha_manager --conf/etc/masterha/app1.cnf 特性Manager 持续监控主库一旦检测主库宕机自动执行故障切换切换完成后 manager 进程自动退出。日志查看与故障排查# 查看工作目录文件 [rootserver4 app1]# ls app1.failover.complete manager.log # 查看完整切换日志 [rootserver4 app1]# cat manager.log