首页 > 其他分享 >Haproxy搭建Web群集

Haproxy搭建Web群集

时间:2024-06-13 19:29:47浏览次数:10  
标签:Haproxy Web tomcat 群集 192.168 cd nginx haproxy

目录

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.cfg
log 127.0.0.1 local0 info
   log 127.0.0.1 local1 warning
   maxconn 30000
   pidfile     /var/run/haproxy.pid
   user haproxy
   group haproxy
   daemon
   spread-checks 2

defaults
   log        global
   mode       http
   option     httplog
   option     http-server-close
   option     forwardfor
   option     dontlognull
   option     redispatch
   option     abortonclose
   maxconn    20000
   retries    3
   timeout    http-request 2s
   timeout    queue 3s
   timeout    connect 1s
   timeout    client 10s
   timeout    server 2s
   timeout    http-keep-alive 10s
   timeout    check 2s

frontend http-xy101
   bind 192.168.9.210:80
   #maxconn 20000
   #acl url_static path beg -i /static
   acl url_jsp path_end -i .jsp

   #use_backend_static_backend if url_static
   use_backend tomcat_backend if url_jsp
   default_backend nginx_backend

backend nginx_backend
   balance roundrobin
   option http-keep-alive
   option httpchk GET /test.html
   server nginx.inst1 192.168.9.140:80 maxconn 10000 check inter 2000 rise 2 fall 3
   server nginx.inst2 192.168.9.150:80 maxconn 10000 check inter 2000 rise 2 fall 3

backend tomcat_backend
   balance roundrobin
   option http-server-close
   cookie HA_STICKY_dy insert indirect nocache
   server tomcat.inst1 192.168.9.140:8080 cookie tomcat.inst1 maxconn 10000 check inter 2000 rise 2 fall 3
   server tomcat.inst2 192.168.9.150:8080 cookie tomcat.inst2 maxconn 10000 check inter 2000 rise 2 fall 3

listen stats
   bind :8000
   stats enable
   stats refresh 30s
   stats uri /stats
   stats realm HAProxy\ Stats
   stats 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 below
   server 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/haproxy

vim /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 restart

tail -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,tomcat,群集,192.168,cd,nginx,haproxy
From: https://blog.csdn.net/2402_83805984/article/details/139643106

相关文章

  • 【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档
    1项目功能【java计算机专业学长毕业设计分享】智慧图书管理系统JavaSpringBootvueHTMLMySQL前后端分离2项目介绍系统功能:智慧图书管理系统包括管理员和用户两种角色。管理员的功能包括在个人中心修改个人信息和密码,管理员功能模块管理管理员。基础数据管理模......
  • webman admin 中的 Layui 使用说明
    目录Layui背景生命周期底层方法通用Common模块化相关Modular事件Event模块系统入门Layui模块系统与vue模块的区别理解layui.use代码解释Layui背景Layui是一个上古框架,jQuery时代末期Vue初期的作品,早期因为layout.js弹出层起家,在作者的努力下,成体系的开发了一套常......
  • stable-diffusion-webui 环境配置
    链接:AUTOMATIC1111/stable-diffusion-webui:StableDiffusionwebUI(github.com)查看python版本:   安装完python之后,打开工程,配置虚拟环境 下载安装对应的依赖库,其中的torch相关三个库选择与自己cuda相关的版本安装,我的pytorch选的是2.1.2,下载网址:download.pytorch.o......
  • 【最新鸿蒙应用开发】——ArkWeb2——arkts与h5交互
    H5与端侧交互1.应用侧调用前端页面函数应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。在下面的示例中,点击应用侧的“runJavaScript”按钮时,来触发前端页面的htmlTest()方法。前端页面代码。<!--index.html--><!DOCTYPEhtml><html><body>......
  • Web--CSS基础
    文章目录定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局定义方式行内样式表直接定义在style属性中,作用于当前标签<imgsrc="/imges/logo.jpg"alt=""style="width=400">内部样式表定义在style标签中......
  • JsSIP+FreeSwitch+Vue实现WebRtc音视频通话
    效果让同事帮我测的,在两个电脑分别打开该页面,一个注册1007分机号,另一个注册1005,然后拨打视频电话依赖版本jssip:3.6.1freeswitch:1.10.5-release~64bitvue:2.6.12488错误解决在freeswitch配置文件sip_profiles/internal.xml中添加:<paramname="apply-can......
  • 【护网必备】外网打点必备-WeblogicTool
    项目介绍迫于目前现有的weblogic工具没怎么更新、payloayjdk适用版本等问题,所以基于superman18、sp4zcmd等项目,写一个weblogic工具,工具运行版本要求jdk8(深信服深蓝实验室天威战队强力驱动)支持漏洞CVE-2023-21931(JNDI)CVE-2023-21839(JNDI)CVE-2020-2551(JRMP)CVE-2020-2551......
  • web前端网页制作课作业:网页设计期末作业 使用HTML CSS技术制作中华传统文化网站【文房
    ......
  • web网页设计期末课程大作业:家乡旅游主题网站设计——河北8页html css javascript
    ......
  • Web大前端全栈架构学习之路
    Web大前端是一个非常庞大的知识体系结构,需要学习和掌握的知识非常多,技术更新的速度也非常快,一直想把我们整个大前端的知识技能做一个系统的学习总结,及时的查缺补漏以及学习新的技能。大厂一线全栈开发12年,从小白到全栈架构,如何系统的学习Web大前端全栈架构,从今天开始持续更......