配置HAproxy七层负载均衡方案

一、环境准备

① 准备六台主机

  • 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
后面跟的参数看配置文件在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值