#!/bin/bash
#以下只测试故障切换,未涉及到LVS及故障隔离等,因此不需要arp抑制,所以不必动/etc/sysctl,此故障切换可以防止单点,可应用于REDIS/MEMCACHE/MYSQL等服务。现在简单测试NGINX
#编译的时候会提示configure: WARNING: keepalived will be built without libnl support.
#以及缺少configure: error: Popt libraries is required
yum install popt-devel libnl-devel -y
mkdir -p /root/software && cd /root/software
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure --prefix=/usr/local/keepalived/ -disable-lvs-syncd -disable-lvs 
#不做lvs用,如果要做lvs,./configure --prefix=/usr/local/keepalived/
make && make install && cd ..
#如果不指定prefix,那么可执行文件在 /usr/local/sbin/  配置文件在/usr/local/etc/
#指定目录/usr/local/keepalived/ ,则可执行文件和配置文件等都在这个目录下面
#keepalive默认的配置文件位置 /etc/keepalived/keepalived.conf
mkdir -p /etc/keepalived/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig keepalived on
sed -i '14 d' /etc/sysconfig/keepalived
echo 'KEEPALIVED_OPTIONS="-f /etc/keepalived/keepalived.conf -D"' >>/etc/sysconfig/keepalived
#ps -ef |grep keepalived
#Keepalived 正常运行时,共启动 3 个进程,其中一个进程是父进程,负责监控其子进程;一
#个是 vrrp 子进程;另外一个是 checkers 子进程。
# /etc/init.d/keepalived --help
#Usage: /etc/init.d/keepalived {start|stop|reload|restart|condrestart|status}
#service keepalived
#Usage: /etc/init.d/keepalived {start|stop|reload|restart|condrestart|status}
#看一下配置文件,如果不需要LVS,后面的配置文件可以直接删掉
:<<glq
cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     51061358#qq.com
   }
   notification_email_from 51061358#qq.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id web   //自定义命名
}
    vrrp_script chk_http_port {
    script "/root/sh/check_ng.sh"
    interval 1   //检测脚本执行的间隔
    }
vrrp_instance VI_1 {  //vrrp实例,可以有多个
    state MASTER    //备的是BACKUP
    interface eth0  //注意指定网卡接口
    virtual_router_id 51  //id主备要一致
    priority 151   //若 MASTER 的 priority 值为 150,那么 BACKUP的 priority 只能是 140 或更小的数值。
    advert_int 1  //同步通知间隔 advert_int .MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    authentication {
        auth_type PASS
        auth_pass 1111   //密码要一致
    }
   track_script {     
            chk_http_port    //调用脚本
            }
    virtual_ipaddress {
        192.168.2.199    //VIP,可以有多个地址
    }
}
#看下脚本
cat /root/sh/check_ng.sh
#!/bin/bash
status=`ps -ef |grep nginx|grep -v grep|wc -l`
Date=`date --date today +%D_%T`
if [ $status -eq 0 ];then
   echo $Date >> /root/jiankong_log/check_ng.log
   /etc/init.d/keepalived stop
fi
扩展阅读:http://www.keepalived.org/pdf/sery-lvs-cluster.pdf
glq