mysql高可用之MHA

1.MHA简介

 1.工作原理

 2.MHA组件

MHA Manager(管理节点):可以单独部署(管理多个集群)也可以部署在一台slave中

MHA Node(数据节点):MHA Node运行在每台mysql服务器上,MHA Manager会定期探测集群中的master节点,当master故障时数据的slave提升为master,其他slave指向新的master。

3.组件介绍

 4.MHA工具

2. MHA环境搭建

1.准备四台机器,搭建一主两备的主从架构,最后一台机器是MHA-Manager节点

主从同步参考mysql主从复制(在线热备)_未来守护者、的博客-CSDN博客第四步基于GTIDs搭建部分
四台机器提前准备了安装MHA所需要的依赖包及软件包,四台机器都自建本地yum仓库

1.上传软件包到/soft/mha目录
mkdir -p /soft/mha
2.配置本地yum源
vim /etc/yum.repos.d/local.repo
[mha]
name=mha soft
baseurl=file:///soft/mha/mha-yum
enabled=1
gpgcheck=0
3.测试MHA依赖库的yum源
yum -y install perl-DBD-MySQL \
perl-Config-Tiny \
perl-Time-HiRes \
perl-Mail-Sender \
perl-Mail-Sendmail \
perl-MIME-Base32 \
perl-MIME-Charset \
perl-MIME-EncWords \
perl-Params-Classify \
perl-Params-Validate.x86_64 \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
net-tools
4、在MHA管理节点安装以下软件
yum –y install mha4mysql-manager-0.57-0.el7.noarch.rpm
yum –y install mha4mysql-node-0.57-0.el7.noarch.rpm
四个节点都安装node的软件包
yum –y install mha4mysql-node-0.57-0.el7.noarch.rpm
5.在四台机器上创建一个普通账号admin,密码123
useradd admin
echo 123|passwd --stdin admin
6.配置mha管理节点到其他主机的互信(root免密登录)
[root@mha ~]# su - admin
[admin@mha ~]$ ssh-keygen -P "" -f ~/.ssh/id_rsa
[admin@mha ~]$ cd .ssh/
[admin@mha .ssh]$ ls
id_rsa  id_rsa.pub
[admin@mha .ssh]$ mv id_rsa.pub authorized_keys
[admin@mha .ssh]$ for i in 10 20 30;do scp -r ../.ssh/ 10.1.1.$i:~/;done

7.数据库master主节点配置admin账户的sudo权限
[root@master ~]# vim /etc/sudoers.d/admin
#User_Alias  表示具有sudo权限的用户列表; Host_Alias表示主机的列表
User_Alias MYSQL_USERS = admin
#Runas_Alias  表示用户以什么身份登录
Runas_Alias MYSQL_RUNAS = root
#Cmnd_Alias  表示允许执行命令的列表(命令需要使用完整路径)
Cmnd_Alias MYSQL_CMNDS = /sbin/ifconfig,/sbin/arping
MYSQL_USERS ALL = (MYSQL_RUNAS) NOPASSWD: MYSQL_CMNDS

权限分发到slave1和slave2(故障来临时,备服务器可以自己设置vip)
[root@master ~]# for i in 20 30;do scp /etc/sudoers.d/admin 10.1.1.$i:/etc/sudoers.d/;done

8.数据库master测试vip
# su - admin
[admin@master ~]$ sudo /sbin/ifconfig ens33:1 10.1.1.100 broadcast 10.1.1.255 netmask 255.255.255.0
[admin@master ~]$ sudo /sbin/arping -fqc 5 -w 5 -I ens33 -s 10.1.1.100 -U 10.1.1.10
[admin@master ~]$ ip a 


9.MHA服务器:创建工作目录
[root@mha ~]# mkdir /etc/mha/
[root@mha ~]# mkdir -p /data/mha/masterha/app1
[root@mha ~]# chown -R admin. /data/mha


