Keepalived + Nginx 搭建高可用集群

0x00 背景

        nginx做负载均衡与反向代理,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器宕机,那么所有的服务也会跟着瘫痪 。keepalived+nginx,就能很好的解决这一问题。

          主机: Master 192.168.1.211

          备机: Node 192.168.1.210

          虚拟IP: 192.168.1.212

0x01 Keepalived介绍

        Keepalived 

               Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

        VRRP

                在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。 VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器。VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器。由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。

        Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

0x02 安装Ngnix

        分别在主备两台机器上安装Nginx,并配置。详情请看:Nginx 代理Http及TCP请求

0x03 安装Keepalived

        1. 创建Keepalived源码目录 

mkdir /home/${user}/soft                             // ${user} 为用户目录
mkdir /home/${user}/soft/keepalived  

        2. 下载Keepalived源码并解压

cd /home/${user}/soft/keepalived
wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
tar -xzvf keepalived-1.2.22.tar.gz

        3. 安装相关依赖

yum install popt-devel 
yum install openssl-devel 
yum install popt-devel 

        4. 源码编译

cd /home/${user}/soft/keepalived/keepalived-1.2.22     // 该目录为源码目录 ${user}为用户目录 
./configure --prefix=/opt/keepalived/
make
make install 

      5. 安装成功后,会在/opt/keepalived目录下产生相关文件,由于Keepalived的相关程序都是以系统目录为基础的,所以需要将编译安装之后的文件安装到系统中,操作如下:

cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /opt/keepalived/sbin/keepalived /usr/sbin/
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

    6. 检查安装是否成功

/etc/init.d/keepalived start                   // 启动
/etc/init.d/keepalived restart                 // 重启
/etc/init.d/keepalived stop                    // 停止

    7. 修改主从配置文件

    Master 配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {
  #notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
  ## jutao@htdf.cc
  # }
  # notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
  # smtp_server localhost #指定smtp服务器地址
  # smtp_connect_timeout 30 #指定smtp连接超时时间
   router_id Master #运行keepalived机器的一个标识
}

vrrp_script chk_nginx {
    script "/opt/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight 2 #如果条件成立的话,则权重 2
}

vrrp_instance VI_1 {
    state MASTER            #MASTER 表示主机 BACKUP 表示备
    interface wlan0          #wlan0 表示网络接口名称,根据主机选择
    virtual_router_id 51     # 虚拟ID  主备必须相同,才可以相互访问到
    mcast_src_ip 192.168.1.211   # 本机真实IP
    priority 100                # 权重, 优先级越高,数值越大,0-255
    advert_int 1                # 1S检查一次
    nopreempt                   # 主机崩溃重启后,则抢占
    authentication {            # 访问密码,主备相同,才可互访
        auth_type PASS
        auth_pass 1111
    }
     # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }
    virtual_ipaddress {       # 虚拟IP,可多个
        192.168.1.212/24
    
   }

}


}
                  

 

Node配置文件 

! Configuration File for keepalived

global_defs {
  #notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
  ## jutao@htdf.cc
  # }
  # notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
  # smtp_server localhost #指定smtp服务器地址
  # smtp_connect_timeout 30 #指定smtp连接超时时间
   router_id NodeA #运行keepalived机器的一个标识
}

vrrp_script chk_nginx {
    script "/opt/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight 2 #如果条件成立的话,则权重 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface wlan0
    virtual_router_id 51
    mcast_src_ip 192.168.1.210
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
     # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }
    virtual_ipaddress {
        192.168.1.212/24
    }

}

  8. Nginx状态检查脚本,存放位置/opt/keepalievd/目录下,主备都有

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
        `/opt/nginx/sbin/nginx`
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                /etc/init.d/keepalived stop
        fi
fi

  9. 重启网络与Keepalievd服务

/etc/init.d/netword restart
/etc/init.d/keepalived restart

 

0x04 测试Keepalived+Nginx

1. 打开浏览器,输入虚拟地址

162832_pr9F_2478160.png

2. 关掉主服务器(192.168.1.211)Nginx,执行命令

/opt/nginx/sbin/nginx -s stop 

 

3. 打开浏览器,输入虚拟地址        

162832_pr9F_2478160.png

页面仍然显示,则Keepalived+Nginx集群已搭建完成

 

转载于:https://my.oschina.net/jutao/blog/1577384

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值