注:keepalived可以实现两台主主数据库,其中一台宕机后,可切换至另一台的功能。本章讲解keepalived搭建。数据库主主,查看其他章
安装。(两台机器均需要安装)
tar -zxvfkeepalived-1.2.24.tar.gz
cdkeepalived-1.2.24
./configure--sysconf=/etc --with-kernel-dir=/lib/modules/2.6.32-573.el6.x86_64/ (centos6需要指定内核,7不需要)
Make && make install
ln -s/usr/local/sbin/keepalived /sbin/ (创建软连接)
chkconfig --addkeepalived
chkconfig--level 35 keepalived on (开机自启动)
yum -y installipvsadm (需要安装lvs)
配置keepalived.conf文件。在目录/erc/keepalived/下(第一台数据库服务器)
! ConfigurationFile for keepalived
global_defs {
router_id mysql-1 (设置服务器识别标识,以便区分)
}
vrrp_scriptvs_mysql_82 {
script"/etc/keepalived/bin/mysql.sh" (脚本路径)
interval 60
}
vrrp_instanceVI_82 {
state BACKUP (这里都要设置BACKUP)
interface eth0 (这里选择真实ip的网卡,通过ifconfig查看)
virtual_router_id 51 (两台都相同)
priority 100 (用来选举master,第二台设为50)
advert_int 1 (发送vrrp包的时间间隔,多久进行一次master选举。可以说是健康检查)
nopreempt (不抢占,即允许一个priority比较低的节点做为master)
authentication {
auth_type PASS (认证区域)
auth_pass 1111
}
track_script {
vs_mysql_82
}
virtual_ipaddress { (虚拟ip)
192.168.31.2
}
}
virtual_server192.168.31.2 3306 { (虚拟ip)
delay_loop 2 (设置运行情况检测时间)
lb_algo wrr (轮询算法)
lb_kind DR (lvs负载均衡机制)
persistence_timeout 60 (会话保持时间)
protocol TCP
real_server 192.168.31.129 3306 { (真实ip)
weight 3 (权值)
TCP_CHECK {
connect_timeout 3 (连接超时时间)
nb_get_retry 3 (重连次数)
delay_before_retry3 (重连间隔时间)
connect_port 3306 (健康检查端口)
}
}
}
配置第二台数据库服务器的配置文件:(ip:192.168.31.130)
! ConfigurationFile for keepalived
global_defs {
router_id mysql-2
}
vrrp_scriptvs_mysql_82 {
script"/etc/keepalived/bin/mysql.sh"
interval 60
}
vrrp_instanceVI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
vs_mysql_82
}
virtual_ipaddress { (VIP)
192.168.31.2
}
}
virtual_server192.168.31.2 3306 { (vip)
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.31.130 3306 { (真实ip)
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry3
connect_port 3306
}
}
}
两台服务器配置好后,进入目录:/etc/keepalived/bin/(原先是没有bin目录,先创建一个),在bin目录下创建一个脚本,mysql.sh(两台服务器都需要)
#! /bin/bash
echo "enter mysql_check.sh" >>/etc/keepalived/check_mysql.log
LOG_FILE=/etc/keepalived/check_mysql.log
CHECK_TIME=3
#mysql is working MYSQL_OK is 1,mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth () {
mysql -uroot -p123 -e"show status;" &> /dev/null
if [ $? = 0 ];then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return$MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ];do
let "CHECK_TIME =1"
check_mysql_helth
if [ $MYSQL_OK = 1];then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK = 0];then
/etc/init.d/keepalived stop
echo `date--date=today +"%Y-%M-%d %H:%m:%S"` -[INFO] -mysql invaild. keepalivedstop. >> $LOG_FILE
exit 1
fi
sleep 1
done
之后保存退出,运行一下脚本,没有显示什么,echo $? 为0。
停止MYSQL服务器,再执行一边脚本,若出现keepalived被关闭,则OK
可以去/etc/keepalived/目录下查看脚本日志
可以ip addr 查看现在vip被哪台服务器使用
可以tail -f /var/log/message 查看keepalived日志
可以使用第三台服务器登录数据库测试(需授权第三台数据库的登录权限)
需要设置一个重启mysql 和keepalived脚本
在上面的keepalived.conf配置中,有些网站的脚本只是pkill keepalived一句话而已,然后配置文件中有一句
notify_down 脚本路径.
一开始我也是这种方法,但一直失败。
改用这种即可。