• centos7安装keepalived 保证Nginx的高可用


    keepalived工作在虚拟路由器冗余协议 VRRP (Virtual Router Redundancy Protocol) 上,它允许一个静态 IP 在两个 Linux 系统之间进行故障转移。

    环境准备:
    两台虚拟机centos7,IP:192.168.213.4(backup) 192.168.213.6(master)
    安装了Nginx。
    关闭Firewalld、SELinux。

    访问http://192.168.213.4/,效果如下:
    在这里插入图片描述
    访问http://192.168.213.6/,效果如下:
    在这里插入图片描述

    1、安装Keepalived

    sudo yum install -y keepalived
    
    • 1

    备份配置文件:
    keepalived的配置文件路径:/etc/keepalived
    在这里插入图片描述
    将配置文件备份,修改原来的配置文件 keepalived.conf

     cp keepalived.conf keepalived.conf-bk
    
    • 1

    修改配置文件:
    master 192.168.213.6:

    global_defs {
     
        # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
     router_id 192.168.213.6 
    }
    
    # 定时运行的脚本文件配置
    vrrp_script check_nginx_pid_restart {
        # 之前编写的nginx重启脚本的所在位置
     script "/bin/keepalived/check_nginx_pid_restart.sh" 
        # 每间隔3秒执行一次
     interval 3
        # 如果脚本中的条件成立,重启一次则权重-20
     weight -20
    }
    
    # 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
    vrrp_instance VI_1 {
        # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
     state MASTER
        # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
     interface ens33 
        # 虚拟路由的ID号,主从两个节点设置必须一样
     virtual_router_id 121
        # 填写本机IP
     mcast_src_ip 192.168.213.6 
        # 节点权重优先级,主节点要比从节点优先级高
     priority 100
        # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
     nopreempt
        # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
     advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        # 将track_script块加入instance配置块
        track_script {
            # 执行Nginx监控的脚本
      check_nginx_pid_restart
        }
    
        virtual_ipaddress {
            # 虚拟IP(VIP),也可扩展,可配置多个。
          192.168.213.20
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    backup 192.168.213.4:

    global_defs {
      
        # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
       router_id 192.168.213.4
    }
    
    # 定时运行的脚本文件配置
    vrrp_script check_nginx_pid_restart {
        # 之前编写的nginx重启脚本的所在位置
         script "/bin/keepalived/check_nginx_pid_restart.sh" 
        # 每间隔3秒执行一次
         interval 3
        # 如果脚本中的条件成立,重启一次则权重-20
         weight -20
    }
    
    # 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
    vrrp_instance VI_1 {
          # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
       state BACKUP
          # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
       interface ens33 
          # 虚拟路由的ID号,主从两个节点设置必须一样
       virtual_router_id 121
          # 填写本机IP
       mcast_src_ip 192.168.213.4
          # 节点权重优先级,主节点要比从节点优先级高
       priority 90
          # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
       nopreempt
          # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
       advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          # 将track_script块加入instance配置块
          track_script {
              # 执行Nginx监控的脚本
              check_nginx_pid_restart
          }
      
          virtual_ipaddress {
              # 虚拟IP(VIP),也可扩展,可配置多个。
              192.168.213.20
          }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    check_nginx_pid_restart.sh:

    #!/bin/sh
    # 通过ps指令查询后台的nginx进程数,并将其保存在变量nginx_number中
    nginx_number=`ps -C nginx --no-header | wc -l`
    # 判断后台是否还有Nginx进程在运行
    if [ $nginx_number -eq 0 ];then
        # 如果后台查询不到`Nginx`进程存在,则执行重启指令
        systemctl start nginx
        # 重启后等待1s后,再次查询后台进程数
        sleep 1
        # 如果重启后依旧无法查询到nginx进程
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
            # 将keepalived主机下线,将虚拟IP漂移给从机,从机上线接管Nginx服务
            systemctl stop keepalived.service
        fi
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    给执行文件授权:

    chmod +x /bin/keepalived/check_nginx_pid_restart.sh
    
    • 1

    启动keepalived:

    systemctl start keepalived
    
    • 1

    设置开机启动:

    systemctl enable keepalied
    
    • 1

    查看启动状态:

    systemclt status keepalied
    
    • 1

    查看ip:

    ip addr
    
    • 1

    在这里插入图片描述
    宿主机ping 192.168.213.20:
    在这里插入图片描述
    访问:http://192.168.213.20/
    在这里插入图片描述

    2、测试
    测试场景:
    2.1、停止192.168.213.6的Nginx

    systemctl stop nginx
    
    • 1

    在这里插入图片描述

    2.2、停止192.168.213.6的keepalived

     systemctl stop keepalived
    
    • 1

    在这里插入图片描述

    2.3、启动192.168.213.6的keepalived

    systemctl start keepalived
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    基于51单片机的孵化环境温湿度监控系统设计
    SpringBoot框架分层(View层、Controller层、Service层、Mapper层、pojo层)
    C#网页打印功能实现
    在线生产cron定时任务表达式
    Kubernetes服务暴露的4种方法——ClusterIp、NodePort、LoadBalancer 和 Ingress
    广度优先遍历解决迷宫问题
    shell基本命令
    GO docker化编译平台现象不一致问题
    HTTP 协议简介
    如何为你输出的allure测试报告—锦上添花
  • 原文地址:https://blog.csdn.net/qq_22744093/article/details/134467780