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/,效果如下:
centos7安装keepalived 保证Nginx的高可用_第1张图片
访问http://192.168.213.6/,效果如下:
centos7安装keepalived 保证Nginx的高可用_第2张图片

1、安装Keepalived

sudo yum install -y keepalived

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

 cp keepalived.conf keepalived.conf-bk

修改配置文件:
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
    }
}

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
      }
}

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

给执行文件授权:

chmod +x /bin/keepalived/check_nginx_pid_restart.sh

启动keepalived:

systemctl start keepalived

设置开机启动:

systemctl enable keepalied

查看启动状态:

systemclt status keepalied

查看ip:

ip addr

centos7安装keepalived 保证Nginx的高可用_第3张图片
宿主机ping 192.168.213.20:
centos7安装keepalived 保证Nginx的高可用_第4张图片
访问:http://192.168.213.20/
centos7安装keepalived 保证Nginx的高可用_第5张图片

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

systemctl stop nginx

centos7安装keepalived 保证Nginx的高可用_第6张图片

2.2、停止192.168.213.6的keepalived

 systemctl stop keepalived

centos7安装keepalived 保证Nginx的高可用_第7张图片

2.3、启动192.168.213.6的keepalived

systemctl start keepalived

centos7安装keepalived 保证Nginx的高可用_第8张图片

你可能感兴趣的:(运维,nginx,运维)