美文网首页个人学习微服务技术分享
nginx结合keepalived实现高可用集群

nginx结合keepalived实现高可用集群

作者: dark68 | 来源:发表于2021-04-29 08:10 被阅读0次

1 什么是Keepalived

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

2 Keepalived的工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由/网关为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

3 Keepalived的安装

1.安装keepalived需要的扩展

yum install gcc gcc-c++ openssl openssl-devel
wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2.解压keepalived并安装

tar -zxvf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
make && make install

3.keepalived安装成Linux系统服务

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/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig keepalived on

4 keepalived配置文件master配置

! Configuration File for keepalived
global_defs {
    router_id LVS_MASTER
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx.sh" ## 检测 nginx 状态的脚本路径
    interval 2 ## 检测时间间隔
    weight 2 ## 如果条件成立,权重+2
}

vrrp_instance VI_1 {
    state MASTER      ##主
    interface eno16777736      ##网卡,/etc/sysconfig/network-scripts/
    virtual_router_id 79 
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.35.200    ##虚拟ip
    }
    track_script {
        chk_nginx      ##对应vrrp_script
    }
}

5 keepalived配置文件slave配置

! Configuration File for keepalived
global_defs {
    router_id LVS_MASTER
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx.sh" ## 检测 nginx 状态的脚本路径
    interval 2 ## 检测时间间隔
    weight 2 ## 如果条件成立,权重+2
}

vrrp_instance VI_1 {
    state BACKUP      ##从
    interface eno16777736      ##网卡,/etc/sysconfig/network-scripts/
    virtual_router_id 79
    priority 90                ##权重较低
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.35.200    ##虚拟ip
    }
    track_script {
        chk_nginx      ##对应vrrp_script
    }
}

注:主要关闭防火墙 systemctl stop firewalld,要不然主从之间无法通讯,两端都会有虚拟IP。

配置完成后,启动keepalived(主、从都要启动)

service keepalived start
#查看虚拟ip是否存在,成功则主服务器存在虚拟ip
ip a

6 nginx状态检测脚本nginx.sh(注意权限!)

完成以上配置后,主备服务器能够实现ip漂移,但是我们需要的功能实际是keepalived检测nginx负载均衡服务,一旦nginx负载均衡服务宕机,keepalived需要尝试去启动nginx,否则停止keepalived,让ip漂移到备用机上。

#! /bin/bash
START_NGINX="service nginx start"
LOG_FILE="/usr/local/nginx/logs/nginx_upstreams.log"
HAPS=`ps -C nginx --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check nginx status" >> $LOG_FILE
#判断nginx是否启动,启动退出,未启动启动
if [ $HAPS -eq 0 ];then
   echo $START_HAPROXY >> $LOG_FILE
   #需要配置service nginx命令
   service nginx start
   sleep 3
   #判断nginx是否启动成功,未启动成功,停止当前机器上的keepalived
   if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
      echo "start nginx failed, killall keepalived" >> $LOG_FILE
      #pkill貌似不可以消除虚拟ip
      killall keepalived
      service keepalived stop
   fi
fi

相关文章

网友评论

    本文标题:nginx结合keepalived实现高可用集群

    本文链接:https://www.haomeiwen.com/subject/jnlprltx.html