基于HAProxy的Web负载均衡集群实验方案

实验规划

在这里插入图片描述

环境规划

在实验环境下,保持防火墙和selinux均关闭,配置阿里云和epel镜像源

实验步骤

部署nginx后端web服务器(19.16.2.162 & 19.16.2.163)

安装nginx
yum -y install nginx
配置web页面

创建测试页面:

echo "Welcome to Nginx-1 (19.16.2.163)" > /usr/share/nginx/html/index.html
echo "Welcome to Nginx-2 (19.16.2.162)" > /usr/share/nginx/html/index.html
启动服务:
systemctl start nginx && systemctl enable nginx
查看进程
ss -tulanp | grep nginx
ps aux | grep nginx

在这里插入图片描述

部署HAProxy调度器(19.16.2.164)(资源随文上传)

安装前置依赖
yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel readline-devel

lua环境安装

mkdir -pv /usr/local/src
cd /usr/local/src
tar -zxvf lua-5.3.6.tar.gz -C /usr/src
cd /usr/src/lua-5.3.6/
make linux ; echo $?

在这里插入图片描述

make install INSTALL_TOP=/usr/local/lua ; echo $?

在这里插入图片描述

安装haproxy

编译安装
cd /usr/local/src/
tar -zxvf haproxy-2.2.14.tar.gz -C /usr/src
cd /usr/src/haproxy-2.2.14/
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 LUA_LIB=/usr/local/lua/lib/ LUA_INC=/usr/local/lua/include/ USE_PCRE=1 USE_SYSTEMD=1 ; echo $?

在这里插入图片描述

make install PREFIX=/usr/local/haproxy ; echo $?

在这里插入图片描述

创建服务脚本
cd /usr/local/haproxy/
cp -av /usr/src/haproxy-2.2.14/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
优化执行文件路径
cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
创建用户可用于运行haproxy
useradd haproxy -s /sbin/nologin
haproxy配置文件新版本中默认不存在需要创建
mkdir -pv /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
# 标准化生产环境中需要查看haproxy的uid和gid,然后在配置文件中做修改.本文是基于虚拟机的实验环境,所以此处未作出修改
id -u haproxy

以下配置文件内容直接复制即可

global
	log 127.0.0.1 local0 info
	maxconn 256
	#chroot /usr/local/haproxy
	uid 99
	gid 99
	daemon
defaults
	mode http
	timeout connect 5000ms
	timeout client 50000ms
	timeout server 50000ms
	option httpclose
	option dontlognull
	option forwardfor
	option redispatch
	option abortonclose
frontend http-in
	bind *:80
	default_backend servers
backend servers
	option httpchk GET /index.html
	balance roundrobin
	server server1 19.16.2.163:80 check inter 2000 rise 2 fall 5
	server server2 19.16.2.162:80 check inter 2000 rise 2 fall 5
启动haproxy
chkconfig --add /etc/init.d/haproxy
service haproxy start
#或
haproxy -f /usr/local/haproxy/haproxy.cfg
开启haproxy的统计页面

在proxy配置文件中添加以下内容

listen stats
	mode http
	bind 0.0.0.0:9999
	stats enable
	log global
	stats uri /status
	stats auth haadmin:fanzc

在这里插入图片描述

配置文件内容全文注释
global
log 127.0.0.1 local0 info #日志输出配置,所有日志都记录在本机,通过local0输出
maxconn 256 #连接最大数
chroot /usr/local/haproxy #haproxy安装路径,一般需将此行注释掉
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
daemon #后台运行
defaults
mode http #模式为http
timeout connect 5000ms #连接超时时间
timeout client 50000ms #客户端超时时间
timeout server 50000ms #服务器超时时间
option httpclose #每次请求完毕后主动关闭http通道
option dontlognull #不记录健康检查的日志信息
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
listen stats #配置haproxy web监控,查看统计信息
mode http #模式为http
bind 0.0.0.0:9999 #前端浏览器中查看统计的WEB界面地址
stats enable #开启状态
log global
stats uri /status #设置haproxy监控地址为http://localhost:9999/status
stats auth haadmin:fanzc #设置查看统计的账号密码,格式为’账号:密码’
frontend http-in #定义一个名为http-in的应用
bind *:80
default_backend servers #用户请求转发到名称为servers的后端模块处理
backend servers
option httpchk GET /index.html #检查服务器的index.html文件
balance roundrobin #负载均衡调度算法 轮询:roundrobin;最小连接数:leastconn;来源访问调度source
server server1 19.16.2.163:80 check inter 2000 rise 2 fall 5
server server2 19.16.2.162:80 check inter 2000 rise 2 fall 5
#check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
#rise 2 #表示两次正确证明服务器可用
#fall 3 #表示连续三次检测不到心跳频率则认为该节点失效

重启服务
service haproxy restart

测试

http://19.16.2.164(你的HAproxy服务器ip):9999/status
输入用户名密码haadmin:fanzc

在这里插入图片描述

haproxy日志配置

HAProxy可以基于rsyslog记录日志到指定的设备
修改haproxy配置文件

vim /etc/haproxy/haproxy.cfg
log 127.0.0.1 local3 info #在全局配置段中配置,定义日志记录级别

在这里插入图片描述
修改syslog的配置文件

vim /etc/rsyslog.conf
...
#Provides UDP syslog reception
$ModLoad imudp #日志传输基于udp所以需要开启
$UDPServerRun 514 #这里两项
local3.* /var/log/haproxy.log#添加
...

在这里插入图片描述

重启haproxy和rsyslog服务

systemctl restart rsyslog
service haproxy restart

通过浏览器访问http://19.16.2.164:9999/status后,查看日志

 tail -f /var/log/haproxy.log

在这里插入图片描述

验证

浏览器访问http://19.16.2.164/并F5或者ctrl+F5刷新,可以看到轮询两台nginx服务器的首页,或者在CMD中curl 19.16.2.164,输出如下:
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