当前位置: 首页> 健康> 养生 > Haproxy搭建Web群集

Haproxy搭建Web群集

时间:2025/7/9 22:28:16来源:https://blog.csdn.net/2402_83805984/article/details/139643106 浏览次数:0次

目录

1.Haproxy相关概念

1.1 Haproxy的概述

1.2 Haproxy的主要特性

1.3 常见的Web集群调度器

2.应用分析

2.1 LVS 应用

2.2 Haproxy 应用

2.3 LVS、Nginx、Haproxy的区别

2.4 Haproxy调度算法原理

3. Haproxy搭建web群集

3.1 初始化操作

3.2 编译安装Haproxy

3.3 配置Haproxy启动程序

3.4 修改Haproxy配置

3.5 部署nginx和tomcat服务器

3.6 浏览器测试

3.7 配置日志输出文件

3.8 会话保持

1.源地址哈希

2.设置cookie

3.会话粘性表stick-table


1.Haproxy相关概念

1.1 Haproxy的概述

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)WEB站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护WEB服务器不被暴露到网络上。

1.2 Haproxy的主要特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法;
  • 支持Session会话保持,Cookie的引导;
  • 支持通过获取指定的url来检测后端服务器的状态;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 支持TCP和HTTP协议的负载均衡转发;
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成.

1.3 常见的Web集群调度器

2.应用分析

2.1 LVS 应用

2.2 Haproxy 应用

2.3 LVS、Nginx、Haproxy的区别

负载均衡转发性能:

  • (硬件负载均衡 F5 ) > ( 软件负载均衡 LVS > HAProxy > Nginx)

支持的代理类型:

  • LVS是基于Linux内核实现的软负载均衡,只支持四层代理转发,且不支持正则表达式处理,不能做动静分离
  • Nginx、HAProxy都是基于应用层实现的软负载均衡,都支持四层和七层代理转发,且也支持正则表达式处理,能做动静分离

配置维护:

  • LVS 实施配置复杂,维护成本相对较高
  • Nginx、HAProxy 配置简单,维护成本较低

健康检查: 

  • LVS可以配合keepalived实现高可用,以及实现TCP端口或HTTP URL方式的健康检查
  • Nginx默认只支持被动方式的TCP端口健康检查,主动检查需安装第三方模块nginx_upstream_check_module后才能支持
  • HAProxy默认就支持主动的TCP端1、HTTP URL、脚本等方式的健康检查

2.4 Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有八种,分别是roundrobin、static-rr、leastconn、source、uri、url_param、hdr(name)、rdp-cookie(name)。

3. Haproxy搭建web群集

192.168.9.210 Haproxy
192.168.9.140 
192.168.9.150

3.1 初始化操作

3.2 编译安装Haproxy

yum install -y gcc gcc+ make zlib-devel pcre-devel openssl-devel systemd-devel
useradd -M -s /sbin/nologin haproxy   #创建运行用户
make ARCCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1#编译
make install PREFIX=/usr/local/haproxy  #安装



3.3 配置Haproxy启动程序

cd /opt/haproxy-2.8.9/examples
mkdir /etc/haproxy
cp quick-test.cfg /etc/haproxy/haproxy.cfg
vim haproxy.init
修改26行
[ "${NETWORKING}" = "no" ] && exit 0   #${NETWORKING}添加双引号,否则实验会报错cp haproxy.init /etc/init.d/haproxy
cd /etc/init.d
chmod +x haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
haproxy -v  #查询
cd /etc/init.d
chkconfig --add haproxy
chkconfig --level 35 haproxy on
chkconfig --list haproxy
service haproxy start #开启服务
netstat -lntp | grep 8000  #查看开启状态





3.4 修改Haproxy配置

