安装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