基于keepalived+haproxy实现ha(High Available)
1、Keepalived简介
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
2、实验环境
说明:
haporxy保证web server高可用(本实现用nginx做web服务器)
Keepalived保证vip及haporxy高可用,主备模式保证自己本身的高可用
2.1、安装nginx(提供web服务)
在两台实验机上安装nginx作为web server进行访问,这里用172.16.172.139和172.16.172.139作为两台server机。
#apt install -y nginx;
由于是默认安装,在各自对应的/var/www/html下写上内容用以标记
172.16.172.139首页配置:
172.16.172.140首页配置:
2.2、安装haproxy
安装负载均衡中间件haproxy。
#apt install -y haproxy
编辑haproxy配置文件
vim /etc/haproxy/haproxy.cfg
在其最下方添加以下几行:
*bind :81,这里表示haproxy占用的端口,默认为80,nginx占用了,我们这边改成81
default_backend,这里表示默认指向名为websrvs(自定义别名,需要跟backend 后面别名一致)
balance后跟的是选择的负载均衡算法,roundrobin为轮循,基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接。
配置完成后,重启haproxy服务
#systemclt restart haproxy.service
简单脚本测试:
#while true ; do curl 172.16.172.139:81 ; sleep 1 ; done
可以看到后端相应为两台服务器,权重为我们配置的1:3
2.3、安装keepalived
在两台haproxy设备上安装keepalived,是为了保证haproxy负载均衡的高可用性,使用命令进行安装apt install -y keepalived
安装完成后,编辑文件/etc/keepalived/keepalived.conf,基于UOS的apt源安装的keepalived没有keepalived.conf,需要自己建立,简单模板如下:
自定义脚本中weight说明:,检查haproxy的存活,如果主haproxy挂掉,会根据配的值来降权,降到比BACKUP低的权重,让BACKUP抢做MASTER,保证网站或者服务继续存在
配置完成后,重启keepalived,使用命令systemctl restart keepalived,之后配置keepalived的BACKUP设备。
备机的配置注意以下四点:
1、state BACKUP
2、virtual_route_id必须和主的相同
3、prority优先级需要比主的低,并且weight - 之后应该比主节点高
其他配置都一样
3、验证
按照上述配置完成后,主节点会虚拟一个网卡:ens:1,ip为配置的vip
我们根据vip访问haproxy,可以发现跟我们直接访问haproxy结果一致:
此时我们停掉主keepalived,观测结果
关闭keepalived服务后,服务视觉感觉是没有中断的,说明主keepalived挂掉后,backup迅速抢占为主keepalived,保证了keepalived的高可用。
此时backup机的ens33:1网卡信息出来了
备用节点目前网卡情况:
关闭主节点haproxy测试
可以看到主节点vip已经没有了,此时vip由备节点提供
主节点网络情况:
备用节点网络情况
访问测试:
It’s all ,thanks