如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)

如何搭建高可用架构(二)–Nginx双机主备(Keepalived实现)

标签(空格分隔): 高可用架构


在上篇介绍Nginx的基本知识,搭建了最基础的Nginx架构,如下:
如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)_第1张图片
这个架构中,可以满足小并发的网站请求,但如果说Nginx服务器出现宕机,那整个网站都会处于瘫痪状态,所以我们想到是否可以使用多台Nginx实现主备切换呢?如何实现?使用Keepalive实现心跳检测。

什么是Keeplived

简介参考:http://blog.51cto.com/freeloda/1280962
keepalived是VRRP协议的完美实现,主要是用来避免单点故障实现心跳检测

如何安装keepalived

1、安装环境

su - root
yum -y install kernel-devel*
yum -y install openssl-*
yum -y install popt-devel
yum -y install lrzsz
yum -y install openssh-clients
yum -y install libnl libnl-devel popt

2、安装keepalived
2.1、上传keepalived安装文件

cd /usr/local/src/  
mkdir keepalived
cd keepalived/
wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz或者rz 上传

2.2、解压

tar -xvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15

2.3、安装keepalived

cd keepalived
#执行配置命令
./configure
#编译
make
##安装
make install
##拷贝执行文件到/usr/sbin/下
cp /usr/local/sbin/keepalived /usr/sbin/
##将init.d文件拷贝到etx下加入网卡配置
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 
##创建keepalived文件夹
mkdir -p /etc/keepalived
##将keepalived配置文件拷贝到etc下
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
##添加可执行权限
chmod +x /etc/init.d/keepalived

2.4、加入开机启动

chkconfig --add keepalived
chkconfig keepalived on

3、配置日志文件
3.1 将keepalived日志输出到local0

vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"

3.2 在/etc/rsyslog.conf里添加

local0.*  /var/log/keepalived.log

3.3 重新启动keepalived和rsyslog服务

service rsyslog restart 
service keepalived restart

4、打开防火墙的通讯地址

iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save

配置keepalived监控Nginx

1.说明
由于keepalived本身只有监控自身的进程是否挂掉,如果机器并没有挂机。只是nginx挂了,那么keepalived是不会做切换主备操作的,所以我们需要编写一个监控nginx的脚本来监控nginx进程是否存在
2.编写脚本

#check_nginx.sh
#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                    ## 如果没有进程值得为 零
       service keepalived stop          ## 则结束 keepalived 进程
fi

3.上传脚本

上传脚本check_nginx.sh到/etc/keepalived目录。
设置check_nginx.sh脚本可执行权限:
chmod 755 check_nginx.sh或者chmod +x check_nginx.sh

如果执行脚本出错,需要使用dos2unix工具转化下格式:
安装dos2unix:yum -y install dos2unix

使用:dos2unix check_nginx.sh

4.修改配置文件keepalived.conf
4.1定义监控脚本

vrrp_script check_nginx { 
    script "/etc/keepalived/check_nginx.sh"         ##监控脚本
    interval 2                                      ##时间间隔,2秒
    weight 2                                        ##权重
}

4.2 在实例中加入启用监控
4.2.1在备机中配置

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人
   #smtp_server 192.168.200.1                             #指定smtp服务器地址
   #smtp_connect_timeout 30                               #指定smtp连接超时时间
   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 { 
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.0.55       #可以多个虚拟IP,换行即可
    }
      track_script {
        check_nginx        #监控脚本
    }
}

4.2.2在主机中配置

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc  #指定发件人
   #smtp_server 192.168.200.1                             #指定smtp服务器地址
   #smtp_connect_timeout 30                               #指定smtp连接超时时间
   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 { 
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.0.55       #可以多个虚拟IP,换行即可
    }
      track_script {
        check_nginx        #监控脚本
    }
}

整体架构图

如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)_第2张图片

双击主备的原理

如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)_第3张图片
如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)_第4张图片
如何搭建高可用架构(二)--Nginx双机主备(Keepalived实现)_第5张图片

架构总结

好处:

通过Keepalived解决Nginx单点故障的问题,实现主从切换

问题:

1、备机由于如果在未发生故障的情况下,一直处于闲置状态,造成资源浪费
2、主机在高负载的情况下运行,有一定的上限。
3、如果主备机都出现宕机。如何处理?

你可能感兴趣的:(架构篇)