架构图

安装步骤省略。
158.140 keepalived.conf
! Configuration File for keepalived
global_defs { #全局标识模块
notification_email { #定义邮件通知
test@163.com #目标邮箱
}
notification_email_from test@163.com #发送邮箱
smtp_server 127.0.0.1 #发送邮箱的smtp服务器
smtp_connect_timeout 30 #smtp服务器连接超时时间
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP #本实例启动状态:MASTER/BACKUP
interface eth0 #监控的网络接口
virtual_router_id 51 #vrrp实例(同一个组主备服务器设置一样)
priority 100 #优先级高的为master,不能超过255。(BACKUP可设置为50)
advert_int 1 #均衡器检测间隔1秒(服务器设置都一样)
# nopreempt
authentication { #验证类型及密码(服务器设置都一样)
auth_type PASS #认证方式,PASS或AH
auth_pass 123456 #认证密码
}
virtual_ipaddress { #虚拟ip地址virtual_ipaddress,可以定义多个
192.168.158.120
}
}
virtual_server 192.168.158.120 3306 { #定义虚拟服务器,与上面的virtual_server一样
delay_loop 6 #健康检查时间间隔,6秒
lb_algo wrr #负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
lb_kind DR #负载均衡转发规则:NAT|DR|TUN
nat_mask 255.255.255.0
persistence_timeout 50 #回话保持时间50秒,动态服务建议开启
protocol TCP #转发协议protocol,一般有tcp和udp两种
#后端真实服务器,有几台就设置几个
real_server 192.168.158.140 3306 {
weight 1 #权重越大负载分越大,0表示失效
#notify_down /etc/keepalived/mysqlcheck/mysql.sh
SSL_GET { #健康检查方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
158.141 keepalived.conf
! Configuration File for keepalived
global_defs { #全局标识模块
notification_email { #定义邮件通知
test@163.com #目标邮箱
}
notification_email_from test@163.com #发送邮箱
smtp_server 127.0.0.1 #发送邮箱的smtp服务器
smtp_connect_timeout 30 #smtp服务器连接超时时间
router_id LVS_1
}
vrrp_instance VI_1 {
state BACKUP #本实例启动状态:MASTER/BACKUP
interface eth0 #监控的网络接口
virtual_router_id 51 #vrrp实例(同一个组主备服务器设置一样)
priority 99 #优先级高的为master,不能超过255。(BACKUP可设置为50)
advert_int 1 #均衡器检测间隔1秒(服务器设置都一样
authentication { #验证类型及密码(服务器设置都一样)
auth_type PASS #认证方式,PASS或AH
auth_pass 123456 #认证密码
}
virtual_ipaddress { #虚拟ip地址virtual_ipaddress,可以定义多个
192.168.158.120
}
}
virtual_server 192.168.158.120 3306 { #定义虚拟服务器,与上面的virtual_server一样
delay_loop 6 #健康检查时间间隔,6秒
lb_algo wrr #负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
lb_kind DR #负载均衡转发规则:NAT|DR|TUN
nat_mask 255.255.255.0
persistence_timeout 50 #回话保持时间50秒,动态服务建议开启
protocol TCP #转发协议protocol,一般有tcp和udp两种
#后端真实服务器,有几台就设置几个
real_server 192.168.158.141 3306 {
weight 1 #权重越大负载分越大,0表示失效
#notify_down /etc/keepalived/mysqlcheck/mysql.sh
SSL_GET { #健康检查方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
VIP
ifconfig eth0:0 192.168.158.120 netmask 255.255.255.0 up ifconfig eth0:0 ifconfig eth0:0 up ip a s dev eth0
check.sh
#!/bin/bash while [ true ]; do /bin/sleep 1 sh mysql_status.sh done
mysql_status.sh
#!/bin/bash
#/usr/bin/nmap localhost | grep 3306
#lsof -i:3306
MYSQLPORT=`netstat -tlnp | grep "3306"|awk -F[:" "]+ '{print $4}'`
function checkMysqlStatus(){
/usr/bin/mysql -uroot -plizhenghua --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1
if [ $? -ne 0 ]
then
restartMysqlService
if [ "$MYSQLPORT" == "3306" ];then
echo "mysql restart successful......"
else
echo "mysql restart failure......"
echo "Server: $MYSQLIP mysql is down, please try to restart mysql by manual!" > /var/log/mysqlerr
#mail -s "WARN! server: $MYSQLIP mysql is down" admin@yourdomain.com < /var/log/mysqlerr
fi
else
echo "mysql is running..."
fi
}
function restartMysqlService(){
# echo "测试重启mysql服务!"
echo "清除mysql残余!"
chengkill mysqld
echo "关闭keepalived!!"
chengkill keepalived
echo "清除成功!"
}
if [ "$MYSQLPORT" == "3306" ]
then
checkMysqlStatus
else
restartMysqlService
fi
主主
CHANGE MASTER TO MASTER_HOST='192.168.158.140',MASTER_USER='sync',MASTER_PASSWORD='sync',MASTER_LOG_FILE='mysql-bin.000125',MASTER_LOG_POS=286514181; start slave; show slave status G
漂移
守护进程模式启动check.sh check会自动运行mysql_status.sh脚本, mysql_status脚本的功能是 检测当前mysql, 当mysql挂掉的时候, 一起干掉keepalived, 这样, 即可实现漂移。