解决atlas与mha结合使用方案

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

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

问题点:

如果开启了MHA并且配置了Atlas读写分离。那么就会有一个问题。因为之前atlas都是配置好主库IP和从库IP的。一旦主库宕机,那么MHA就
会将VIP漂移到从库。那么atlas的读写分离就会出现问题。因为配置文件里面已经规定了写定了IP,谁是主谁是从。就算是有VIP,但是变为
主库的从库的IP该如何摘除???

解决思路:

所有mysql服务器都装atlas。一旦主库宕机(不管是服务宕还是主机宕),那么atlas就随之关闭(通过死循环检查是否有虚拟IP来判断,
主库是否宕机)。从库一旦检查到自己有VIP那么角色就成为主库,那么atlas就启动(通过死循环来检测是否有vip。如果有就启动atlas)
每台的atlas配置文件不相同,只需要将自己的ip从从库中去除即可

1.2 实际操作步骤:

  1. 所有MySQL主机安装Atlas。
  2.  修改Atlas配置文件
  3. 启动mha。实现MySQL高可用
  4. 配置VIP(主库配置)
  5. 开启监控脚本
  6. 故障模拟测试

 

#所有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)
0
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到