keepalived配置
自动切换使用keepalived软件实现
Section titled “自动切换使用keepalived软件实现”在上面两互备服务器基础上, 每台服务器都安装keepalived
MASTER: 192.168.1.94BACKUP: 192.168.1.92VIP: 192.168.1.90
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gztar xzvf keepalived-1.2.2.tar.gzcd keepalived./configure --prefix=/usr/local/keepalivedmake && make install
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/service keepalived start
keepalived配置文件参考
Section titled “keepalived配置文件参考”[root@vmCentos keepalived]* cat /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs { notification_email { } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL}
# 如果执行自定义脚本添加如下配置# vrrp_script check_run {# script "/root/keepalived_check_mysql.sh"# interval 5# }
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass acmeptt } # 如果执行自定义脚本添加如下配置 # track_script { # check_run # } virtual_ipaddress { 192.168.1.90 }}
测试服务器切换
Section titled “测试服务器切换”在服务器94上执行: ip a
,可以看到主服务器已经绑定虚拟IP
[root@localhost ~]* ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether b8:ac:6f:c2:b0:8e brd ff:ff:ff:ff:ff:ff inet 192.168.1.94/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.90/32 scope global eth0 inet6 fe80::baac:6fff:fec2:b08e/64 scope link valid_lft forever preferred_lft forever
- ping VIP,保证虚拟服务器可以正常连接
- telnet 相关服务端口
- 在主服务器上停止keepalive服务后,重复上面两步操作
自定义脚本示例
Section titled “自定义脚本示例”vim /root/keepalived_check_mysql.sh#!/bin/bashMYSQL=/usr/local/mysql/bin/mysqlMYSQL_HOST=localhostMYSQL_USER=rootMYSQL_PASSWORD=passwordCHECK_TIME=3# mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0MYSQL_OK=1function check_mysql_helth (){$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status;" >/dev/null 2>&1if [ $? = 0 ] ;thenMYSQL_OK=1elseMYSQL_OK=0fireturn $MYSQL_OK}while [ $CHECK_TIME -ne 0 ]dolet "CHECK_TIME -= 1"check_mysql_helthif [ $MYSQL_OK = 1 ] ; thenCHECK_TIME=0exit 0fiif [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]then/etc/init.d/keepalived stopexit 1fisleep 1done