keepalive + nginx 来实现 对于nginx的高可用, 以及如何搭建主备模式

keepalive + nginx 来实现 对于nginx的高可用, 以及如何搭建主备模式。

keeplived简介

Keepalived是用纯ANSI/ISO C编写的。该软件围绕一个中央I/O多路复用器进行连接,以提供实时网络设计。

1.1 Keepalived进程被分为3个不同进程
在这里插入图片描述

A.一个极简的父进程,负责fork和监控子进程,父进程监控框架称为watchdog
B.两个子进程,一个负责VRRP框架,另一个负责健康检查

1.2 使用场景
mysql数据库双主架构;
nginx主从架构;通过keepalived进行切换。

1.3 故障切换框架
Keepalived实现了用于导向器故障切换的VRRP协议。在实现的VRRP堆栈中,VRRP数据包调度程序负责为每个VRRP实例多路分发特定的I/O。
VRRP实例同步:我们可以指定2个VRRP实例之间的状态监控,也称为VRRP同步组。它保证2个VRRP实例保持相同状态,同步实例间相互监视。

二、安装部署

2.1 通过二进制安装
1)安装依赖

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel

2)下载解压安装包并编译

tar xz keepalived-1.2.15.tar.gz
./configure
Make && make install

3)安装到指定目录

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

2.2 通过依赖包安装

yum -y install keepalived
yum -y install nmap-ncat

– 测试

systemctl status keepalived.service
systemctl start keepalived.service

三、配 置

例如两台互为主主的nginx或mysql同时可提供服务,一台服务宕掉后另一台可接管。
示例:主节点

! Configuration File for keepalived

global_defs {
    router_id test_kp
}

vrrp_script chk_local {
    script "/local/keepalived/etc/stop.sh"
    interval 15
    fall 3
    rise 1
# weight 10
}
vrrp_instance VI_1 {
    state BACKUP
    interface bond0
    virtual_router_id 1001
    priority 100
    advert_int 1
    nopreempt   ## backup 节点不需要配置
    authentication {
        auth_type PASS
        auth_pass server101
    }
    track_script {
        chk_local
    }
    virtual_ipaddress {
        192.168.10.101/24
    }
}

示例:备节点

! Configuration File for keepalived

global_defs {
    router_id test_kp
}

vrrp_script chk_local {
    script "/local/keepalived/etc/stop.sh"
    interval 3
    weight -5
    }


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 1001
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass server101
    }
    virtual_ipaddress {
        192.168.10.101/24
    }
track_script {
    chk_local
    }
}

参数详解

在这里插入图片描述

四、常见问题

4.1 日志提示

WARNING - script '/etc/keepalived/check_nginx.sh' is not executable for uid:gid 0:0 - disabling.

原因:备机上keepalived监控脚本没有执行权限。
解决:chmod +x ~/check_nginx.sh

4.2 Keeplived主备vip地址无法切换
原因:keeplived配置的优先级相同。
解决:检查keepalived.cof配置文件的priority参数,主从节点优先级设置为不同。


1.概述
前面有了解keepalive 的主备的基本使用, 但是那种是针对宕机等情况 停止了keepalive 的进程实现的 vip的漂移,本篇把keepalive 添加校验nginx存活脚本 实现针对nginx的监控, 实现nginx的高可用

在这里插入图片描述

2.准备工作
准备2台机器 , 把111定义为 keepalive 的 MASTER 节点

在这里插入图片描述

分别在2台服务器上配置好nginx 并且修改默认的 index.html 添加上 ip 标识方便区分. 如下:

在这里插入图片描述

3.配置 keepalived
在keepalived 的配置文件中的 instance 里面配置 track_script 指定 检查nginx是否存活的脚本

3.1 master (172.16.225.111)

! Configuration File for keepalived

global_defs {
  router_id LB111
}

vrrp_script chk_nginx {
  # 具体的脚本
  script "/etc/keepalived/nginx_check.sh"
  interval 2 # 2s执行一次
  weight -20 # 失败一次 则优先级 -20
}

