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

MHA(mysql高可用架构)

一. 一主两从架构搭建

1. master(server1)

# 在所有节点上都执行此操作,保持环境的纯净。
/etc/init.d/mysqld stop
cd /data/mysql/
rm -rf *

vim /etc/my.cnf

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog


在这里插入图片描述

mysqld --initialize --user=mysql
/etc/init.d/mysqld start 
mysql -p

在这里插入图片描述

mysql> alter user root@localhost identified by '123456'; #修改密码
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

在这里插入图片描述

2. slave(server2、3)

# 在所有节点上都执行此操作,保持环境的纯净。
/etc/init.d/mysqld stop
cd /data/mysql/
rm -rf *

vim /etc/my.cnf

server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog


mysqld --initialize --user=mysql
/etc/init.d/mysqld start 
mysql -p

# 在slave中
mysql> alter user root@localhost identified by '123456'; #修改密码
mysql> CHANGE MASTER TO MASTER_HOST='192.168.228.11', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;

在这里插入图片描述

在这里插入图片描述
虽然没有在slave中创建rpl_user用户,但是它会同步master的操作,因此也创建了该用户。

3. 实验中的问题

配置slave过程中失败。

在这里插入图片描述

IO从两个方面查找问题;

  • selinux,防火墙
  • 用户认证

后面发现我把用户名写错了

4. 测试

在这里插入图片描述

在这里插入图片描述
同步成功

二. 延迟复制(本节不需要,是穿插内容)

延迟复制服务器,在master做了误操作,可以在slave端进行恢复

mysql> stop slave sql_thread;
mysql> change master to master_delay=60;
mysql> start slave sql_thread;
mysql> show slave status\G;

在这里插入图片描述
在这里插入图片描述

三. MHA(server4)环境搭建

1. 配置

# 在控制机器操作
cd MHA-7/
yum install -y *.rpm # 安装MHA依赖包

在这里插入图片描述

# 在控制机器操作
# 免密操作
ssh-keygen # 生成密钥
ssh-copy-id server1 # 传输公钥

在这里插入图片描述
在这里插入图片描述

# 在被控制机器操作
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm # 按照节点工具

在这里插入图片描述

# 在控制机器上操作
mkdir -p /etc/masterha # 手动创建配置文件目录
vim /etc/masterha/app1.cnf
[server default]
user=root
password=123456
ssh_user=root
repl_user=rpl_user
repl_password=123456
master_binlog_dir= /data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.228.12 -s 192.168.228.13
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha
manager_log=/etc/masterha/manager.log

[server1]
hostname=192.168.228.11
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.228.12
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.228.13
no_master=1

在这里插入图片描述

2. 测试

masterha_check_ssh --conf=/etc/masterha/app1.cnf # 免密测试

# 直接为每一台主机配置相同的公钥私钥
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:

在这里插入图片描述

在这里插入图片描述

masterha_check_repl --conf=/etc/masterha/app1.cnf # repl远程连接检查

在这里插入图片描述

# 在master上面授权远程连接
grant all on *.* to root@'%' identified by '123456';

在这里插入图片描述

四、MHA高可用切换

1. 手动切换

1.1 master alive

# 进入维护状态,将server1的master切换为slave;将server2的slave切换为master。
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.228.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在这里插入图片描述

1.2 master down

[root@server2 ~]# /etc/init.d/mysqld stop # master down
# 切换master为好的机器
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=dead --dead_master_host=192.168.228.12 --dead_master_port=3306 --new_master_host=192.168.228.11 --new_master_port=3306 --ignore_last_failover

在这里插入图片描述

1.3 恢复down机

[root@server2 ~]# /etc/init.d/mysqld start
CHANGE MASTER TO MASTER_HOST='192.168.228.11', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;

在这里插入图片描述
在这里插入图片描述

2. 自动切换

masterha_manager --conf=/etc/masterha/app1.cnf & # 后台监测
cat app1.master_status.health

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

当之前的server1 要恢复上线,只能是恢复为slave,此时需要为其手动指定master。

mysql> CHANGE MASTER TO MASTER_HOST='192.168.228.12', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;

在这里插入图片描述

# 每次操作完删除下面的文件
[root@server4 masterha]# rm -rf manager.log app1.failover.complete

1.脚本切换

[root@server4 bin]# ls
master_ip_failover  master_ip_online_change # 两个脚本

在这里插入图片描述
在这里插入图片描述

在server4中修改
在这里插入图片描述

# 第一次需要手动在master中手动添加VIP
[root@server2 ~]# ip a a 192.168.228.100/24 dev eth0

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@server2 ~]# /etc/init.d/mysqld stop # 停掉master后

在这里插入图片描述

在这里插入图片描述
如果要恢复server2,只能手动恢复为slave,因为网络里面不能存在两个master

在这里插入图片描述


http://www.kler.cn/a/281445.html

相关文章:

  • 刷题DAY19
  • 存储实验:基于华为存储实现存储双活(HyperMetro特性)
  • 【功能自动化】使用HTMLTestRunner生成测试报告
  • 浅谈【数据结构】链表之单链表
  • 惠海H6900B升压恒流调光IC芯片3.7V7.4V12V升压18V24V36V 48V 植物灯/电解水
  • 利用命令模式实现一个手游后端架构的方法总结
  • EXCEL试题
  • 【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器
  • k8s的组件以及安装
  • 百度文心一言API批量多线程【改写伪原创文章软件】-key免费无限写
  • 能大致讲一下Chat GPT的原理吗?
  • Debugging HIP
  • 35岁零基础能转型AI大模型吗?
  • 关闭spirng boot集成springdoc-openapi的接口文档
  • 单点登录最全详解,建议收藏!
  • 「2.2」Radio Transmission
  • 【Docker】docker的简介与部署方法
  • SIMCom芯讯通A7680C发起HTTP通讯:在UI串口进行模拟;代码调用API操作
  • TDengine数据恢复TAOSD出错时退出时的解决方法
  • MinIO中object_name是什么