当前位置: 首页 > news >正文

HAProxy 与 Tomcat

HAProxy 与 Tomcat 

一、HAProxy 负载均衡

(一)HAProxy 概述

HAProxy 是一款使用 C 语言编写的自由开源软件,核心功能包括高可用性保障负载均衡以及基于 TCP/HTTP 协议的应用代理。其特点如下:

  • 适用场景:特别适合高并发 Web 站点,支持会话保持与七层(HTTP)请求处理,可轻松应对数万级并发连接。
  • 运行模型:采用事件驱动的单一进程模型,避免多进程 / 多线程的内存限制与锁竞争问题;在多核系统上需优化以提升 CPU 利用率。
  • 行业应用:GitHub、Stack Overflow、Twitter、亚马逊 AWS 等知名平台均采用 HAProxy 作为负载均衡解决方案。

(二)负载均衡层级划分

负载均衡按网络协议层级可分为以下几类,HAProxy 支持四层(TCP)与七层(HTTP)负载均衡:

层级

核心原理

典型产品

适用场景

二层(MAC)

基于虚拟 MAC 地址转发请求,响应由后端真实 MAC 地址处理

交换机(如 Cisco)

局域网内低延迟转发

三层(IP)

基于虚拟 IP 地址(VIP)转发请求,分配至后端真实 IP

路由器、LVS

跨网段路由转发

四层(TCP)

基于 “IP + 端口” 接收请求,转发至后端对应服务端口

F5、LVS、HAProxy、Nginx

TCP 协议服务(如数据库、SSH)

七层(HTTP)

基于 URL、主机名、请求头等应用层信息转发请求

HAProxy、Nginx、Apache

Web 服务(HTTP/HTTPS)、API 接口

(三)HAProxy 安装部署

HAProxy 支持 yum 安装与源码安装,源码安装可自定义功能,是生产环境常用方式。

1. 环境准备

关闭防火墙与 SELinux(避免端口拦截):

systemctl stop firewalld && systemctl disable firewalldsetenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2. 安装方式一:yum 安装(简单快速)
yum -y install haproxy
3. 安装方式二:源码安装(推荐,自定义功能)
(1)下载源码包

HAProxy 源码包下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy/

以 haproxy-2.1.3.tar.gz 为例,上传至服务器后执行以下操作。

(2)安装编译依赖
yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua
(3)创建 HAProxy 专用用户
useradd -r -M -s /sbin/nologin haproxy 
# -r:系统用户;-M:不创建家目录;-s:禁止登录
(4)解压与编译安装
# 解压源码包tar -xzvf haproxy-2.1.3.tar.gzcd haproxy-2.1.3/# 清理旧编译文件make clean# 编译(启用 OpenSSL、Zlib、PCRE、Systemd 支持)make -j $(grep 'processor' /proc/cpuinfo | wc -l) \TARGET=linux-glibc \USE_OPENSSL=1 \USE_ZLIB=1 \USE_PCRE=1 \USE_SYSTEMD=1# 安装至指定目录make install PREFIX=/usr/local/haproxy# 复制命令至系统路径(方便全局调用)cp haproxy /usr/sbin/
(5)配置内核参数

启用 IP 非本地绑定与 IP 转发(确保 HAProxy 可绑定虚拟 IP 并转发请求):

vim /etc/sysctl.conf# 添加以下两行net.ipv4.ip_nonlocal_bind = 1 # 允许绑定非本地 IPnet.ipv4.ip_forward = 1 # 启用 IP 转发# 加载内核参数sysctl -p

(四)HAProxy 配置文件

HAProxy 核心配置文件为 /etc/haproxy/haproxy.cfg,需手动创建并配置全局参数、默认参数、监控页面与后端集群。

