MySQL高可用方案之MHA

MySQL高可用方案之MHA,第1张

什么是高可用?高可用其实就是可以实现自动故障转移。当主节点挂了之后其他节点可以自动顶上,防止节点出现故障时MySQL不能对外提供服务。

MySQL的高可用解决方案其实有很多种(想了解自行百度),这里只说其中一种:MHA。这也是当前比较主流的方案。

在搭建MHA之前应该先保证已经安装配置好了MySQL的主从/集群。因为既然是高可用架构,那么针对的肯定是多台设备,单机的话谈不上高可用。

MySQL的主从搭建过程这里就不说了,可以看这里: MySQL搭建主从架构

本次搭建环境:centos7.8 + mysql5.7.31

现在的架构是 :

101:主节点

102:从节点1

103:从节点2

手动将101的MySQL主节点关闭,在102的节点上查看VIP,发现配置的VIP:192.168.232.105已经从101节点漂移到102节点了。

然后在103的节点上可以看到主节点确实已经变成了 102

到此,MHA 搭建大功告成啦!

MHA 的切换过程,共包括以下的步骤:

最后说明一点,宕机的节点,重启后由于MySQL机制问题不会自动加入到集群中,需要我们手动加入。

安装基本环境:

master:192.168.0.1

node:192.168.0.2192.168.0.3

vip:192.168.0.101

master: https://github.com/yoshinorim/mha4mysql-manager/releases

node: https://github.com/yoshinorim/mha4mysql-node/releases

安装epel源

yum install -y epel-release

安装perl

yum install perl-DBD-MySQL

yum install perl-Config-Tiny

yum install perl-Log-Dispatch

yum install perl-Parallel-ForkManager

master 192.168.0.1 >>slave:192.168.0.2 192.168.0.3

创建mha账号

在manager节点和node节点中都需要安装mha node

rpm包安装方式:

yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

只在manager节点上安装

rpm包安装方式:

yum localinstall -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

mkdir /etc/masterha

vim /etc/masterha/app1.conf

全局配置文件

vim /etc/masterha/masterha_defaults.conf

绑定和删除vip节点

master_ip_failover: https://github.com/yoshinorim/mha4mysql-manager/blob/master/samples/scripts/master_ip_failover

master_ip_online_change: https://github.com/yoshinorim/mha4mysql-manager/blob/master/samples/scripts/master_ip_online_change

根据作者的脚本来进行改写配置。

报错:

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln205] Slaves settings check failed!

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln413] Slave configuration failed.

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln424] Error happened on checking configurations. at /usr/local/bin/masterha_check_repl line 48

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln523] Error happened on monitoring servers.

[info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

在所有节点执行:

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

执行后再次报错:

[info] Connecting to root@192.168.0.1(192.168.0.1:22)..

Can't exec "mysqlbinlog": No suchfile or directory at /usr/local/share/perl5/MHA/BinlogManager.pm line 106.

mysqlbinlog version command failed with rc1:0, please verify PATH, LD_LIBRARY_PATH, and client options

at/usr/local/bin/apply_diff_relay_logs line 493

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln205] Slaves settings check failed!

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln413] Slave configuration failed.

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln424] Error happened on checking configurations. at /usr/local/bin/masterha_check_repl line 48

[/usr/local/share/perl5/MHA/MasterMonitor.pm,ln523] Error happened on monitoring servers.

Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

在所有节点执行

[root@master masterha]#type mysqlbinlog

[root@master masterha]#mysqlbinlog is/usr/local/mysql/bin/mysqlbinlog

[root@master masterha]#ln -s/usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

原因:都是没有在指定位置找到相应的文件,所以做一个软链

启动:

第一次,手动绑定vip

sh /etc/masterha/init_vip.sh

检查MHA是否启动和状态

cat /var/log/masterha/app1.log

停止:

先恢复到db-51是主库,db-52,db-53从库透明ip在db-51上

重启db-52

重启db-53 mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  </dev/null>/var/log/mha/app1/manager.log 2>&1 &

检查mha

masterha_check_ssh  --conf=/etc/mha/app1.cnf

masterha_check_repl  --conf=/etc/mha/app1.cnf

修改主库配置

清除db-52主库配置

清除db-53配置

重启MHA

检查

1.创建目录

mkdir -p /data/binlog_server/

chown -R mysql.mysql /data/*

cd  /data/binlog_server/

2.拉取最新日志

注意:

拉取日志的起点,需要按照目前从库的已经获取到的二进制日志点为起点

mysql -uroot -p123 -h10.0.0.55 -e "show master status\G"

mysqlbinlog  -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000003 &

ll /data/binlog_server

3.MHA配置文件设置

vim /etc/mha/app1.cnf

[binlog1]

no_master=1

hostname=10.0.0.53

master_binlog_dir=/data/binlog_server/

4.重启MHA

masterha_stop  --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  </dev/null>/var/log/mha/app1/manager.log 2>&1 &

5.实验步骤

1)停止从库功能

2)主库疯狂写入t100w

3)实验测试脚本

cat binglog_test.sh

#!/bin/bash

mysql -uroot -p123 -h10.0.0.52 -e 'start slave'

mysql -uroot -p123 -h10.0.0.52 -e 'show slave status\G'

mysql -uroot -p123 -h10.0.0.53 -e 'start slave'

mysql -uroot -p123 -h10.0.0.53 -e 'show slave status\G'

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  </dev/null>/var/log/mha/app1/manager.log 2>&1 &

sleep 0.5

ssh 10.0.0.51 'init 0'

mysql -uroot -p123 -h10.0.0.52 -e 'show slave status\G'

mysql -uroot -p123 -h10.0.0.53 -e 'show slave status\G'

6.增加了数据补偿功能后的修复步骤

第一步: 恢复主从复制

第二步: 恢复binlog server

删除以前的binlog文件

rm -rf /data/binlog_server/*

查看最新的master节点是哪台,执行到哪个binlog文件

mysql -uroot -p123 -h10.0.0.55 -e "show master status\G"

重新执行binlog命令

cd /data/binlog_server/

mysqlbinlog  -R --host=10.0.0.52 --user=mha --password=mha --raw --stop-never mysql-bin.000003 &

第三步: MHA检查

masterha_check_ssh  --conf=/etc/mha/app1.cnf

masterha_check_repl  --conf=/etc/mha/app1.cnf

第四步: 增加节点配置

masterha_conf_host --command=add --conf=/etc/mha/app1.cnf --hostname=10.0.0.51 --block=server1 --params="port=3306"

第五步: 启动MHA

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover >/var/log/mha/app1/manager.log 2>&1 &


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11563229.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存