keepalived实现高可用的nginx

发表时间:2017-07-18 21:29:59 浏览量( 30 ) 留言数( 0 )

学习目标:

1、掌握keepalived的原理

2、掌握keepalived高可用的nginx搭建方法


学习过程:

    目前我们的jetty服务器已经实现了负载均衡,并且保证了高可用性,但是目前我们只在一台电脑上面安装了nginx服务器,如果这个服务器挂机了,整个服务也就不可用了,所以Nginx也必须保证高可用性,我们可以结合KeepAlived实现Nginx的高可用性。

    我们现在需要四台服务器做实验,两台安装nginx,另外两台和上一节课一样就是jetty服务器。如下图:


1、为run1.com和run2.com配置虚拟IP  两个都配置相同的虚拟IP地址

不需要在这里显示的配置虚拟机IP的,只需要在keepalived的配置文件的配置虚拟IP即可

run1.com:  keepalived + nginx

run2.com:  keepalived + nginx


2、两台都安装nginx

参考  前面的nginx的安装


3、两台都按照keeplived

先自己下载keepalived

[root@run2 local]# tar -zxf keepalived-1.3.4.tar.gz

cd  keepalived-1.3.4

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

如果编译不通过,看看缺了什么就是用yum安装即可。

比如缺少openssl

yum -y install openssl-devel

然后在重新编译

make && make install

安装成功后,需要把安装后的文件复制到相应的路径下面

复制/sbin/keepalived到/usr/sbin下

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

keepalived默认会读取/etc/keepalived/keepalived.conf配置文件

 mkdir /etc/keepalived

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

复制sysconfig文件到/etc/sysconfig下

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

复制启动脚本到/etc/init.d下,这个注意是从解压的目录下面复制过来的。

 cp /usr/local/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/init.d/

chmod 755 /etc/init.d/keepalived

keepalived的日志文件。

日志:tail -f /var/log/messages

keepalived的启动命令:

/etc/init.d/keepalived restart

安装成功后就可以写配置文件。

keepalived只要有其中一个挂了,另外一个就会自动接替,所以和nginx是没有什么关系的。

我们需要在keepalived中写一个监控nginx的配置文件,只要nginx的进程死了(当然最好使用端口不能访问了)

那么这个时候就把keepalived也杀死了,这个时候另外一个keepalived就会接管所有的请求了。

keepalived 默认的配置文件在 /etc/keepalived/keepalived.conf

先写一个nginx的监控脚本 在run1.com和run2.com都写一个  /etc/keepalived/nginx.sh

#!/bin/sh

nginxPidNum=`ps -C nginx --no-header | wc -l`

keepalivedPidNum=`ps -C keepalived --no-header | wc -l`

if [  $nginxPidNum -eq 0 ];then

    kill all keepalived

elif [ $keepalivedPidNum -eq 0 ];then

    service keepalived start

fi


下面就可以写keepalived的配置文件了。run1.com和run2.com的配置稍有不同而已。

run1.com的keepalived.conf配置文件

global_defs { 

    #邮件通知自己按照需要填写即可。

   notification_email { 

     failover@firewall.loc 

   } 

   notification_email_from Alexandre.Cassen@firewall.loc 

   smtp_server 192.168.0.48 

   smtp_connect_timeout 10 

   router_id nginx 

vrrp_script chk_http_port {

    script "/etc/keepalived/nginx.sh"   #指向上面写好的脚本

    interval 2   //每隔一段时间执行。

    weight 2   //失败后权值减去的数值

}

vrrp_instance VI_141 { 

    state MASTER    

    interface eth0 

    virtual_router_id 141 

    priority 100   #这个地方是不一样,作为主,权值为100,从的权值为99

    advert_int 1 

    authentication { 

        auth_type PASS 

        auth_pass 141 

    }

    track_script {                      #以脚本为监控chk_http_port是前面填写的

        chk_http_port

    }

    virtual_ipaddress { 

        10.108.0.248 # 这个就是虚拟IP

    } 

}

run2.com的keepalived.conf配置文件

global_defs { 

   notification_email { 

     failover@firewall.loc 

   } 

   notification_email_from Alexandre.Cassen@firewall.loc 

   smtp_server 192.168.0.48 

   smtp_connect_timeout 10 

   router_id nginx 

vrrp_script chk_http_port {

    script "/etc/keepalived/nginx.sh"                  #监控服务脚步

    interval 2                    #检测时间间隔(执行脚步间隔)

    weight 2

}

vrrp_instance VI_141 { 

    state MASTER 

    interface eth0 

    virtual_router_id 141 

    priority 100

    advert_int 1 

    authentication { 

        auth_type PASS 

        auth_pass 141 

    }

    track_script {                      #以脚本为监控chk_http_port是前面填写的

        chk_http_port

    }

    virtual_ipaddress { 

        10.108.0.248 

    } 

}

打开日志

可以测试一下了:

把其中一个的nginx停了

cd /usr/local/nginx/sbin

./nginx -s quit

查看日志 

tail -f /var/log/messages

设置ngin和keeplived,开机启动即可。