nginx+keepalive双机热备 自动切换


规划:

系统:cenots 6.5 x64

用途     IP地址              部署模块

主用         10.0.1.133 nginx+keepalive

备用         10.0.1.134 nginx+keepalive

虚拟IP:10.0.1.2

主用IP:10.0.1.133

备用IP:10.0.1.134


所有的操作是在root用户下进行的,否则会出现权限问题

su root

password


1安装keepalive 

yum install -y make wget   
mkdir -p /usr/src/lvs
cd /usr/src/lvs

#安装keepalive的依赖
yum install -y gcc openssl-devel popt-devel

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  
make && make install   

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/  
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/  
chmod +x /etc/init.d/keepalived  
chkconfig --add keepalived  
chkconfig keepalived on  
mkdir /etc/keepalived  
ln -s /usr/local/sbin/keepalived /usr/sbin/

2.安装nginx 

#安装一下相关组件
zlib-1.2.8.tar.tg
tar -zxvf zlib-1.2.8.tar.tg
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib-1.2.8
make && make install

pcre-8.7.tar.tg
tar -zxvf pcre-8.7.tar.tg
cd pcre-8.7
./configure --prefix=/usr/local/pcre-8.7
make && make install

openssl-1.0.2d.tar.tg
tar -zxvf openssl-1.0.2d.tar.tg
cd openssl-1.0.2d
./configure --prefix=/usr/local/openssl-1.0.2d
make && make install

nginx-1.2.5.tar.gz  
tar zxvf  nginx-1.2.5.tar.gz  
cd nginx-1.2.5  

./configure --prefix=/usr/local/nginx 
	--user=www --group=www  
	--with-http_stub_status_module 
	--with-http_ssl_module  
	--with-zlib=../zlib-1.2.80
	--with-pcre=../pcre-8.7
	--with-openssl=../openssl-1.0.2d
make && make install	

3.配置keepalive  

两台服务器端keepalived.conf内容都为如下,都设置为backup,不抢占,注意修改优先级不同,

更详细的keepalived配置文件说明可以执行man keepalived.conf查看:

//----------------------------------------------------------------

#10.0.1.133 keepalived.conf
! Configuration File for keepalived  
global_defs {  
   notification_email {  
    [email protected]  
        }  
   notification_email_from [email protected]  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
#监控服务.NGINX mysql等  
vrrp_script chk_nginx {  
    script "/home/check_nginx.sh"  
    interval 2  
    weight 2  
}  

vrrp_instance VI_1 {  
    state MASTER             #主从设置 MASTER  
    interface eth2           #网卡名  
    virtual_router_id 51  
    mcast_src_ip 10.0.1.133  #本机IP  
    priority 100             #从机小于主机  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        10.0.1.2  #VIP 的IP  
    }  
    track_script {  
        chk_nginx  #检测脚本  
    }  
}  

virtual_server 10.0.1.2 80 {  
    delay_loop 6  
    lb_algo rr  
    lb_kind DR  
    persistence_timeout 50  
    protocol TCP  

    real_server 10.0.1.133 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
    real_server 10.0.1.134 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
}  

nginx的检测脚本如下 :  
check_nginx.sh
#!/bin/bash  
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
then  
 /usr/local/nginx/sbin/nginx  
 sleep 5  
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
 then  
 killall keepalived  
 fi  
fi 

//----------------------------------------------------------------
10.0.1.134 keepalived.conf

! Configuration File for keepalived  
global_defs {  
   notification_email {  
    [email protected]  
        }  
   notification_email_from [email protected]  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
#监控服务.NGINX mysql等  
vrrp_script chk_nginx {  
    script "/home/check_nginx.sh"  
    interval 2  
    weight 2  
}  

vrrp_instance VI_1 {  
    state BACKUP  #主从设置 MASTER  
    interface eth2  #网卡名  
    virtual_router_id 51  
    mcast_src_ip 10.0.1.133 #本机IP  
    priority 50  #从机小于主机  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        10.0.1.2  #VIP 的IP  
    }  
    track_script {  
        chk_nginx  #检测脚本  
    }  

}  

virtual_server 10.0.1.2 80 {  
    delay_loop 6  
    lb_algo rr  
    lb_kind DR  
    persistence_timeout 50  
    protocol TCP  

    real_server 10.0.1.133 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
    real_server 10.0.1.134 80 {  
        weight 3  
        TCP_CHECK {  
            connect_timeout 10  
            nb_get_retry 3  
            delay_before_retry 3  
            connect_port 80  
        }  
    }  
}  

//----------------------------------------------------------------

nginx的检测脚本如下 :  
check_nginx.sh
#!/bin/bash  
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
then  
 /usr/local/nginx/sbin/nginx  
 sleep 5  
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]  
 then  
 killall keepalived  
 fi  
fi  

//----------------------------------------------------------------

在两台Web Server上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.1.2、抑制ARP广播。  

realserver.sh脚本
#!/bin/bash  
#description: Config realserver  

VIP=10.0.1.2  
   
/etc/rc.d/init.d/functions  
   
case "$1" in  
start)  
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP  
       /sbin/route add -host $VIP dev lo:0  
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
       sysctl -p >/dev/null 2>&1  
       echo "RealServer Start OK"  
       ;;  
stop)  
       /sbin/ifconfig lo:0 down  
       /sbin/route del $VIP >/dev/null 2>&1  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
       echo "RealServer Stoped"  
       ;;  
*)  
       echo "Usage: $0 {start|stop}"  
       exit 1  
esac  
exit 0  

//----------------------------------------------------------------
//----------------------------------------------------------------


你可能感兴趣的:(nginx,keepalived,centos,6.5)