MySQL-MHA高可用配置及故障切换

目录

案例搭建

1:所有服务器关闭防火墙

2:设置hosts文件

3:安装 MySQL 数据库

4:修改参数

5:安装 MHA 软件

6:配置无密码认证

7:配置 MHA

8:模拟 master 故障


MHA(MasterHigh Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL 高可用环境下故障切换和主从复制的软件。在 MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用

  • 该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)
    • MHAManager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上
    • MHANode 运行在每台 MySQL服务器上,MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的master,然后将所有其他的slave 重新指向新的 master。整个故障转移过程对应用程序完全透明
  • 自动故障切换过程,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险
  • 目前 MHA 主要支持一主多从的架构,要搭建 MHA 要求一个复制集群中必须最少有三台数据库服务器,即一台充当 master,一台充当备用 master,另外一台充当从库

案例搭建

服务器

操作系统

主机名/IP 地址

角色

服务器

CentOS7.9

192.168.10.101

管理节点,安装 manager 和node 组件

服务器

CentOS7.9

192.168.10.102

Master 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.103

Slave 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.104

Slave 节点,安装 node 组件

  1. 安装MySQL 数据库
  2. 配置MySQL 一主两从
  3. 安装MHA 软件
  4. 配置无密码认证
  5. 配置 MySQL MHA 高可用
  6. 模拟master 故障切换

1:所有服务器关闭防火墙

systemctl stop firewalld
setenforce 0

2:设置hosts文件

vim /etc/hosts
192.168.10.101 MHA-manager
192.168.10.102 Mysql1
192.168.10.103 Mysql2
192.168.10.104 Mysql3

3:安装 MySQL 数据库

4:修改参数

(1)修改主库参数
vim /etc/my.cnf
server-id=11
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0 
log-slave-updates=true
//当relay_log_purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay_log_purge=0 时,旧的 relaylog则会被保留

(2)修改从库参数
vim /etc/my.cnf
server-id= 22
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0         ##不自动删除中继日志,以便宕机后恢复数据
log-slave-updates=true     ##Slave可以是其他 Slave 的 Master,从而扩散 Master 的更新

(3)在所有的mysql节点上配置权限
grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
//第一条是做主从复制的;后四条是做MHA用的

(4)在mysql1上查看master信息
mysql> show master status;

(5)在mysql2和mysql3上设置为slave
mysql> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',
master_log_file='master-bin.000003',master_log_pos=689;

mysql> start slave;
mysql> show slave status\G

5:安装 MHA 软件

(1)所有服务器上都安装 MHA 依赖的环境
设置阿里的yum基础源以及epel扩展源
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
 //注释
 perl-DBD-MySQL   //perl针对于mysql数据库
 perl-Config-Tiny    //从配置文件中提拿其中的值
 perl-Log-Dispatch    //log-日志
 perl-Parallel-ForkManager      //多线程管理
 perl-ExtUtils-CBuilder       //扩展工具
 perl-ExtUtils-MakeMaker 
 perl-CPAN        //cpan perl中的数据库
 
 (2)在所有节点安装node组件
tar zxvf mha4mysql-node-0.57.tar.gz 
cd mha4mysql-node-0.57 
perl Makefile.PL 
make && make install
//备注
 node工具(这些工具通常由 MHAManager 的脚本触发,无需人为操作)
 save_binary_logs:保存和复制 master 的二进制日志
 apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slave
 filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具) 
 purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)

(3)在 MHA-manager 上安装 manager 组件
tar zxvf mha4mysql-manager-0.57.tar.gz 
cd mha4mysql-manager-0.57 
perl Makefile.PL
make && make install
//备注:
manager工具
 masterha_check_ssh:检查 MHA 的 SSH 配置状况 
 masterha_check_repl:检查 MySQL 复制状况
 masterha_manger:启动 MHA 
 masterha_check_status:检测当前 MHA 运行状态 
 masterha_master_monitor:检测 master 是否宕机
 masterha_master_switch:控制故障转移(自动或者手动)
 masterha_conf_host:添加或删除配置的 server 信息

6:配置无密码认证

(1)在 manager 上配置到所有节点的无密码认证 
ssh-keygen -t rsa 
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104

(2)在 Mysql1 上配置到数据库节点的无密码认证 
ssh-keygen -t rsa 
ssh-copy-id 192.168.10.103
ssh-copy-id 192.168.10.104

(3)在 Mysql2 上配置到数据库节点的无密码认证 
ssh-keygen -t rsa 
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.104

(4)在 Mysql3 上配置到数据库节点的无密码认证 
ssh-keygen -t rsa 
ssh-copy-id 192.168.10.102
ssh-copy-id 192.168.10.103

7:配置 MHA

(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
ll /root/mha4mysql-manager-0.57/samples/scripts/
chmod +x /root/mha4mysql-manager-0.57/samples/scripts/* 
cp /root/mha4mysql-manager-0.57/samples/scripts/* /usr/local/bin
//脚本具体作用
 master_ip_failover:自动切换时 VIP 管理的脚本 
 master_ip_online_change:在线切换时 vip 的管理 
 power_manager:故障发生后关闭主机的脚本 
 send_report:因故障切换后发送报警的脚本
 
 (2)使用文档内容完整替换 master_ip_failover 文件的内容,IP 部分更换为自己的IP地址(第9页)
复制“master_ip_failover”脚本到/usr/local/bin 目录,这里使用脚本管理 VIP
//备注:
 candidate_master=1:设置为候选 master,如果设置该参数以后,发生主从切换以后会将此从库提升为主库。
 check_repl_delay=0:默认情况下如果一个 slave 落后 master 100M 的 relay logs 的话,MHA 将不会选择该slave 作为一个新的 master。
 因为对于这个 slave 的恢复需要花费很长时间,通过设置 check_repl_delay=0,MHA 触发切换在选择一个新的 master 的时候将会忽略复制延时,
 这个参数对于设置了 candidate_master=1 的主机非常有用,因为这个候选主在切换的过程中一定是新的 master。
 //如果是yum安装的mariadb,master_binlog_dir=/var/lib/mysql
 
(4)测试 ssh 无密码认证,如果正常最后会输出 successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf 
(5)测试 mysq 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常
masterha_check_repl -conf=/etc/masterha/app1.cnf
(6)首次配置 MHA 的 VIP 地址需要手动进行配置(在mysq1上)
ifconfig ens33:1 192.168.10.200
(7)启动 MHA(在mha-manager主机上)
nohup masterha_manager \        //nohup:英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
--conf=/etc/masterha/app1.cnf \
--remove_dead_master_conf \        //该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除该参数代表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除
--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &        //该参数代表忽略上次 MHA 触发切换产生的文件
//2>&1表示标准错误输出和标准输出都定向到log中;2>&1 & 最后一个&表示把这条命令放到后台执行
//< /dev/null >/var/log/masterha/app1/manager.log 2>&1
表示先将标准输出重定向到manager.log,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了manager.log,因此标准错误也会重定向到manager.log

在Linux系统中,代码“0”、“1”、“2”都是文件描述符,0代表标准输入,1代表标准输出,2代表错误输出

(8)查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点
masterha_check_status --conf=/etc/masterha/app1.cnf
(9)查看 MHA 日志
cat /var/log/masterha/app1/manager.log

8:模拟 master 故障

(1)用客户端链接群集
mysql -u mha -pmanager -h 192.168.10.200

(2)关闭当前的 master
systemctl stop mysqld

(3)观察 MHA 日志,如果自动切换成功,最后会输出 successfully 字样
tailf /var/log/masterha/app1/manager.log

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值