nginx+keepalived


vi /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

        abc@abc.com

   }

   notification_email_from abc@abc.com

   smtp_server mail.abc.com

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script chk_nginx {

    script “/etc/keepalived/chk_nginx.sh”

    interval 2

    weight 2

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 101

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

track_script {

        chk_nginx    #监测nginx进程状态

}

    virtual_ipaddress {

        172.16.33.123

    }

}

vi /etc/keepalived/chk_nginx.sh

#!/bin/sh

# check nginx server status

NGINX=/usr/local/nginx/sbin/nginx

PORT=80

nmap localhost -p $PORT | grep “$PORT/tcp open”

if [ $? -ne 0 ];then

/etc/init.d/keepalived stop

fi


nginx+keepalived实现双机热备高可用


北京服务器托管公司

北京服务器托管公司

安装nginx(两台安装配置都一样!)
#添加运行nginx的用户和组www

groupadd www
useradd -g www www
#安装依赖
yum install pcre pcre-devel
#开始安装nginx
wget http://sysoev.ru/nginx/nginx-0.7.51.tar.gz
tar zxvf nginx-0.7.51.tar.gz
cd nginx-0.7.51/
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module
make && make install
#keepalived安装
yum install openssl-devel
cd /tmp
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar xzf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./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/
keepalived的配置
更详细的keepalived配置文件说明可以执行man keepalived.conf查看。
我们假设主服务器IP:192.168.1.103,从服务器ip:192.168.1.101 虚拟ip:192.168.1.110
下面对主服务器的keepalived进行配置:

vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@centos.bz
}
notification_email_from keepalived@domain.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh”
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER ############ 辅机为 BACKUP
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.1.103
priority 102 ########### 权值要比 back 高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.1.110
}
}

从服务器:

global_defs {
notification_email {
admin@centos.bz
}
notification_email_from keepalived@domain.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh”
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.1.101
priority 101 ##########权值 要比 master 低。。
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.1.110
}
}
之后分别在主从服务器建立nginx的监控脚本:

vi /opt/nginx_pid.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx –no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
然后分别启动主从服务器的keepalived:

service keepalived start
keepalived的测试
我们在主服务器上执行命令ip a,显示如下:

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:aa:a1:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 255.255.255.255 scope global eth0
inet 192.168.1.110/32 scope global eth0
证明主服务器已经绑定了虚拟ip 192.168.1.110
在从服务器上执行命令ip a,显示如下:

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:2b:94:3b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.101/24 brd 255.255.255.255 scope global eth0
显示表明从服务器上没有绑定vip 192.168.1.110,只有本机真实ip192.168.1.101
下面我们停止主服务器的nginx进程,再看看ip绑定情况:
主服务器的情况:

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:aa:a1:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 255.255.255.255 scope global eth0
从服务器的情况:

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:2b:94:3b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.101/24 brd 255.255.255.255 scope global eth0
inet 192.168.1.110/32 scope global eth0
由此可见vip已经指向了从服务器。