教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > MYSQL教程 >

keepalived架设mysql负载均衡方案改良版本(2)

时间:2012-07-31 10:03来源:kongch 作者:ken 点击:

keepalived强大的启动参数可以帮助我们来实现这一点,但也需要我们写脚本来配合。我在这里做了些改动,主要有四个脚本。

1.startMySQL.sh 用来启动MySQL服务。

#!/bin/sh
/etc/init.d/mysql start
keepalived -D -d -S 0 -f /etc/keepalived/keepalived.conf --vrrp_pid /var/run/vrrp.pid

启动MySQL都用这个脚本。它做了两件事情:1、启动mysqld;2、启动keepalived。并且将vrrp进程的pid写入/var/run/vrrp.pid中——这个很关键。

2.pingM.sh 用来监控MySQL服务

#!/bin/sh
mysql -u root -ppass -N -h 127.0.0.1 -e "select 1;" databasename>>/dev/null
exit $?

如果db正常,则返回0.否则返回1.keepalived的判断完全基于这个返回码。

当然,我们可以很灵活地更加个性化地写自己的MySQL监控程序来加入这个脚本,让keepalived的监控更加精确。

3.when_db_down.sh 当MySQL down时触发的脚本

#!/bin/sh
if [ -f /var/run/vrrp.pid ]; then
pkill keepalived
ip -s -s a f to 10.224.178.5/32
#only run health check when mysql goes down
keepalived -C -D -d -S 0 -f /etc/keepalived/keepalived.conf
fi

这里就用到了我们之前写的vrrp.pid文件。我们判断这个文件的存在性,如果存在则关闭整个keepalived服务,然后再单独开启keepalived的healthcheck进程,用来检查MySQL是否又启动了。

这个判断的作用在于,如果MySQL一直未恢复,那么healthcheck进程依旧会定时的触发when_db_down.sh脚本,这时由于vrrp.pid不存在,因而不会做任何事情。免掉了healthcheck进程被pkill杀死又启动这样的麻烦事。

ip -s -s a f to 10.224.178.5/32

的作用在于手动删除VIP,因为我有时发现keepalived被杀死后,VIP还在ip table中,手动删除确保VIP不再对外。

4.when_db_up.sh 当MySQL恢复后触发的脚本

#!/bin/sh
pkill keepalived
/root/startMysql.sh

杀死当前的healthcheck进程,然后再用脚本1启动MySQL服务。

经过测试,客户端访问10.224.178.5:3306。首先链接机器A,当机器A的MySQL宕机后。客户端会出现connection lost的exception。但3s-5s后重试,便可成功连接到机器B。而当机器A上MySQL恢复后,keepalived自动再次启用VIP,但客户端连接依旧保持在B上——这点很重要!只有当B上的MySQL挂了,连接才会跟之前一样,切换到A上。否则B就一直作为master对外服务。站长教学网 eduyo.com

两台机器其实不分主备,因为都有可能承担全部的服务请求,所以硬件配置上没有孰优孰劣之说。

(责任编辑:ken)
TAG标签: mysql 负载均衡 keepalived
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容