1. 配置文件模板
# -------------------------- 全局配置(global)--------------------------globallog 127.0.0.1 local0 info # 日志输出:本地 syslog(local0),级别 infomaxconn 20480 # 全局最大并发连接数pidfile /var/run/haproxy.pid # 进程 PID 文件路径user haproxy # 运行 HAProxy 的用户group haproxy # 运行 HAProxy 的用户组daemon # 后台运行模式# -------------------------- 默认参数(defaults)--------------------------defaultsmode http # 代理模式:http(七层)/ tcp(四层)log global # 继承 global 段的日志配置option dontlognull # 不记录空连接日志option httpclose # 每次请求后关闭 HTTP 连接option httplog # 记录 HTTP 详细日志(请求方法、URL、状态码等)option redispatch # 后端服务器不可用时,重新分配请求balance roundrobin # 负载均衡算法:轮询(roundrobin)timeout connect 10s # 连接后端服务器超时时间timeout client 10s # 客户端请求超时时间timeout server 10s # 后端服务器响应超时时间timeout check 10s # 健康检查超时时间maxconn 60000 # 每个前端/后端的最大并发连接数retries 3 # 连接失败重试次数(超过则标记服务器不可用)# -------------------------- 监控页面配置(listen)--------------------------listen admin_statsbind 0.0.0.0:8189 # 监控页面监听地址与端口stats enable # 启用监控功能mode http # 监控页面使用 HTTP 协议log global # 继承日志配置stats uri /haproxy_stats # 监控页面访问路径(如 http://IP:8189/haproxy_stats)stats realm Haproxy\ Statistics # 监控页面登录提示stats auth admin:admin # 监控页面账号密码(格式:用户名:密码)stats admin if TRUE # 允许手动启用/禁用后端服务器stats refresh 30s # 监控页面自动刷新时间(30秒)# -------------------------- Web 集群配置(listen)--------------------------listen webclusterbind 0.0.0.0:80 # 前端监听端口(HTTP 默认 80)mode http # 七层代理模式log global # 继承日志配置maxconn 3000 # 该集群最大并发连接数balance roundrobin # 轮询算法cookie SESSION_COOKIE insert indirect nocache # 会话保持(基于 Cookie)server rs1 192.168.100.20:80 check # 后端服务器 1(check:启用健康检查)server rs2 192.168.100.30:80 check # 后端服务器 2
2. 核心配置说明
  • global:全局参数,影响 HAProxy 整体运行(如日志、用户、进程模式)。
  • defaults:默认参数,所有 listen/frontend/backend 段若未单独配置,将继承此处参数。
  • listen:frontend(前端请求接收)与 backend(后端集群)的组合,适用于简单场景(如监控页面、Web 集群)。
  • frontend/backend(扩展):复杂场景下拆分前端与后端(如多前端端口对应不同后端集群),HAProxy 1.3 后支持。

(五)HAProxy 服务管理

1. 创建 Systemd 服务单元

为 HAProxy 创建系统服务文件,支持 systemctl 管理:

vim /usr/lib/systemd/system/haproxy.service

写入以下内容:

[Unit]Description=HAProxy Load Balancer # 服务描述After=syslog.target network.target # 依赖服务(日志、网络启动后再启动)[Service]# 启动前检查配置文件合法性ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q# 启动命令(-Ws:支持 Systemd 管理;-p:指定 PID 文件)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 # 多用户模式下启动
2. 服务操作命令
# 重新加载 Systemd 配置systemctl daemon-reload# 启动 HAProxysystemctl start haproxy# 设置开机自启systemctl enable haproxy# 查看服务状态systemctl status haproxy# 重载配置(修改 cfg 后无需重启)systemctl reload haproxy

(六)HAProxy 日志配置

HAProxy 自身不存储日志,需配合系统日志服务(如 rsyslog)实现日志收集。

1. 配置 rsyslog
vim /etc/rsyslog.conf
  • 取消以下两行注释(启用 UDP 监听,接收 HAProxy 日志):
$ModLoad imudp$UDPServerRun 514
  • 添加 HAProxy 日志存储路径:
local0.* /var/log/haproxy.log # local0 设施的日志写入该文件
2. 重启 rsyslog 服务
systemctl restart rsyslogsystemctl enable rsyslog
3. 验证日志

访问 HAProxy 代理的服务后,查看日志文件:

tail -f /var/log/haproxy.log

二、Tomcat 应用服务器

(一)Tomcat 概述