10.创建mha局部配置文件:
[root@mha ~]# vim /etc/mha/app1.conf
[server default]
# 设置监控用户和密码(修改1)
user=mha
password=123
# 设置复制环境中的复制用户和密码(修改2)
repl_user=slave
repl_password=123
# 设置ssh的登录用户名(修改3)
ssh_user=admin
# 设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
ping_interval=3
# 设置mgr的工作目录
manager_workdir=/data/mha/masterha/app1
# 设置mysql master保存binlog的目录,以便MHA可以找到master的二进制日志(修改4)
master_binlog_dir=/usr/local/mysql/data
# 设置master的pid文件(修改5)
master_pid_file=/usr/local/mysql/data/master.itcast.cn.pid
# 设置mysql master在发生切换时保存binlog的目录(在mysql master上创建这个目录)
remote_workdir=/data/mysql/mha
# 设置mgr日志文件(MHA遇到问题,主要看这个日志)
manager_log=/data/mha/masterha/app1/app1-3306.log
# MHA到master的监控之间出现问题,MHA Manager将会尝试从slave1和slave2登录到master上
secondary_check_script=/usr/bin/masterha_secondary_check -s 10.1.1.20 -s 10.1.1.30 --user=admin --port=22 --master_host=10.1.1.10 --master_port=3306
# 设置自动failover时候的切换脚本(故障发生时,自动挂载VIP到SLAVE1或SLAVE2)
master_ip_failover_script="/etc/mha/master_ip_failover.sh 10.1.1.100 1"
# 设置手动切换时候的切换脚本
#master_ip_online_change_script="/etc/mha/master_ip_online_change.sh 10.1.1.100 1"
# 设置故障发生后关闭故障主机脚本
# shutdown_script="/etc/mha/power_manager"
[server1]
hostname=10.1.1.10
port= 3306
candidate_master=1
[server2]
hostname=10.1.1.20
port= 3306
candidate_master=1
[server3]
hostname=10.1.1.30
port= 3306
candidate_master=1

11上传相应脚本/etc/mha目录,然后更改配置信息,授权
[root@mha ~]# ls /etc/mha/
app1.conf  master_ip_failover.sh
注意:脚本内容中要修改网卡名字和连接用户为admin
my $vip  = shift;
my $interface = 'ens33';		网卡名(38行)
my $key = shift;
...
sub stop_vip() {
    my $ssh_user = "admin";		用户名(110行)
    print "=======$ssh_stop_vip==================\n";
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

[root@mha ~]# chmod +x /etc/mha/master_ip_*

12.检测SSH互信以及MySQL主从状态
在mha管理节点:
# su - admin
# 检测SSH互信
[admin@mha ~]$ masterha_check_ssh --conf=/etc/mha/app1.conf
# 检测集群状态
[admin@mha ~]$ masterha_check_repl --conf=/etc/mha/app1.conf

13。检查MHA状态,然后运行MHA(监控开始)
在mha管理节点:
[admin@mha ~]$ masterha_check_status --conf=/etc/mha/app1.conf
app1 is stopped(2:NOT_RUNNING).

开启MHA Manager监控(关键,代表启动MHA):
[admin@mha ~]$ nohup masterha_manager --conf=/etc/mha/app1.conf --remove_dead_master_conf --ignore_last_failover &

再次查看监控状态:
[admin@mha ~]$ masterha_check_status --conf=/etc/mha/app1.conf
app1 (pid:8913) is running(0:PING_OK), master:10.1.1.10


注意:
1. 如果正常,会显示”PING_OK ”,否则会显示”NOT_RUNNING ”,说明 MHA监控没有开启
2. 使用admin用户启动监控,否则会报权限拒绝
3. 手动停止监控命令:masterha_stop --conf=/etc/mha/app1.conf

其中:步骤中的ip信息仅做参考,第11步需上传master_ip_failover.sh这个脚本

3.MHA自动Failover测试

1、在数据库MASTER服务器安装测试工具

[root@master ~]# yum -y install sysbench

2.插入测试数据
master服务器上创建测试库test
mysql> create database test charset utf8mb4;
Query OK, 1 row affected (0.17 sec)

mysql> grant all on *.* to 'mha'@'localhost' identified by '123'; 
Query OK, 0 rows affected (0.14 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.11 sec)


[root@master ~]# sysbench /usr/share/sysbench/oltp_read_only.lua \
 --mysql-host=10.1.1.10  --mysql-port=3306  --mysql-user=mha \
 --mysql-password=123  --mysql-socket=/tmp/mysql.sock \
 --mysql-db=test  --db-driver=mysql  --tables=1 \
 --table-size=100000 --report-interval=10 --threads=128 --time=120 prepare
 
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

3.拍摄快照(防止误操作,以免前功尽弃)
四个节点都要拍

4.模拟MASTER服务器故障

MASTER服务器:
service mysqld stop

MHA服务器:监控日志
[root@mgr ~]# tail -f /data/mha/masterha/app1/app1-3306.log

参考下图,自动切换成功

部分失败原因:

1.查看配置尤其注意ip端口等

2.参考下图,只读导致的切换失败及其解决方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值