目录:
一、什么是高可用?
- nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障。
1、nginx集群单点问题
分发器宕机怎么处理?
-
假如nginx服务器挂掉了,那么所有的服务也会跟着瘫痪 。
-
一种方法是人为监控,发现主分发器宕机后,立马登录备分发器,并给它分配虚ip。
-
另一种办法是用软件来替代人来监控,自动登录备分发器,分配虚ip。
数据服务器宕机怎么处理?
- 分发器可以自动判断数据服务器的存活状态,不对宕机服务器要数据。
2、Keepalived介绍
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使 其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
总结来说:Keepalived软件是一个监控+自愈的软件。
运行协议是VRRP,主分发器的keepalived会向网络中发组播,宣告自己还活着,组播地址:224.0.0.18。
$ tcpdump -nn -vvv -i ens33 vrrp #查看组播的包
192.168.31.40 > 224.0.0.18: vrrp 192.168.31.40 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length
20, addrs: 192.168.31.213 auth “1111^¥##”
输出解析:192.168.31.40是master,目标地址是224.0.0.18,使用的协议是VRRPv2版本,虚拟id是51,优先级是100,简单验证类型,一秒发一次,长度20字节,虚Ip是192.168.31.213,
验证的密码是111#$Z%#
二、keepalived软件介绍
1、keepalived–监控检查
注:keepalive软件有两种功能:监控检查、VRRP冗余协议
- keepalive的作用是检测web服务器的状态,如果一台web服务器宕机,会将故障机器从集群中剔除
- keepalieve会从以下三层来检查集群中的服务是否正常:
- 1)layer3:通过ICMP协议ping测试
- 2)layer4:比如web服务,keepalived检查80端口是否启动
- 3)layer7:根据用户的设定检查服务器程序运行是否正常
2、keepalived–VRRP冗余协议原理
注:vrrp是虚拟路由冗余协议,就是当出现单点故障问题通过竞选方式决定vip走向的一种机制
- Keepalived高可用是通过vrrp协议通信的,vrrp是通过竞选机制决定主备
- Keepalived 主的服务器会一直发送 VRRP广播包,告诉备它还活着
- 当备机监听不到主发送的广播包时,就人为主机不可用,所有备机通过配置文件中的优先级选举新的主机
- 新的主机就会启动相关服务接管资源,保证业务的连续性
三. keepalive+haproxy高可用集群
1、真实keepalive集群部署架构图
1)haproxy中的配置
- haproxy的
frontend模块配置负责给用户请求一个接口,backend定义可以定义后端一组服务器(其实就是keepalive主机组) - 一个frontend可以拥有多个backend,一个backend也可以让多个不同的frontend调用(后端api接口可以被多个前端调用)
- 具体流程就是当frontend接受到用户请求,根据我们的配置交给指定的backend处理请求。
- backend再将请求分发到真正的后端服务器
2)keepalive中的配置
- 两台keepalive服务器同时监听一个虚拟IP,同一时间只有keepalive-master集群能够进行服务代理
- 当keepalive-master宕机,keepalive-slave会立刻顶替master执行集群代理服务
四. 使用docker-compose配置keepalive
1、环境说明(这里借用compose测试)
‘’‘环境中只需要一台虚拟机,然后使用docker-compose来启动三个docker容器模拟
haproxy、keepalive-master、keepalive-slave ‘’’
haproxy: 0.0.0.0:8000 (在docker-compose网络中映射宿主机的8000端口到haproxy)
keepalive-master: 172.20.128.2(VIP:172.20.128.4:80)
keepalive-slave: 172.20.128.3 (VIP:172.20.128.4:80)
2、部署keepalive项目代码
docker-compose.yml:
version: "3"
services:
nginx_master:
build:
context: ./
dockerfile: ./Dockerfile
volumes:
- ./index-master.html:/usr/share/nginx/html/index.html
- ./favicon.ico:/usr/share/nginx/html/favicon.ico
- ./keepalived-master.conf:/etc/keepalived/keepalived.conf
networks:
static-network:
ipv4_address: 172.20.128.2
cap_add: