haproxy--实现能7层负载均衡、基于cookie会话保持、状态页监控的高性能web服务器集群

本篇博客将详细介绍该实验的高性能web服务器集群架构及环境配置流程、haproxy的七层负载均衡、cookie会话保持和haproxy状态页的配置流程和方法,通过本篇博客你将会学到haproxy的七层负载均衡集群架构,以及通过haproxy实现七层负载均衡,配置haproxy状态页实现对集群的监控,并且最终可以搭建一个可监控的高性能web服务器集群。

所有实验主机所用系统为RHEL9.3

一、实验集群架构和环境配置及流程

1.1 集群架构图

1.2 主机环境清单

本次实验总共需要4台主机,分别是

  • 客户机(client),提供访问请求,一张NAT网卡,IP地址为172.25.254.99/24
  • 调度器(haproxy),分发访问请求,一张NAT网卡,IP地址为172.25.254.100/24,一张仅主机网卡,IP地址为192.168.0.100/24
  • 服务器1(webserver1),提供http服务,一张仅主机网卡,IP地址为192.168.0.10/24
  • 服务器2(webserver2),提供http服务,一张仅主机网卡,IP地址为192.168.0.20/24

注意:服务器1和2提供服务应当一致,不过为了体现负载均衡效果,本次实验将为两台服务主机配置不同的index.html以区分

二、实验主机环境配置

2.1 客户机环境配置

1、配置网络信息

bash 复制代码
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=172.25.254.99/24,172.25.254.2
method=manual
[root@client ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:7f:85:ef brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 172.25.254.99/24 brd 172.25.254.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::1ed8:cb9:9fd6:e061/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

网络配置信息如上,请自行配置

2.2 调度器环境配置

1、配置网络信息

bash 复制代码
[root@HA ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0


[ipv4]
method=manual
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
[root@HA ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1


[ipv4]
method=manual
address1=192.168.0.100/24
[root@HA ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:0c:d4:e1 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::59b4:be7d:31f1:5ce7/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:0c:d4:eb brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    altname ens192
    inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::c069:c48d:8bd4:77e6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2、调度器开启内核路由功能

bash 复制代码
[root@HA ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

[root@HA ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@HA ~]# sysctl -p
net.ipv4.ip_forward = 1

2.3 服务器1/服务器2环境配置

以下仅展示服务器1,服务器2与之同理

1、网络环境配置

bash 复制代码
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0


[ipv4]
method=manual
address1=192.168.0.10/24
[root@webserver1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c4:45:a5 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2360:d7ac:9af2:bb39/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2、配置http服务

webserver1

bash 复制代码
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1-192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd

webserver2

bash 复制代码
[root@webserver2 ~]# dnf install httpd -y
[root@webserver2 ~]# echo webserver2-192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

以上各个主机的环境均已配置完毕,接下来进行测试确保配置没有问题

2.4 测试

测试主机之间网络通信是否有问题,测试两个webserver服务器是否可以正常提供http服务

可见各个主机之间通信,以及两个webserver主机服务都没有问题

三、调度器配置haproxy实现七层负载均衡和通过cookie实现会话保持

3.1 调度器安装启动haproxy

下载安装haproxy并设置开机自启动

bash 复制代码
[root@HA ~]# dnf install haproxy -y
[root@HA ~]# systemctl enable --now haproxy

3.2 调度器配置haproxy配置文件,实现七层负载均衡

配置haproxy的配置文件,将默认的负载均衡配置注释掉后添加以下配置,配置算法为动态rr,后台两台服务器,开启健康检测,每隔3秒检测一次,若连续三次检测失败则判定不健康,标记为不可用,连续5次检测成功就重新标记为可用,设置权重为1,则两台服务器依次处理访问请求

bash 复制代码
[root@HA ~]# vim /etc/haproxy/haproxy.cfg
listen webcluster-http
    bind        *:80  
    mode        http
    balance     roundrobin
    server webserver1 192.168.0.10:80 check inter 3s fall 3 rise 5 weight 1
    server webserver2 192.168.0.20:80 check inter 3s fall 3 rise 5 weight 1

修改过配置文件后需要重启服务

bash 复制代码
[root@HA ~]# systemctl restart haproxy

3.3 测试

以上流程完成了haproxy的七层负载均衡配置,接下来通过客户机进行访问测试,确保配置正确

可见客户端访问VIP可以成功获取到后台两台服务器的服务,至此haproxy的七层负载均衡配置结束。

3.4 配置cookie会话保持

1、打开配置文件进行修改

设定webserver1主机的cookie值为web1,webserver2主机的cookie值为web2

bash 复制代码
[root@HA ~]# vim /etc/haproxy/haproxy.cfg
listen webcluster
    bind        *:80
    balance     roundrobin
    hash-type   consistent
    cookie WEBCOOKIE insert nocache indirect
    server webserver1 192.168.0.10:80 cookie web1 check inter 3s fall 3 rise 5 weight 2
    server webserver2 192.168.0.20:80 cookie web2 check inter 3s fall 3 rise 5 weight 1

配置完成后重启服务

bash 复制代码
[root@HA ~]# systemctl restart haproxy.service

3.5 cookie会话保持测试

使用firefox浏览器访问测试

可见访问请求一直发给10主机

使用edge浏览器访问测试

可以看见访问请求一直被调度到20主机上

以上配置完成了基于cookie实现会话保持功能,至此该流程结束

四、配置haproxy状态页实现对集群的监控

4.1 配置状态页

重新打开haproxy的配置文件编辑状态页相关配置,并添加以下内容,配置监听4321端口,设置刷新时间为30s,设置了访问状态页的URI路径为/status,设置访问的账户密码均为admin

bash 复制代码
[root@HA ~]# vim /etc/haproxy/haproxy.cfg
listen stats
    mode    http
    bind    0.0.0.0:4321
    stats   enable
    log     global
    stats   refresh 30s   
    stats   uri     /status
    stats   auth    admin:admin

配置完成后重启服务

bash 复制代码
[root@HA ~]# systemctl restart haproxy

4.2 测试

浏览器访问查看是否配置成功

可见状态页已经成功监控到集群,然后关闭其中一台服务器查看状态页是否更新

可见状态页可以正常更新,至此状态页配置结束。

综上,至此本实验全部圆满完成,成功通过haproxy实现了七层负载均衡,基于cookie实现会话保持,以及配置了状态页实现对集群的监控,最终成功构建了可监控的高性能web服务器集群

相关推荐
Sylvan Ding5 小时前
Clawdbot (OpenClaw/Moltbot) 内网穿透部署方案(安全有效-Linux-2026.01.30)
linux·运维·安全·tailscale·clawdbot·moltbot·openclaw
艾莉丝努力练剑5 小时前
【QT】信号与槽
linux·开发语言·c++·人工智能·windows·qt·qt5
小苏兮5 小时前
【把Linux“聊”明白】命令行参数与环境变量
linux·运维·服务器·学习
lcx_defender6 小时前
【Docker】Docker部署运行Seata
运维·docker·容器
cuijiecheng20186 小时前
Linux下inih库的使用
linux·运维·服务器
GIS瞧葩菜6 小时前
entity几何体轴编辑(沿 Z 轴平移)完整流程拆解
linux·运维·ubuntu
confiself8 小时前
GO环境配置
linux·运维·centos
爱装代码的小瓶子8 小时前
【c++与Linux基础】文件篇(4)虚拟文件系统VFS
linux·开发语言·c++
可可嘻嘻大老虎14 小时前
nginx无法访问后端服务问题
运维·nginx