atlas mysql mha_解决atlas与mha结合使用方案

本文介绍了如何解决在启用MHA(MySQL High Availability)后,Atlas读写分离遇到的问题。当主库宕机,MHA漂移VIP时,Atlas的配置文件中的主从IP不再适用。解决方案是所有MySQL服务器安装Atlas,通过监控VIP判断主从状态,并动态调整Atlas配置。详细步骤包括安装Atlas,修改配置文件,启动MHA,配置VIP,以及故障模拟测试。
摘要由CSDN通过智能技术生成

1 .解决atlas与mha结合使用解决方案

1.1 解决atlas与mha结合使用解决方案

4f49e42efd69341df976e8afac42b13c.gif

问题点:

如果开启了MHA并且配置了Atlas读写分离。那么就会有一个问题。因为之前atlas都是配置好主库IP和从库IP的。一旦主库宕机,那么MHA就

会将VIP漂移到从库。那么atlas的读写分离就会出现问题。因为配置文件里面已经规定了写定了IP,谁是主谁是从。就算是有VIP,但是变为

主库的从库的IP该如何摘除???

解决思路:

所有mysql服务器都装atlas。一旦主库宕机(不管是服务宕还是主机宕),那么atlas就随之关闭(通过死循环检查是否有虚拟IP来判断,

主库是否宕机)。从库一旦检查到自己有VIP那么角色就成为主库,那么atlas就启动(通过死循环来检测是否有vip。如果有就启动atlas)

每台的atlas配置文件不相同,只需要将自己的ip从从库中去除即可

1.2 实际操作步骤:

所有MySQL主机安装Atlas。

修改Atlas配置文件

启动mha。实现MySQL高可用

配置VIP(主库配置)

开启监控脚本

故障模拟测试

#所有MySQL主机安装Atlas(之前db01已经安装过就不需要在安装了)

[root@mysql-db02 tools]# ll

total 4972

-rw-r--r-- 1 root root 4963681 Jul  2 23:44 Atlas-2.2.1.el6.x86_64.rpm

[root@mysql-db02 tools]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

Preparing...                ########################################### [100%]

1:Atlas                  ########################################### [100%]

#安装db03

[root@mysql-db03 tools]# ll

total 4972

-rw-r--r-- 1 root root 4963681 Jul  2 23:44 Atlas-2.2.1.el6.x86_64.rpm

[root@mysql-db02 tools]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

Preparing...                ########################################### [100%]

1:Atlas                  ########################################### [100%]

#修改Atlas配置文件,只需要修改从库即可

[root@mysql-db02 ~]# vim /usr/local/mysql-proxy/conf/test.cnf

…………

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

proxy-backend-addresses=118.190.201.25:3307

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

proxy-read-only-backend-addresses=118.190.201.70:3307

…………

[root@mysql-db03 ~]# vim /usr/local/mysql-proxy/conf/test.cnf

………

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

proxy-backend-addresses=118.190.201.25:3307

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

proxy-read-only-backend-addresses=118.190.201.69:3307

………

PS:这里只需要将从库地址填写为其他从库地址即可。连接IP因为使用的是VIP所以不需要进行修改

#启动mha。实现MySQL高可用

#检查mha配置文件

[root@mysql-db03 ~]# cat /etc/mha/app1.cnf

[server default]

manager_log=/var/log/mha/app1/manager

manager_workdir=/var/log/mha/app1

master_binlog_dir=/application/mysql/data

master_ip_failover_script=/usr/local/bin/master_ip_failover

password=mha

ping_interval=2

repl_password=123456

repl_user=rep

ssh_user=root

user=mha

[server1]

hostname=118.190.201.68

port=3307

[server2]

hostname=118.190.201.69

port=3307

[server3]

hostname=118.190.201.70

port=3307

[binlog1]

hostname=118.190.201.70

master_binlog_dir=/data/mysql/binlog/

no_master=1

#拉取binlog日志,(因为配置了binlog-server)

[root@mysql-db03 binlog]# cd /data/mysql/binlog/

[root@mysql-db03 binlog]# mysqlbinlog -R --host=10.0.0.51 --port=3307 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &

#启动mha

[root@mysql-db03 binlog]# 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

#配置VIP(主库配置)

[root@mysql-db01 ~]# ifconfig eht0:0 118.190.201.25/24 up

#启动监控脚本

#脚本内容

[root@mysql-db01 ~]# cat switch_atlas.sh

#!/bin/bash

while true

do

Vip=`ifconfig eth0:0|awk -F"[ :]+" 'NR==2{print $4}'`

Status=`ps -ef|grep mysql-proxy|grep -v "grep mysql-proxy"|wc -l`

if [ "$Vip" == '118.190.201.25' ]

then

if [ "$Status" != '2' ]

then

/usr/local/mysql-proxy/bin/mysql-proxyd test start 2>&1 >/dev/null

fi

else

if [ "$Status" == '2' ]

then

/usr/local/mysql-proxy/bin/mysql-proxyd test stop 2>&1 >/dev/null

fi

fi

sleep 1

done

#启动脚本(所有MySQL服务器都开启)

[root@mysql-db01 ~]# sh switch_atlas.sh &

[root@mysql-db02 ~]# sh switch_atlas.sh &

[root@mysql-db03 ~]# sh switch_atlas.sh &

#下面就可以进行测试了

#模拟主库宕机

[root@mysql-db01 ~]# /etc/init.d/mysqld stop

Shutting down MySQL...... SUCCESS!

#检查atlas状态,atlas有两个进程,如果是2代表开启。

[root@mysql-db01 ~]# ps -ef|grep mysql-proxy|grep -v "grep mysql-proxy"|wc -l

0

#新主库上查看atlas状态

[root@mysql-db02 ~]# ps -ef|grep mysql-proxy|grep -v "grep mysql-proxy"|wc -l

2

#检查VIP是否漂移

[root@mysql-db02 ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:50:56:28:F8:72

inet addr:118.190.201.25  Bcast:118.190.201.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

#登录atlas管理界面,查看后端代理的库

[root@mysql-db02 ~]# mysql -uuser -ppwd -h127.0.0.1 -P2345

mysql> SELECT * FROM backends;

+-------------+------------------------+-------+------+

| backend_ndx | address         | state | type |

+-------------+------------------------+-------+------+

|           1 | 118.190.201.25:3307 | up    | rw   |     #主库读写

|           2 | 118.190.201.70:3307 | up    | ro   |     #从库只读(read-only)

+-------------+------------------------+-------+------+

2 rows in set (0.00 sec)

如无特殊说明,文章均为本站原创,转载请注明出处

本文永久链接地址:https://www.xionghaier.cn/archives/474.html

该文章由

d4f2769895eefb816f09e7fb41486950.png

这货来去如风,什么鬼都没留下!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值