Nginx(高可用--keepalived组件)

一、下载

Keepalived for Linux

二、上传和解压

tar -zxvf keepalived-2.2.7.tar.gz

三、在keepalived中输入如下命令进行配置

./configure  --prefix=/usr/local/tool/keepalived-2.2.7 --sysconfdir=/etc

prefix= 指向安装目录(编译安装)

sysconfdir =配置文件路径

报以下错误

 安装libnl

#yum -y install libnl libnl-devel
yum -y install libnl*

安装

make && make install

主备配置 

文件路径

  /etc/keepalived/

一个功能比较完整的常用的 keepalived 配置文件,主要包含以下三块:

! Configuration File for keepalived
#全局定义块
global_defs {
   ...
}

#VRRP 实例定义块
vrrp_instance VI_1 {
   ...
}

#虚拟服务器定义块
virtual_server 10.10.10.2 1358 {
   ...
}

1、全局定义块


global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

参数说明:

notification_email  :email通知,用于服务有故障时发送邮件报警。可选项,不建议用。需系统开启sendmail服务,建议用第三方独立监控服务,如使用nagios监控代替。

notification_email_from :指定发件人,可选配置。

smtp_server: 指定发送邮件的smtp服务器地址,可选配置。
smtp_connect_timeout:指定连接smtp的超时时间,可选配置。
router_id :用户标识本节点的名称,通常为 hostname


2、VRRP 实例定义块

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

参数说明:

vrrp_instance :定义一个vrrp_install实例,名称为VI_1

state :表示该实例的角色状态,有MASTER和BACKUP两种主备状态。

interface :对外提供服务的网络接口,如eth0,ens33

查看网络接口命令: ip addr

virtual_router_id :虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致,否则将出现脑裂问题。

priority :priority表示实例优先级。数字越大,优先级越高。

advert_int :advert_int为同步通知间隔。主备之间通信检查的时间间隔,默认为1秒。

authentication :权限认证配置。

virtual_ipaddress :虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中需要和域名绑定的ip,即可配置的高可用服务监听的ip保持一致。

3、虚拟服务器定义块

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

参数说明:

virtual_server:定义一个虚拟服务器,这个ip是virtual_address中定义的其中一个。语法格式:ip+空格+服务端口

delay_loop 6:健康检查时间间隔,单位:秒

lb_algo rr:负载均衡调度算法,互联网应用常用方式为 wlc或rr

lb_kind NAT:负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。

persistence_timeout 50:http服务会话保持时间,单位:秒

protocol TCP:转发协议,分为TCP和UDP两种

real_server:真实服务器IP和端口,可以定义多个

weight 1:负载权重,值越大,转发的优先级越高

connect_timeout 3:服务连接超时时长,单位:秒

nb_get_retry 3:服务连接失败重试次数

delay_before_retry 3 :重试连接间隔,单位:秒
4、检查Nginx服务的脚本

如果Nginx挂掉的话,keepalived无法获知,所有需要在配置文件中添加检查的脚本

vrrp_script check_nginx {
    script "/etc/keepalived/scripts/check_nginx.sh" 
    interval 3  
    weight 2   
}

参数说明:

script :执行的脚本

interval  3:每个3秒执行以下脚本

weight 2:如果脚本运行成功,权重就会加2 (vrrp_instance  中priority 的权重加2)

weight -2:如果脚本运行失败,权重就会减2 (vrrp_instance  中priority 的权重减2)

在VRRP 实例定义块中加入以下

 track_script {
        check_nginx 
    }

 检查Nginx进程是否运行 

(1)、方法一

#!/bin/sh
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        #尝试重启Nginx服务
        /usr/local/tool/nginx-1.22.0/sbin/nginx
        #等一会再重新检查,如果Nginx服务没有启动,则停止keepalived,让备用机工作
        sleep 3
        
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

            killall keepalived
        fi

fi

(2)、方法二

在Nginx配置目录下增加health.conf的配置文件,该配置文件用于配置Nginx health的接口。

server {
    listen       80  default_server;
    server_name  localhost;
    default_type text/html;
    return 200 'Health';  
}

脚本:

#!/bin/sh
set -x

timeout=30 #指定默认30秒没返回200则为非健康,该值可根据实际调整

if [ -n ${timeout} ];then
    httpcode=`curl -sL -w %{http_code} -m ${timeout} http://localhost -o /dev/null`
else
    httpcode=`curl -sL -w %{http_code}  http://localhost -o /dev/null`
fi

if [ ${httpcode} -ne 200 ];then
        killall keepalived
        exit 1
else
        exit 0
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值