Tomcat 是一款免费开源的 Java Servlet 容器,属于轻量级 Web 应用服务器,核心特点如下:

  • 功能定位:运行 Java Web 应用(如 JSP、Servlet),是开发与调试 Java Web 程序的首选工具。
  • 运行依赖:需基于 JDK(Java Development Kit)或 JRE(Java Runtime Environment)环境。
  • 中间件对比
    • 小型项目 / 个人开发:Tomcat(轻量、易用)。
    • Linux 环境 / 轻量需求:Jetty(比 Tomcat 更轻量)。
    • 大型商业项目:JBoss、WebLogic、WebSphere(支持集群、高可用,收费)。

(二)Tomcat 部署步骤

1. 环境准备
  • 关闭防火墙与 SELinux(同 HAProxy 环境准备步骤)。
  • 安装 JDK(Tomcat 运行依赖):
yum -y install java-11-openjdk # 安装 OpenJDK 11(推荐版本)java -version # 验证安装(显示类似 "openjdk version 11.0.20" 即成功)
2. 解压与安装 Tomcat
  • 下载 Tomcat 压缩包:访问 Tomcat 官网,下载对应版本(如 apache-tomcat-10.0.23.tar.gz)。
  • 解压至指定目录并创建软链接(方便后续操作):
# 解压至 /usr/local/tar -xzvf apache-tomcat-10.0.23.tar.gz -C /usr/local/# 进入 /usr/local/ 目录cd /usr/local/# 创建软链接(简化路径,后续可通过 /usr/local/tomcat 访问)ln -s apache-tomcat-10.0.23/ tomcat
3. 自定义测试页面

Tomcat 默认网页路径为 /usr/local/tomcat/webapps/ROOT/,可创建自定义 JSP 页面验证功能:

# 创建测试页面目录mkdir /usr/local/tomcat/webapps/test# 创建 JSP 测试页面vim /usr/local/tomcat/webapps/test/index.jsp

写入以下内容(简单输出 “Hello World”):

<html><head><title>Tomcat Test Page</title></head><body><%out.println("Hello World from Tomcat!"); // Java 代码片段%></body></html>

(三)Tomcat 服务管理

1. 启动与停止 Tomcat
# 进入 Tomcat 二进制文件目录cd /usr/local/tomcat/bin# 启动 Tomcat(脚本为 startup.sh)./startup.sh# 停止 Tomcat(脚本为 shutdown.sh 或 catalina.sh)./shutdown.sh# 或./catalina.sh stop
2. 验证服务状态
  • 查看 Tomcat 默认端口(8080)是否启用:
ss -tuln | grep 8080 # 显示 "LISTEN 0 100 :::8080 :::*" 即成功
  • 网页验证:
    • 访问 Tomcat 首页:http://服务器IP:8080(如 http://192.168.100.10:8080)。

    • 访问自定义测试页:http://服务器IP:8080/test/(显示 “Hello World from Tomcat!” 即成功)。

(四)Tomcat 管理页面配置

Tomcat 首页包含 Server Status(服务状态)Manager App(应用管理)Host Manager(主机管理) 三个功能入口,默认点击会报 403 错误,需配置权限与访问控制。

1. 配置 Host Manager 页面(主机管理)
(1)添加用户角色与账号

编辑 Tomcat 用户配置文件:

vim /usr/local/tomcat/conf/tomcat-users.xml

在 <tomcat-users> 标签内添加以下内容(配置 admin-gui 角色与账号):

<role rolename="admin-gui"/> <!-- Host Manager 所需角色 --><user username="tomcat" password="123456" roles="admin-gui"/> 
<!-- 账号:tomcat,密码:123456 -->
(2)允许指定网段访问

编辑 Host Manager 上下文配置文件:

vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml

修改 allow 属性,允许 192.168.100.0/24 网段访问(示例):

<Context antiResourceLocking="false" privileged="true"><Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="192\.168\.100\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> <!-- 允许的 IP 段 --></Context>
(3)重启 Tomcat
/usr/local/tomcat/bin/catalina.sh stop/usr/local/tomcat/bin/catalina.sh start
(4)验证访问

