1.1 keepalived高可用软件介绍
参考:
haproxy:
https://blog.csdn.net/l835311324/article/details/83031084
https://blog.csdn.net/qq_41772936/article/details/80718014
https://blog.51cto.com/3381847248/1977073
keepalive:
https://blog.csdn.net/celeste7777/article/details/49096167
https://v3u.cn/a_id_117
1、keepalived--监控检查
注:keepalive软件有两种功能:监控检查、VRRP冗余协议
1. keepalive的作用是检测web服务器的状态,如果一台web服务器宕机,会将故障机器从集群中剔除
2. keepalieve会从以下三层来检查集群中的服务是否正常:
1)layer3:通过ICMP协议ping测试
2)layer4:比如web服务,keepalived检查80端口是否启动
3)layer7:根据用户的设定检查服务器程序运行是否正常
2、keepalived--VRRP冗余协议原理
注:vrrp是虚拟路由冗余协议,就是当出现单点故障问题通过竞选方式决定vip走向的一种机制
1. Keepalived高可用是通过vrrp协议通信的,vrrp是通过竞选机制决定主备
2. Keepalived 主的服务器会一直发送 VRRP广播包,告诉备它还活着
3. 当备机监听不到主发送的广播包时,就人为主机不可用,所有备机通过配置文件中的优先级选举新的主机
4. 新的主机就会启动相关服务接管资源,保证业务的连续性
1.2 keepalive+haproxy高可用集群
1、真实keepalive集群部署架构图
1)haproxy中的配置
1. haproxy的 frontend模块配置负责给用户请求一个接口,backend定义可以定义后端一组服务器(其实就是keepalive主机组)
2. 一个frontend可以拥有多个backend,一个backend也可以让多个不同的frontend调用(后端api接口可以被多个前端调用)
3. 具体流程就是当frontend接受到用户请求,根据我们的配置交给指定的backend处理请求。
4. backend再将请求分发到真正的后端服务器
2)keepalive中的配置
1. 两台keepalive服务器同时监听一个虚拟IP,同一时间只有keepalive-master集群能够进行服务代理
2. 当keepalive-master宕机,keepalive-slave会立刻顶替master执行集群代理服务
1.3 使用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项目代码
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: - NET_ADMIN nginx_slave: build: context: ./ dockerfile: ./Dockerfile volumes: - ./index-slave.html:/usr/share/nginx/html/index.html - ./favicon.ico:/usr/share/nginx/html/favicon.ico - ./keepalived-slave.conf:/etc/keepalived/keepalived.conf networks: static-network: ipv4_address: 172.20.128.3 cap_add: - NET_ADMIN proxy: image: haproxy:1.7-alpine ports: - 8000:6301 volumes: - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg networks: - static-network networks: static-network: ipam: config: - subnet: 172.20.0.0/16