KeepAlived+Nginx实现高可用负载,keepalivednginx


一、环境及安装版本:

centos6.5、Nginx1.4.7、keepalived1.3.2

虚拟IP

真是IP

Nginx端口

主从分配

10.0.90.215

10.0.90.217

80

MASTER

10.0.90.215

10.0.90.218

80

BACKUP

二、Nginx安装

分别在10.0.90.217、10.0.90.218两台机器安装Nginx

1、  安装Nginx所需要的安装包  

# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、  上传Nginx(nginx-1.4.7.tar.gz)到/usr/local/src目录

3、  编译安装Nginx

进入Nginx上传目录

# cd /usr/local/nginx

解压安装包

# tar –zxvf nginx-1.4.7.tar.gz

进入解压后的文件夹

# cd nginx-1.4.7

指定编译位置

# ./configure --prefix=/usr/local/nginx

编译安装

# make && make install

4、  配置Nginx

通过修改/conf/nginx.conf文件来修改Nginx的配置信息

# vim /usr/local/nginx/conf/nginx.conf

5、  系统防火墙中打开对应的端口80(默认80)或者关闭防火墙

# vim /etc/sysconfig/iptables

添加:

## nginx

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

添加后重启防火墙:

# service iptables restart

或者不做第5步上述配置直接关闭防火墙(不推荐)

# service iptables stop

 

6、  启动nginx

# /usr/local/nginx/sbin/nginx

检查是否启动成功

浏览器访问Nginx所在机器真实IP,如下显示即为成功

查看Nginx进程

# ps -ef|grep nginx

停止Nginx

# /usr/local/nginx/sbin/nginx -s stop

重启Nginx

# /usr/local/nginx/sbin/nginx -s reload

三、Keepalived安装(分别在10.0.90.217和10.0.90.218两台机器安装)

1、 上传或下载 keepalived(keepalived-1.3.2.tar.gz)到 /usr/local/src 目录

2、  解压安装

# cd /usr/local/src/

# tar -zxvf keepalived-1.3.2.tar.gz

# ./configure --prefix=/usr/local/keepalived

# make && make install

 

3、 将keepalived安装成Linux系统服务

因为没有使用keepalived的默认路径安装(默认是/usr/local),安装完成后,需要手动复制默认的配置文件到默认路径

# mkdir /etc/keepalived

# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

## 下面这个拷贝有时会找不到文件或文件夹导致无法复制

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ (可能不会成功)

## 可用如下拷贝替代:

# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/init.d/keepalived /etc/init.d/

# 继续下面命令
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ # ln -s /usr/local/sbin/keepalived /usr/sbin/ # ln -s /usr/local/keepalived/sbin/keepalived /sbin/

设置keepalived服务开机启动

# chkconfig keepalived on

4、修改keepalived配置文件

# vim /etc/keepalived/keepalived.conf

配置如下

! Configuration File for keepalived

global_defs {
    # keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP
   router_id server1 ## 标识本节点的字条串,通常为 hostname 
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" ## 检测 nginx 状态的脚本路径
    interval 2    ## 检测时间间隔
    weight -20    ## 如果条件成立,权重-20
}
vrrp_instance VI_1 {
    state MASTER    ## 主节点为 MASTER,对应的备份节点为 BACKUP
    interface eth0    ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth0
    virtual_router_id 146 ## 虚拟路由的 ID 号,两个节点设置必须一样
    mcast_src_ip 10.0.90.218    ## 本机 IP 地址
    priority 100    ## 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高
    advert_int 1    ## 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {    ## 设置验证信息,两个节点必须一致
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_nginx    ## 执行 Nginx 监控的服务
    }
    virtual_ipaddress {
        10.0.90.215    ## 虚拟 ip,可以定义多个
    }
}
View Code

check_nginx.sh脚本代码如下:

 1 #!/bin/bash
 2 # curl -IL http://localhost/index.htm
 3 count=0
 4 for (( k=0; k<2; k++ ))
 5 do
 6     check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/index.html -o /dev/null )
 7     if [ "$check_code" != "200" ]; then
 8         count=$(expr $count + 1)
 9         sleep 3
10         continue
11     else
12         count=0
13         break
14     fi
15 done
16 if [ "$count" != "0" ]; then
17    /etc/init.d/keepalived stop
18 #    exit 1
19 else
20     exit 0
21 fi
View Code

5、最主要的一点,为check_nginx.sh增加可执行权限,否则准备不切换并且又不报错

# chmod +x /etc/check_nginx.sh

6、 修改Nginx主页增加本机IP,以便后面主备切换查看效果

# vim /usr/local/nginx/html/index.html

7、 启动keepalived(两台机器的keepalived均需要启动)

# service keepalived start
如下显示即为成功
在启动 keepalived:                                      [确定]

8、 启动完成后在MASTER机器运行命令

# ip add

可以看到配置的虚拟ip 10.0.90.215飘到Master上

网页访问效果

 

 

9、  停止Master服务

# service keepalived stop

10、在BACKUP机器运行

# ip add

发现虚拟IP已经飘到BUCKUP机器

网页访问效果:

 

 

 

KeepAlived+nginx配置完成。

 KeepAlived参数详情请参考:

http://blog.csdn.net/fruler/article/details/53334082

相关内容