KeepAlived是一款基于VRRP协议实现的负载均衡软件,可以在多个服务器节点之间实现高可用部署和负载均衡。它通过检测后端节点的健康状态,将请求分发到可用的节点上。同时,Keepalived还支持多种健康检查方式和自定义的负载均衡算法,可以满足不同场景的需求。
HAproxy是一款高性能的负载均衡软件,可以通过轮询、加权轮询、最少连接数、URL Hash等多种算法,将请求分发到后端节点上,以实现高可用和性能优化。同时,HAproxy还支持各种健康检查方式,可以自动剔除故障节点,确保服务的可用性和稳定性。
两者的原理都是通过集中式的负载均衡器将流量分发到后端多个服务器上,从而提升系统的可用性和性能。它们通过监听前端的请求,将请求分发到后端的应用服务器上,同时进行健康检查,算法调度等处理,在后端节点出现故障时,自动将流量切换到其他可用节点上,以保证服务的可用性和稳定性
KeepAlived应用:
打开ip转发功能的内核参数
环境说明:
web1:eth0->192.168.88.100/24
web2:eth0->192.168.88.200/24
配置keepalived步骤
# 在两台web服务器上安装keepalived
[root@web1 ~]# yum install -y keepalived httpd
[root@web2 ~]# yum install -y keepalived httpd
# 修改配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf
12 router_id web1 # 设置本机在集群中的唯一识别符
13 vrrp_iptables # 自动配置iptables放行规则新添加的
20 vrrp_instance VI_1 {
21 state MASTER # 状态,主为MASTER,备为BACKUP
22 interface eth0 # 网卡
23 virtual_router_id 51 # 虚拟路由器地址
24 priority 100 # 优先级
25 advert_int 1 # 发送心跳消息的间隔
26 authentication {
27 auth_type PASS # 认证类型为共享密码
28 auth_pass 1111 # 集群中的机器密码相同,才能成为集群
29 }
30 virtual_ipaddress {
31 192.168.88.80/24 #对外公布的VIP地址
32 }
33 }
# 删除下面所有行
[root@web1 ~]# tail -f /var/log/messages | grep -i keepalived
# 打开一个新的终端监控日志,新日志将出持续显示在屏幕上。退出按ctrl+c
[root@web1 ~]# systemctl start keepalived
# 在前一个终端启动服务
[root@web1 ~]# ip a s eth0 # eth0将会增加额外的88.80地址
# 等几秒服务完全启动后,可以查看到vip
# 配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.200:/etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id web2 # 改id
13 vrrp_iptables
... ...
20 vrrp_instance VI_1 {
21 state BACKUP # 改状态
22 interface eth0
23 virtual_router_id 51
24 priority 80 # 改优先级
25 advert_int 1
26 authentication {
27 auth_type PASS
28 auth_pass 1111
29 }
30 virtual_ipaddress {
31 192.168.88.80/24
32 }
33 }
[root@web2 ~]# systemctl start keepalived
# 启动服务
[root@web2 ~]# ip a s eth0 # 查看地址,eth0不会出现vip
[root@client1 ~]# curl http://192.168.88.80/
# 测试,访问88.80,看到web1上的内容
192.168.88.100
[root@web2 ~]# tail -f /var/log/messages | grep -i keepalived
# 在web2上监控日志
[root@web1 ~]# systemctl stop keepalived.service
# 关闭web1上的keepalived,观察web2的日志输出
[root@client1 ~]# curl http://192.168.88.80/
# 测试,访问88.80,看到web2上的内容
192.168.88.200
[root@web2 ~]# ip a s eth0
#在web2上查看vip,可以查看到vip 192.168.88.80
HAproxy应用:
HAProxy的工作模式:
mode http:只适用于web服务
mode tcp:适用于各种服务
mode health:仅做健康检查,很少使用
环境准备:
client1:eth0 -> 192.168.88.10
HAProxy:eth0 -> 192.168.88.5
web1: eth0 -> 192.168.99.100
web2: eth0 -> 192.168.99.200
[root@haproxy1 ~]# yum install -y haproxy
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
# 配置文件中,global是全局配置;default是缺省配置,如果后续有和default相同的配置,default配置将会被覆盖。
# 配置文件中,frontend描述haproxy怎么和用户交互;backend描述haproxy怎么和后台应用服务器交互。这两个选项,一般不单独使用,而是合并到一起,名为listen。
# 将61行之后全部删除,写入以下内容
61 listen myweb 0.0.0.0:80 # 定义本机监听地址
62 balance roundrobin # 调度算法为轮询
63 server web1 192.168.99.100 check inter 2000 rise 2 fall 5 #对99.100和99.200轮询
64 server web2 192.168.99.200 check inter 2000 rise 2 fall 5 #对99.100和99.200轮询
66 listen stats 0.0.0.0:1080 # 定义监控地址
67 stats refresh 30s # 设置监控页面自动刷新时间为30秒
68 stats uri /stats # 定义监控地址是/stats
69 stats auth admin:admin # 监控页面的用户名和密码都是admin
# 启服务
[root@haproxy1 ~]# systemctl start haproxy.service
# 使用firefox访问监控地址 http://192.168.88.5:1080/stats
监控地址 http://192.168.88.5:1080/stats