一、环境准备
① 准备六台主机
- client
- 192.168.204.20
- HAproxy
- 192.168.204.21
- html1
- 192.168.204.22
- html2
- 192.168.204.23
- php1
- 192.168.204.24
- php2
- 192.168.204.25
② 同步时间
ntpdate ntp.aliyun.com
③ 关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
④ 配置yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
二、安装和修改配置文件
1、安装软件
html1和html2:
安装并启动httpd
yum insatll -y httpd
systemctl start httpd
html1:
echo html1 > /var/www/html/index.html
html2:
echo html2 > /var/www/html/index.html
php1和php2:
yum install -y php httpd
systemctl start httpd
php1:
echo php1 > /var/www/html/index.php
php2:
echo php2 > /var/www/html/index.php
haproxy:
安装haproxy
yum install -y haproxy
2、配置HAproxy(192.168.204.21)
修改配置文件
global
log 127.0.0.1 local3 info
maxconn 4096
uid nobody
# uid 99
gid nobody
# gid 99
daemon
nbproc 1
pidfile /run/haproxy.pid
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
contimeout 5000
clitimeout 50000
srvtimeout 50000
#timeout connect 5000
#timeout client 50000
#timeout server 50000
option abortonclose
stats uri /oye
stats realm Private lands
stats auth admin:password
stats hide-version
frontend http-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl html url_reg -i \.html$
acl php url_reg -i \.php$
use_backend html-server if html
use_backend php-server if php
default_backend html-server
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server html-A 192.168.204.22:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B 192.168.204.23:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
backend php-server
mode http
balance roundrobin
option httpchk GET /index.php
cookie SERVERID insert indirect nocache
server php1 192.168.204.24:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server php2 192.168.204.25:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
每段代码的作用:
全局设置(global 部分)
global
定义全局配置,这些配置影响 HAProxy 实例的整体行为。
log 127.0.0.1 local3 info
指定日志服务器的 IP 地址(127.0.0.1)和日志的设施标识(local3),设置日志级别为 info。
maxconn 4096
设置 HAProxy 可以同时处理的最大连接数为 4096。
uid nobody
配置 HAProxy 以 nobody 用户身份运行,以提高安全性。
gid nobody
配置 HAProxy 以 nobody 组身份运行。
daemon
将 HAProxy 设置为后台进程运行。
nbproc 1
指定 HAProxy 使用的进程数量为 1。此配置适用于单处理器或测试环境。
pidfile /run/haproxy.pid
设置 PID 文件的位置为 /run/haproxy.pid,用于存储 HAProxy 进程的 PID。
默认设置(defaults 部分)
defaults
定义所有后续前端和后端部分的默认设置。
log global
使用全局设置中的日志配置。
mode http
设置默认模式为 HTTP,意味着 HAProxy 将以 HTTP 协议处理请求。
maxconn 2048
设置每个前端或后端的最大连接数为 2048。
retries 3
配置请求失败后重试次数为 3 次。
option redispatch
启用请求重新调度选项,当服务器忙碌时尝试将请求重新调度到其他服务器。
contimeout 5000
设置连接超时时间为 5000 毫秒(5 秒)。
clitimeout 50000
设置客户端连接超时时间为 50000 毫秒(50 秒)。
srvtimeout 50000
设置与后端服务器连接的超时时间为 50000 毫秒(50 秒)。
option abortonclose
启用客户端关闭连接时,立即终止后端服务器连接的选项。
stats uri /oye
设置统计页面的 URI 为 /oye。
stats realm Private lands
设置统计页面的权限区域名称为 Private lands。
stats auth admin:password
配置统计页面的访问认证用户名和密码为 admin:password。
stats hide-version
隐藏 HAProxy 的版本信息,以提高安全性。
前端设置(frontend 部分)
frontend http-in
定义前端部分,用于处理客户端的请求。
bind 0.0.0.0:80
监听所有 IP 地址上的 80 端口(HTTP 端口)。
mode http
设置前端模式为 HTTP。
log global
使用全局设置中的日志配置。
option httplog
启用 HTTP 请求日志记录。
option httpclose
启用 HTTP 连接关闭选项,即在每个请求之后关闭连接。
acl html url_reg -i \.html$
定义访问控制列表(ACL),用于匹配 URL 结尾为 .html 的请求。
acl php url_reg -i \.php$
定义访问控制列表(ACL),用于匹配 URL 结尾为 .php 的请求。
use_backend html-server if html
如果请求符合 html ACL,则使用 html-server 后端。
use_backend php-server if php
如果请求符合 php ACL,则使用 php-server 后端。
default_backend html-server
默认将所有不符合以上 ACL 的请求转发到 html-server 后端。
后端设置(backend 部分)
backend html-server
定义 html-server 后端,用于处理 .html 请求。
mode http
设置后端模式为 HTTP。
balance roundrobin
使用轮询算法(roundrobin)进行负载均衡,将请求均匀分配到各个服务器。
option httpchk GET /index.html
配置健康检查,定期向每个服务器发送 GET /index.html 请求以检查健康状态。
cookie SERVERID insert indirect nocache
插入 Cookie SERVERID,用于在负载均衡中保持会话一致性。
server html-A 192.168.204.22:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
配置名为 html-A 的服务器,IP 地址为 192.168.204.22,端口为 80。设置权重为 1,Cookie 为 3。健康检查间隔为 2000 毫秒(2 秒),上升阈值为 2,下降阈值为 5。
server html-B 192.168.204.23:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
配置名为 html-B 的服务器,IP 地址为 192.168.204.23,端口为 80。设置权重为 1,Cookie 为 4。健康检查间隔为 2000 毫秒(2 秒),上升阈值为 2,下降阈值为 5。
backend php-server
定义 php-server 后端,用于处理 .php 请求。
mode http
设置后端模式为 HTTP。
balance roundrobin
使用轮询算法进行负载均衡,将请求均匀分配到各个服务器。
option httpchk GET /index.php
配置健康检查,定期向每个服务器发送 GET /index.php 请求以检查健康状态。
cookie SERVERID insert indirect nocache
插入 Cookie SERVERID,用于保持会话一致性。
server php1 192.168.204.24:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
配置名为 php1 的服务器,IP 地址为 192.168.204.24,端口为 80。设置权重为 1,Cookie 为 3。健康检查间隔为 2000 毫秒(2 秒),上升阈值为 2,下降阈值为 5。
server php2 192.168.204.25:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
配置名为 php2 的服务器,IP 地址为 192.168.204.25,端口为 80。设置权重为 1,Cookie 为 4。健康检查间隔为 2000 毫秒(2 秒),上升阈值为 2,下降阈值为 5。
总结
这段配置文件通过 HAProxy 实现了两个主要功能:
根据请求的 URL 后缀(.html 或 .php)将请求路由到不同的后端服务器。
对 .html 和 .php 请求分别配置了不同的后端服务器池,并进行了健康检查配置,以确保请求能够均衡地分发并在服务器出现故障时进行处理。
启动haproxy
systemctl start haproxy
3、测试
client:
访问haproxy服务器
elinks --dump http://192.168.204.21
如果显示未找到命令,安装elinks
yum install -y elinks
在浏览器上输入http://192.168.204.21/oye
根据自己haproxy服务器的IP
后面跟的参数看配置文件