安装keepalived

# ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/ && make && make install
#ln  -s  /usr/local/sbin/keepalived /sbin/
# chkconfig  keepalived  on


修改网卡配置

# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.2
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.1.2
ONBOOT=yes

 

修改内核文件配置

# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
# sysctl -p

 

修改keepalived配置文件

# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
vrrp_script chk_mysql_port {
                script "/var/shell/mysql_check.sh"
                interval 2
                weight 2
}
global_defs {
   notification_email {
        445970860@qq.com
   }
 
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER    (BACKUP备用)
    interface eth0
    virtual_router_id 51
    priority 100     (backup须优先级低于master)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
                chk_mysql_port
        }
    virtual_ipaddress {
        192.168.1.2
    }
 
}
virtual_server 192.168.1.2 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.1.1 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.3 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


编写脚本(监控mysql,当mysql出现问题不能重新启动时停止nginx服务,keepalived服务会将出现问题的web服务器从集群中剔除出去)

# vim mysql_check.sh
#!/bin/bash
MYSQL_SLAVE=`ps -C mysqld | grep -v PID | wc -l`
if [ $MYSQL_SLAVE -eq 0 ];then
        /etc/init.d/mysqld restart
        sleep 3
        if [ `ps -C mysqld | grep -v PID | wc -l` -eq 0 ];then
                pkill -9 nginx
        fi
fi