vrrp_instance VI_1 {
   state MASTER
   interface ens160
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
  }
   virtual_ipaddress {
      172.16.225.200
  }
   # 指定脚本
   track_script {
     chk_nginx
  }
}

3.2 master (172.16.225.110)

! Configuration File for keepalived

global_defs {
  router_id LB111
}

vrrp_script chk_nginx {
  script "/etc/keepalived/nginx_check.sh"
  interval 2
  weight -20
}

vrrp_instance VI_1 {
   state BACKUP
   interface ens160
   virtual_router_id 51
   priority 90
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
  }
   virtual_ipaddress {
      172.16.225.200
  }

   track_scrip {
     chk_nginx
  }
}

4.配置 nginx_check.sh
主要是这个脚本 这个脚本的内容就是 通过ps命令检查 nginx进程是否存活 ,如果不存活 则尝试启动一次 则检查 ,如果还是启动不起来 则 把keepalived 关闭, 从而让 keepalived 能检测到 并且 vip 能够漂移到其他机器:

#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then
           # 尝试启动一次
          systemctl start nginx
       # 再次检查ngixn 进程
       status2=$(ps -C nginx --no-heading|wc -l)
       if [ "${status2}" = "0" ]; then
               # 关闭 keepalived
              systemctl stop keepalived
       fi
fi

需要在2台机器上都配置上这个脚本:

# 给脚本一个 可执行的权限
chmode +x /etc/keepalived/nginx_check.sh
# 重启或者启动 keepalived
systemctl restart keepalived

5.关闭 selinux
如果重启后或者启动后 查看日志有如下抛错 , 则是 selinux 没有关闭。
在这里插入图片描述

# 临时关闭
setenforce 0

#永久关闭
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config

6.模拟测试
2台机器 分别启动nginx 和 keepalive 后。访问 vip 172.16.225.200 这个vip 目前在 111 master机器上。
在这里插入图片描述

在master机器上 把ngixn关闭。

# 关闭 nginx
./nginx -s stop
# 此时查看 keepalived 的状态就是 dead了
systemctl status keepalived

● keepalived.service - LVS and VRRP High Availability Monitor
  Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
  Active: inactive (dead)

再次访问vip 172.16.225.200 , 可以看到 vip 已经跑到了 backup机器110上了。
在这里插入图片描述
总结
keepalive + nginx 的基本的主备配置 实现了 nginx 的高可用,核心点就是配置 nginx_check.sh脚本给keepalive 的执行, 这个nginx_check.sh 脚本内如果发现nginx 不存活 尝试启动 如果还是不存活 则直接关闭 keepalive 进程。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
keepalivenginx都与高可用相关。keepalive是一个用于维持TCP连接的工具,它可以确保在网络中的连接保持活跃,从而提高服务的可用性和可靠性。而nginx是一个高性能的Web服务器和反向代理服务器,它可以处理大量的并发连接并分发请求到不同的后端服务器,从而提供高可用性和负载均衡。在高可用的部署中,我们可以将nginxkeepalive结合使用,通过配置keepalive来监控后端服务器的健康状态,并使用nginx实现负载均衡和故障转移,以保证系统的高可用性。引用中的命令systemctl enable nginx keepalived用于启用nginxkeepalived服务,使其在系统启动时自动运行。引用中的命令systemctl enable kubelet用于启用kubelet服务,kubelet是Kubernetes集群中的一个核心组件,它负责管理节点上的容器和Pod。而引用中的命令vim /etc/nginx/nginx.conf用于编辑nginx的配置文件,通过配置nginx的参数和指令可以实现高可用性的设置,例如配置反向代理、负载均衡和健康检查等。因此,通过结合keepalivenginx的使用,我们可以实现高可用的部署和管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [keepalive+nginx高可用K8S集群部署](https://blog.csdn.net/fzqdyyd/article/details/127340860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码讲故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值