访问 http://服务器IP:8080,点击 Host Manager,输入账号 tomcat、密码 123456,即可正常进入。

2. 配置 Server Status 与 Manager App 页面
(1)添加 Manager 角色

编辑 tomcat-users.xml,添加 manager-gui 角色(Server Status 与 Manager App 所需):

vim /usr/local/tomcat/conf/tomcat-users.xml

修改为以下内容:

<role rolename="admin-gui"/><role rolename="manager-gui"/> <!-- Server Status/Manager App 所需角色 --><user username="tomcat" password="123456" roles="admin-gui,manager-gui"/> 
<!-- 同时拥有两个角色 -->
(2)允许指定网段访问 Manager App

编辑 Manager App 上下文配置文件:

vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

同样修改 allow 属性,允许 192.168.100.0/24 网段访问(与 Host Manager 配置逻辑一致):

<Context antiResourceLocking="false" privileged="true"><Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="192\.168\.100\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /></Context>
(3)重启 Tomcat 生效
/usr/local/tomcat/bin/catalina.sh stop/usr/local/tomcat/bin/catalina.sh start
(4)验证访问
  • 访问 http://服务器IP:8080,点击 Server Status:可查看 Tomcat 服务状态(如 JVM 内存使用、线程数、连接器状态等)。

  • 点击 Manager App:可管理 Web 应用(如部署 / 卸载 WAR 包、启动 / 停止应用、查看应用状态等)。

三、总结

  1. HAProxy:核心用于负载均衡与高可用,支持四层(TCP)与七层(HTTP)代理,通过配置文件定义前端监听、后端集群与健康检查,配合 rsyslog 实现日志收集,适合高并发场景。
  2. Tomcat:轻量级 Java Web 容器,依赖 JDK 环境运行,通过 tomcat-users.xml 与上下文配置文件开放管理页面,支持 WAR 包自动部署,是中小型 Java Web 应用的首选。
  3. 联动场景:HAProxy 作为前端入口,后端挂载多台 Tomcat 形成集群,可有效分散请求压力,避免单点故障,提升应用的可用性与并发处理能力。
http://www.dtcms.com/a/399117.html

相关文章:

  • Tomcat 配置与使用指南
  • 金融数据库--下载全市场可转债日线行情数据
  • 新能源知识库(105)什么是 日本JEMS平台
  • 怎么学做电商然后自己创业seo优化关键词排名
  • 360免费建站怎么进不去网站开发合同模板免费
  • 51单片机实践之数码管电子时钟/时间显示及其设置
  • 条款9:优先选用别名声明,而非typedef
  • Matlab调用GPT-5 API示例
  • 猪八戒网站做软件让你有做黑客感觉的网站
  • 毕业设计指导网站建设揭阳网站推广教程
  • 安全多方计算 联邦学习 同态加密
  • 宁波新亚建设内部网站wordpress开发文档下载
  • GWO-Transformer灰狼算法优化编码器多特征分类预测/故障诊断,Matlab实现,代码解析+运行效果一览
  • 2025 化工 PLM 市场图鉴:软件厂商技术布局与行业应用,助力企业数字化转型
  • 竞品网站分析微信网站需要备案吗
  • 大模型-LLM-large language model
  • 探索生成式纠错在构音障碍语音识别中的应用
  • SCARA 机器人轨迹运动奇异点规避方法
  • 【Linux】自动化构建--make/Makefile
  • 建设银行手机网站wordpress电台
  • 同一种激光模式 高阶模式的产生会降低基模的功率吗 能降低多少?
  • 设计模式-责任链模式详解
  • CentOS7安装mysql最简单教程
  • 垂直网站建设方案南庄建网站服务
  • 【LVS入门宝典】LVS DR模式深度解析:直接路由(DR)的高性能秘诀,MAC地址欺骗与ARP隔离
  • 自做网站视频潍坊免费网站制作
  • 代理通讯篇无外网或不可达SockS全协议规则配置C2正反向上线解决方案
  • 做网站麻烦吗网页创意与设计50例
  • 建筑公司网站需求h5个人网站代码
  • Qwen-image-edit在ComfyUI部署使用