• Keepalived手动编译安装以及Nginx网关服务器冗余策略


    目录

    一、什么是keepalived?

    二、安装keepalived

    三、keepalived配置文件

    四、keepalived+nginx的小实验

    五、nginx+keepalived的高可用实验


    一、什么是keepalived

     是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障,提到单点故障,不免让人想到一个名词:”VVRP(虚拟路由冗余协议)“,巧的是,keepalived是以VRRP协议为实现基础的。

    vrrp相关的内容可以看我之前的博客:https://blog.csdn.net/m0_71518373/article/details/125321132https://blog.csdn.net/m0_71518373/article/details/125321132

    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

    Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
    后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。
    健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

    二、安装keepalived

    使用wget或从其他设备上传输keepalived的软件包,以下为博客完成时间最新版本的keepalived软件包的官方下载网址:

    Keepalived for Linuxhttps://www.keepalived.org/download.html

    将软件包解压缩,进入解压缩目录,执行./configure进行自定义

    1. cd keepalived-2.2.7
    2. ./configure \
    3. --prefix=/usr/local/keepalived \
    4. --with-init=systemd \
    5. --with-systemdsystemunitdir=/usr/lib/systemd/system

    如果遇到报错提示

    1. configure: erro:
    2. !!! OpenSSL is not properly installed on your system. !!!
    3. !!! Can not include OpenSSL headers files. !!!
    4. *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

    安装依赖

    1. yum install openssl-devel
    2. yum install -y libnl3-devel

     最后 make && make install 进行安装

    复制配置文件

    1. mkdir /etc/keepalived
    2. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

    设置系统服务

    1. cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    2. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    3. ln -s /usr/local/sbin/keepalived /usr/sbin/
    4. ln -s /usr/local/keepalived/sbin/keepalived /sbin/

    当然,也可以yum install -y 来进行下载,可能还更方便,哈哈

    三、keepalived配置文件

    按照上面的步骤进行安装的话,keepalived的配置文件位于:

    1. cd /usr/local/keepalived/etc/keepalived/
    2. ls
    3. keepalived.conf.sample samples

    mv ./keepalived.conf.sample ./keepalived.conf

    如果是yum下载的,keepalived配置文件位于/etc/keepalived/keepalived.conf

    进入配置文件,主要的内容我们留着,多余的配置信息咱先删去

    master配置内容如下

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id ljp
    4. }
    5. vrrp_instance VI_1 {
    6. state MASTER
    7. interface ens33
    8. virtual_router_id 51
    9. priority 100
    10. advert_int 1
    11. authentication {
    12. auth_type PASS
    13. auth_pass 1111
    14. }
    15. virtual_ipaddress {
    16. 192.168.116.16
    17. }
    18. }

    backup配置内容如下

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id ljpbak2
    4. }
    5. vrrp_instance VI_1 {
    6. state BACKUP
    7. interface ens33
    8. virtual_router_id 51
    9. priority 80
    10. advert_int 1
    11. authentication {
    12. auth_type PASS
    13. auth_pass 1111
    14. }
    15. virtual_ipaddress {
    16. 192.168.116.16
    17. }
    18. }

    需要注意的地方是global_defs里的router_id 是本机的主机名,virtual_router_id是关联共享vip的机器的组编号,priority就是优先级,注意master优先级要比backup机器的优先级高,authentication下的功能与virtual_router_id相同,标记了不同机器间进行联结的密码,最后是vip(virtual_ipaddress),指定了机器间漂移的ip

    四、keepalived+nginx的小实验

    准备了两台机器:192.168.116.22|192.168.116.23 ;keepalived设置如上面所示,192.168.116.22是MASTER,我们查看22主机的网卡ip

    23主机的网卡ip (关闭22主机上keepalived的情况下)

    对两台机器的nginx页面index.html修改为两台主机的ip,随后在浏览器上对192.168.116.16网址进行访问

    关闭22主机上的keepalived,再对页面进行刷新,192.168.116.16 从22主机上漂移到了23主机。

    随即我们发现了一个问题,虽然说keepalived可以解决单点故障,让几台机器间互相监测,但在这里nginx+keepalived,我们发现master机器上的nginx宕掉了 ,由于keepalived仍然存活着,虚拟ip仍在nginx出现故障的机器上,想要让ip漂移只能是nginx宕机的那台机器,执行一个监测脚本当发现nginx不存活时,连同keepalived一起关闭,这样就可以达到vip漂移来解决nginx的单点故障。

    通过在配置文件中添加

    1. # vi /etc/keepalived/keepalived.conf
    2. ! Configuration File for keepalived
    3. global_defs {
    4. router_id ljp # 标识本节点的字条串,通常为 hostname
    5. }
    6. # keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
    7. vrrp_script chk_nginx {
    8. script "/etc/keepalived/shutngx.sh" # 检测 nginx 状态的脚本路径
    9. interval 2 # 检测时间间隔
    10. weight -20 # 如果条件成立,权重-20
    11. }
    12. # 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
    13. vrrp_instance VI_1 {
    14. state MASTER # 主节点为 MASTER, 对应的备份节点为 BACKUP
    15. interface eth0 # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同
    16. virtual_router_id 33 # 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
    17. mcast_src_ip 192.168.116.22 # 本机 IP 地址
    18. priority 100 # 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
    19. nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    20. advert_int 1 # 组播信息发送间隔,两个节点设置必须一样, 默认 1s
    21. # 设置验证信息,两个节点必须一致
    22. authentication {
    23. auth_type PASS
    24. auth_pass 1111
    25. }
    26. # 将 track_script 块加入 instance 配置块
    27. track_script {
    28. chk_nginx # 执行 Nginx 监控的服务
    29. }
    30. # 虚拟 IP 池
    31. virtual_ipaddress {
    32. 192.168.50.130 # 虚拟 ip,可以定义多个
    33. }
    34. }

    nginx+keepalived监控脚本(master、backup都得写),检查nginx运行情况,如果不在运行,对nginx进行开启,如果nginx开启失败,则关闭keepalived实现vip 的跳转。

    1. #!/bin/bash
    2. ngcount=`ps -C nginx |grep -v PID |wc -l`
    3. if [ $ngcount -eq 0 ];then
    4. /usr/local/nginx/sbin/nginx
    5. if [ `ps -C nginx | grep -v PID | wc -l` -eq 0 ];then
    6. killall keepalived
    7. fi
    8. fi

    五、nginx+keepalived的高可用实验

    主机:192.168.116.22    192.168.116.23

    VIP:192.168.116.16

    功能实现:22主机master,23主机backup,关闭22主机上的nginx,脚本监测来进行开启nginx,如果开启失败,则关闭22主机上的keepalived,来让16的IP进行一个IP漂移到23主机上,实现nginx的高可用。

    22主机的keepalived配置:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id ljp
    4. }
    5. vrrp_script chk_nginx {
    6. script "/etc/keepalived/shutngx.sh"
    7. interval 2
    8. weight -20
    9. }
    10. vrrp_instance VI_1 {
    11. state MASTER
    12. interface ens33
    13. virtual_router_id 51
    14. mcast_src_ip 192.168.116.22
    15. priority 100
    16. nopreempt
    17. advert_int 1
    18. authentication {
    19. auth_type PASS
    20. auth_pass 1111
    21. }
    22. track_script {
    23. chk_nginx
    24. }
    25. virtual_ipaddress {
    26. 192.168.116.16
    27. }
    28. }

    23主机的keepalived配置:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id ljpbak2
    4. }
    5. vrrp_script chk_nginx {
    6. script "/etc/keepalived/shutngx.sh"
    7. interval 2
    8. weight -20
    9. }
    10. vrrp_instance VI_1 {
    11. state BACKUP
    12. interface ens33
    13. virtual_router_id 51
    14. mcast_src_ip 192.168.116.23
    15. priority 80
    16. nopreempt
    17. advert_int 1
    18. authentication {
    19. auth_type PASS
    20. auth_pass 1111
    21. }
    22. track_script {
    23. chk_script
    24. }
    25. virtual_ipaddress {
    26. 192.168.116.16
    27. }
    28. }

    我们正常开启22,23主机的nginx和keepalived,对16进行访问,master22正常

     对22主机上的nginx进行关闭,再次进行访问16,刷新页面会稍微卡一会,但之后显示还是master主机,这里是nginx监测脚本运行成功,监测到nginx未处于开启状态,重新开启了nginx

     如果我们将22主机上的nginx和keepalived一起关闭,再对16的页面进行刷新

     VIP192.168.116.16漂移到了192.168.116.23上。

  • 相关阅读:
    Class Semantics-based Attention for Action Detection CSA论文阅读笔记
    贪心算法-
    JSD-2204-MyBatis小结-SLF4j日志-SpringMVC-Day05
    使用https接口,无法调通接口响应不安全
    Win10 环境下 VS2022 暴力编译PP-OCRv4
    竞赛trick-AWP对抗训练的即插即用实现
    并查集(畅通工程)
    【java学习—八】关键字static(4)
    ROS(5)PX4仿真安装及运行
    微软发现影响 Linux 和 macOS系统的 ncurses 库漏洞
  • 原文地址:https://blog.csdn.net/m0_71518373/article/details/126366201