Keepalived+Nginx实现高可用

架构

在 Keepalived + Nginx 高可用负载均衡架构中,keepalived 负责实现高可用。

Keepalived是以VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议为实现基础的,这个协议可以认为是实现了路由器高可用的协议,将多台提供相同功能的路由器组成一个路由器组。

原理:在整个Keepalived集群中会有一个MASTER和多个BACKUP,master节点上有一个对外提供服务的Virtual IP(VIP),并且MASTER会发组播的心跳信息,当BACKUP收不到VRRP包时就认为MASTER宕掉了,这时就需要根据VRRP优先级来选举一个BACKUP作为MASTER,当MASTER恢复时,BACKUP又会释放在MASTER故障时自身接管的IP资源和服务,恢复到原来的备用角色,这样就可以保证路由器的高可用。

在这里插入图片描述

1、方案规划

VIPIP主机名Nginx端口
192.168.56.101192.168.56.102nginx-0180
192.168.56.101192.168.56.103nginx-0280

两台服务器的VIP为:192.168.56.101

两台服务器都要安装 keepalived 和 Nginx:
Nginx可以直接安装在服务器上,也可以安装在docker中
keepalived 直接安装在服务器上

软件安装

yum install keepalived

配置firewalld防火墙允许vrrp协议

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" protocol value="vrrp" accept"
firewall-cmd --reload

如果是backup服务器,source address改成master服务器的IP

防火墙允许vrrp协议 必不可少。否则,没有虚拟ip主从切换的效果。

KeepAlived配置

主节点配置

  1. /etc/keepalived 路径下创建 check_nginx.sh文件,内容如下:
#!/bin/bash

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ];then
	/usr/bin/kill -15 `cat /var/run/keepalived.pid`
fi

这段脚本的作用是,检查服务器上是否有nginx进程,若没有,则关闭keepalived进程。

给文件 check_nginx.sh赋予执行权限

chmod +x /etc/keepalived/check_nginx.sh

关闭的语句要写成/usr/bin/kill -15 cat /var/run/keepalived.pid而,不要写成 systemctl stop keepalived。否则,手工执行不会报错,但是由 keepalived 的 track_script 执行时,就会报错。

  1. 修改主服务器 /etc/keepalived/keepalived.conf 配置文件
! Configuration File for keepalived

global_defs {
  router_id LVS_DEVEL
}

vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 2
}

vrrp_instance VI_1 {
  state MASTER # 主服务器为 MASTER,从服务器为 BACKUP
  interface enp0s8 # 虚拟IP绑定的网卡,注意:虚拟IP与真实IP必须是同一个网段,通过 ip address找对应的网卡
  virtual_router_id 51 #这个值在主从服务器必须一致
  priority 100 #优先级,从服务器要比主服务器小一些
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  track_script {
    chk_nginx #执行脚本
  }
  virtual_ipaddress {
    192.168.56.101 # 虚拟ip
  }
}

说明:

vrrp_instance VI_1 中的 interface 根据服务器的实际情况,选择对应的网卡。

Keepalived基础HA功能时用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控。与此模块一起使用的还有track_script模块,在此模块中可以引入监控脚本、命令组合、shell语句等,以实现对服务、端口等多方面的监控。track_script模块主要用来调用“vrrp_script”模块使Keepalived执行对集群服务资源的检测。
此外,在vrrp_script模块中可以定义对服务资源检测的时间间隔、权重等参数,通过vrrp_script和track_script组合,可以实现对集群资源的监控并改变集群优先级,进而实现Keepalived的主、备节点切换。
本例中,通过监控nginx进程的状态,决定是否关闭当前服务器中的keepalived进程。一旦当前服务器的keepalived进行被关闭,其它服务器将成为主服务器,虚拟IP自动切换到新的主服务器,从而实现主从切换。

从节点配置 keepalived.conf

! Configuration File for keepalived

global_defs {
  router_id LVS_DEVEL
}

vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 3
}

vrrp_instance VI_1 {
  state BACKUP
  interface enp0s8
  virtual_router_id 51
  priority 50
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.56.101
  }
  track_script {
    chk_nginx
  }
}

验证

主从两台服务器的nginx,keepalived都正常启动

ip地址查看

查看主服务器ip

查看从服务器ip
在这里插入图片描述

请求nginx服务

关闭主服务nginx

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重新启动主服务器nginx,keepalived

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 10
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值