[root@localhost init.d]# cd /etc/haproxy
[root@localhost haproxy]# ls
haproxy.cfg
[root@localhost haproxy]# pwd
/etc/haproxy
[root@localhost haproxy]# vim haproxy.cfglog 127.0.0.1 local0 infolog 127.0.0.1 local1 warningmaxconn 30000pidfile     /var/run/haproxy.piduser haproxygroup haproxydaemonspread-checks 2defaultslog        globalmode       httpoption     httplogoption     http-server-closeoption     forwardforoption     dontlognulloption     redispatchoption     abortonclosemaxconn    20000retries    3timeout    http-request 2stimeout    queue 3stimeout    connect 1stimeout    client 10stimeout    server 2stimeout    http-keep-alive 10stimeout    check 2sfrontend http-xy101bind 192.168.9.210:80#maxconn 20000#acl url_static path beg -i /staticacl url_jsp path_end -i .jsp#use_backend_static_backend if url_staticuse_backend tomcat_backend if url_jspdefault_backend nginx_backendbackend nginx_backendbalance roundrobinoption http-keep-aliveoption httpchk GET /test.htmlserver nginx.inst1 192.168.9.140:80 maxconn 10000 check inter 2000 rise 2 fall 3server nginx.inst2 192.168.9.150:80 maxconn 10000 check inter 2000 rise 2 fall 3backend tomcat_backendbalance roundrobinoption http-server-close#cookie HA_STICKY_dy insert indirect nocacheserver tomcat.inst1 192.168.9.140:8080 cookie tomcat.inst1 maxconn 10000 check inter 2000 rise 2 fall 3server tomcat.inst2 192.168.9.150:8080 cookie tomcat.inst2 maxconn 10000 check inter 2000 rise 2 fall 3listen statsbind :8000stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin123# this is the address and port we'll listen to, the ones to aim the# load generators at# create a certificate and uncomment this for SSL# bind :8443 ssl crt my-cert.pem alpn h2,http/1.1# Put the server's IP address and port belowserver s1 172.31.32.33:8000[root@localhost haproxy]# haproxy -c -f haproxy.cfg     #检查配置文件
Configuration file is valid
[root@localhost haproxy]# service haproxy restart       #重启
Restarting haproxy (via systemctl):                        [  确定  ]



3.5 部署nginx和tomcat服务器

192.168.9.140 
192.168.9.150

两台服务器安装nginx并准备测试界面

192.168.9.140

cd /opt  #上传nginx压缩包
rpm -ivh nginx-1.24.0-1.el7.ngx.x86_64.rpm
cd /usr/share/nginx/html
echo '<h1>this is test web1 page</h1>' > test.html
systemctl enable --now nginx

192.168.9.150

cd /opt  #上传nginx压缩包
rpm -ivh nginx-1.24.0-1.el7.ngx.x86_64.rpm
cd /usr/share/nginx/html
echo '<h1>this is test web2 page</h1>' > test.html
systemctl enable --now nginx

测试:浏览器可输入http://192.168.9.(140/150)/test.html查看页面是否能够正常显示
 

两台服务器安装tomcat

192.168.9.140

cd /opt  #上传tomcat压缩包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat
./bin/startup.sh   #开启tomcat准备测试界面
cd /usr/local/tomcat/webapps/ROOT
vim test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<% out.println("动态页面1"); %>
</body>
</html>

192.168.9.150

cd /opt  #上传tomcat压缩包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat
./bin/startup.sh   #开启tomcat准备测试界面
cd /usr/local/tomcat/webapps/ROOT
vim test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<% out.println("动态页面2"); %>
</body>
</html>

测试:浏览器可输入http://192.168.9.(140/150):8080/test.jsp查看页面是否能够正常显示

3.6 浏览器测试

输入http://192.168.9.210/test.html


输入http://192.168.9.210/test.jsp


3.7 配置日志输出文件

#为 rsyslog 添加 haproxy 日志的配置
mkdir /var/log/haproxyvim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644                               #日志文件的权限
$FileOwner haproxy                                 #日志文件的owner
local0.*     /var/log/haproxy/haproxy.log          #local0接口对应的日志输出文件
local1.*     /var/log/haproxy/haproxy_warn.log     #local1接口对应的日志输出文件#修改 rsyslog 的启动参数
vim /etc/sysconfig/rsyslog
......
SYSLOGD_OPTIONS="-c 2 -r -m 0"#重启 rsyslog 和 HAProxy
service rsyslog restart
service haproxy restarttail -f /var/log/haproxy/haproxy.log




3.8 会话保持

1.源地址哈希

vim /etc/haproxy/haproxy.cfg
修改51行为balance source
service haproxy restart #重启

2.设置cookie


3.会话粘性表stick-table

55行下面添加
stick-table type ip size 5k expire 1m
stick on src
service haproxy restart  重启


关键字:Haproxy搭建Web群集

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: