mha mysql github_MHA+ProxySQL,mysql的高可用集群+读写分离(二)MHA搭建与VIP策略

一 MHA介绍

MHA是一个日本人yoshinorim创建的高可用架构,其实主要就是基于主从复制的一段perl程序,一个shell脚本。

二 安装

2.1 下载MHA

1、安装perl环境

sudo yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN*

2、下载mha

本次使用版本为v0.58。

https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

wget下载:

wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz

wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz

0.58的更新内容:

几个错误修正

IPV6支持

super_read_only 支持

force_storage_engine 支持

2.2 安装MHA-node

tar -zxvf mha4mysql-node-0.58.tar.gz

cd mha4mysql-node-0.58

perl Makefile.PL

make && make install

所有节点都执行

2.3 安装MHA-manager

只有主库需要安装

tar -zxvf mha4mysql-node-0.58.tar.gz

tar -zxvf mha4mysql-manager-0.58.tar.gz

perl Makefile.PL

make && make install

manager安装完成后,使用MHA脚本进行SSH检测

### 检测ssh

/usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf

[root@iZm5eh3yfwvy52yb78f6obZ scripts]# /usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf

……

……

……

Tue Mar 31 17:18:44 2020 - [info] All SSHconnectiontests passed successfully.

使用MHA脚本进行主从检测

# 检测主从

/usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf

# 检测主从结果

[root@iZm5eh3yfwvy52yb78f6obZ scripts]# /usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf

……

……

……

MySQL ReplicationHealthis OK.

2.4 启动mha

管理节点:

nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &

# 查看mha是否启动成功

masterha_check_status --conf=/etc/mha/mha.conf

[root@iZm5eh3yfwvy52yb78f6obZ ~]# nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &

[1] 28153

[root@iZm5eh3yfwvy52yb78f6obZ ~]# masterha_check_status --conf=/etc/mha/mha.conf

mha (pid:28153) is running(0:PING_OK), master:172.31.145.39

三、故障转移测试

3.1 故障转移

在主库上停掉mysql

systemctl stop mysqld

查看日志,成功转移

tail -fn100 /usr/local/mha/manager.log

Master failover to 172.31.145.38(172.31.145.38:3306) completed successfully.

在从库2节点上,进入mysql

show slave status \G;

可以看到Master节点已变成从库1

……

Master_Host: 172.31.145.38

……

3.2 重新加入集群

如果node1节点故障已排除,重新添加入集群,这个节点只能作为从库了

systemctl start mysqld

mysql -u root -PZw@369012

# 注意大写

CHANGE MASTER TO MASTER_HOST='172.31.145.38',MASTER_USER='repl',MASTER_PASSWORD='replZw@1987',MASTER_AUTO_POSITION=1;

start slave;

show slave status \G;

四、添加VIP与自动转移

4.1、添加虚拟ip

ip addr add 10.0.0.55 dev eth0

# 查看ipipaddr show

如果设置错了,可以删除

# 删除ipipaddr del 10.0.0.55 dev eth0

# 查看ipip-o -f inet addr show

使用failover脚本中的方式,在管理节点上,用ssh的方式给主节点添加vip,测试下

ssh root@172.31.145.38 /usr/sbin/ip addr add 172.31.145.200 brd 172.31.159.255 dev eth0 label eth0:0;/usr/sbin/arping -q -A -c 1 -I eth0 172.31.145.200;iptables -F;

4.2 添加自动转移vip脚本

master_ip_failover_script=/usr/local/scripts/master_ip_failover

master_ip_online_change_script=/usr/local/scripts/master_ip_online_change

编辑脚本内容,将manager解压包中的sample文件下的scripts脚本搬运过来,然后编辑,添加vip内容。

cd /home/mysql/MHA/mha4mysql-manager-0.58/samples/scripts

cp master_ip_failover /usr/local/scripts

cp master_ip_online_change /usr/local/scripts

vim /usr/local/scripts/master_ipfailover

添加如下内容:

# 在my函数前声明

my $vip = '10.0.0.66/24';

my $key = '2';

…………

# 在sub main 函数下添加内容

sub drop_vip{

my $output = `ssh -o ConnectTimeout=15 -o ConnectionAttempts=3 $orig_master_host /sbin/ip addr del $vip/32 dev $key`;

}

sub add_vip{

my $output = `ssh -o ConnectTimeout=15 -o ConnectionAttempts=3 $new_master_host /sbin/ip addr add $vip/32 dev $key`;

}

另一种ssh的方式,报错了:

# 在my函数前声明

my $vip = '10.0.0.66/24';

my $key = '2';

my $ssh_start_vip = "/sbin/ifconfig eno16777736:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eno16777736:$key down";

# 在sub main 函数下添加内容

sub start_vip(){

`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;

}

sub stop_vip(){

return 0 unless ($ssh_user);

`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;

}

4.3 切换测试

# 查看mha是否启动成功

masterha_check_status --conf=/etc/mha/mha.conf

# 当前状态是NOT_RUNNING

mha is stopped(2:NOT_RUNNING).

# 启动MHA

nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &

[1] 2988

# 启动后再次查看

masterha_check_status --conf=/etc/mha/mha.conf

# master当前是172.31.145.39

mha (pid:2988) is running(0:PING_OK), master:172.31.145.39

node1上停掉master测试,看master、vip是否都自动转移到172.31.145.38上:

# 在master机器172.31.145.39上停掉mysql

systemctl stop mysql

管理节点查看mha日志

……

……

……

Failed to activate master IP address for 172.31.145.38(172.31.145.38:3306) with return code 10:0

172.31.145.40(172.31.145.40:3306): OK: Slave started, replicating from 172.31.145.38(172.31.145.38:3306)

172.31.145.38(172.31.145.38:3306): Resetting slave info succeeded.

Master failover to 172.31.145.38(172.31.145.38:3306) completed successfully.

转移master成功,但是在node2机器上,ip addr show 看了下,vip并没有转移成功。

4.4 failover总结

1).配置文件检查阶段,这个阶段会检查整个集群配置文件

2).宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作

3).复制dead master和最新slave相差的relay log,并保存到MHA Manger具体的目录下

4).识别含有最新更新的slave

5).应用从master保存的二进制日志事件(binlog events)

6).提升一个slave为新的master进行复制

7).使其他的slave连接新的master进行复制

4.5 failover报错

遇到启动mha、切换vip等失败错误,第一时间需要查看日志

tail -fn100 /usr/local/mha/manager.log

错误1:

Failover error flag file /usr/local/mha/mha.failover.error exis

删除 /usr/local/mha/mha.failover.error

cd /usr/local/mha/

rm -rf /usr/local/mha/mha.failover.error

# 如果转移成功的,要重启,成功日志也要删除

rm -rf /usr/local/mha/mha.failover.complete

nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &

masterha_check_status --conf=/etc/mha/mha.conf

tail -fn100 /usr/local/mha/manager.log

错误2:

Unknown option: ssh_user

Died at /usr/local/scripts/master_ip_failover line 270.

错误3:

Bareword "FIXME_xxx" not allowed while "strict subs" in use at /usr/local/scripts/master_ip_failover line 100.

注释100行 FIXME_xxx"。

错误4:

Unrecognized character \xC2; marked by

错误2、3、4都需要查看文件是哪行报错了,多数是格式、变量的问题。

五、结语

如果只用MHA的话,VIP这步必不可少,否则就只能启到集群的作用,不能负载。

但是如果用了mycat、proxySQL这样的中间件,实际上就不需要VIP这步了。MHA能做到自动转移故障就行了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值