Haproxy搭建http负载均衡
??????HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy
环境准备
主机名称 | IP地址 | 需要安装应用 | 系统版本 |
---|
client | 192.168.160.131 | 无 | CentOS 8.5 | LB | 192.168.160.132 | haproxy | CentOS 8.5 | RS1 | 192.168.160.137 | httpd | CentOS 8.5 | RS2 | 192.168.160.139 | httpd | CentOS 8.5 |
//LB、RS1、RS2都关闭防火墙和selinux
[root@LB ~]
[root@LB ~]
[root@LB ~]
[root@RS1 ~]
[root@RS1 ~]
[root@RS1 ~]
[root@RS2 ~]
[root@RS2 ~]
[root@RS2 ~]
//RS1和RS2部署httpd
[root@RS1 ~]
[root@RS1 ~]
[root@RS1 ~]
[root@RS1 ~]
[root@RS2 ~]
[root@RS2 ~]
[root@RS2 ~]
[root@RS2 ~]
//下载安装包
haproxy源码包下载网站地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
[root@LB ~]
//安装编译环境
[root@LB ~]
//创建haproxy用户
[root@LB ~]
//解压和安装
[root@LB ~]
[root@LB ~]
[root@LB haproxy-2.1.3]
[root@LB haproxy-2.1.3]
> TARGET=linux-glibc \
> USE_OPENSSL=1 \
> USE_ZLIB=1 \
> USE_PCRE=1 \
> USE_SYSTEMD=1
[root@LB haproxy-2.1.3]
[root@LB haproxy-2.1.3]
//修改LB的内核参数
[root@LB ~]
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
//修改haproxy配置文件
[root@LB ~]
[root@LB ~]
//清空默认配置文件
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
server web01 192.168.160.137:80
server web02 192.168.160.139:80
//启动haproxy,配置haproxy.service服务单元文件
[root@LB ~]
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
[root@LB ~]
//启动haproxy服务
[root@LB ~]
[root@LB ~]
[root@LB ~]
[root@LB ~]
[root@LB ~]
//配置日志信息
[root@LB ~]
local0.* /var/log/haproxy.log
//客户端验证
[root@client ~]
RS1
[root@client ~]
RS2
[root@client ~]
RS1
[root@client ~]
RS2
使用WEB网页访问测试
[root@LB ~]
//清空,修改为如下:
global
log 127.0.0.1 local0 info
maxconn 20480
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
defaults
mode http
log global
option dontlognull
option httpclose
option httplog
option redispatch
balance roundrobin
timeout connect 10s
timeout client 10s
timeout server 10s
timeout check 10s
maxconn 60000
retries 3
listen admin_stats
bind 0.0.0.0:8189
stats enable
mode http
log global
stats uri /haproxy_stats
stats realm Haproxy\ Statistics
stats auth admin:admin
stats admin if TRUE
stats refresh 30s
listen webcluster
bind 0.0.0.0:80
mode http
log global
maxconn 3000
balance roundrobin
cookie SESSION_COOKIE insert indirect nocache
server web01 192.168.160.137:80 check inter 2000 fall 5
server web02 192.168.160.139:80 check inter 2000 fall 5
//重启服务
[root@LB ~]
[root@LB ~]
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:8189 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
网页访问测试 用户名和密码都为admin
|