【HAProxy】如何在Ubuntu下配置HAProxy服务器

news2025/1/7 20:00:01

HAProxy 是一款免费、开源且强大的反向代理程序,它为 HTTP 和 TCP 基础的应用提供了高可用性、负载均衡以及代理功能,因此对于管理高流量服务器(或 Web 应用)来说,通过将负载分散到多个节点服务器上,它是一个相当不错的选择。

既然 Nginx 反向代理也有类似的功能,那我来告诉你为啥你可能更想选择 HAProxy。首先,HAProxy 是一个专门的负载均衡器和反向代理程序,在 SSL 卸载性能、详细的运行时统计信息以及更高级的负载均衡特性方面表现得更加出色。

Nginx 反向代理唯一的好处可能是配置起来相对简单一些,这在某些情况下确实省事儿。但是,对于复杂的环境来说,依赖 HAProxy 才是明智之举。

在这篇指南里,我会一步步教你如何在 Ubuntu 24.04 上安装和配置 HAProxy,不过这些步骤同样适用于之前的版本,比如 Ubuntu 23.04、Ubuntu 22.04 等等。

如何在 Ubuntu 上安装和配置 HAProxy

在开始安装和配置 HAProxy 之前,你需要先了解一下云基础设施,以及如何使用 HAProxy 作为负载均衡器。为了演示方便,我设想了一个场景:一位笔记本电脑用户访问了一台安装并配置了 HAProxy 的服务器,该服务器随后将用户的流量转发给最不繁忙的服务器。

HAProxy 的工作原理

在这个场景中,安装了 HAProxy 的服务器应该运行在 Ubuntu 系统之上,至少需要 1 GB 的 RAM、20 GB 的磁盘空间和 2 个 CPU 核心;另外,确保你有该服务器的 root 权限或者至少有 sudo 特权。

准备就绪后,通过 SSH 登录你的服务器,并按照下面的指令来安装和配置 HAProxy。

第一步:更新系统

这一步不是必须的,但它能保证你的软件包列表和已安装的软件包都是最新的。

$ sudo apt update && sudo apt upgrade -y

第二步:安装 HAProxy

由于 HAProxy 很受欢迎,它已经在官方 Ubuntu 软件库中了,你可以用这条命令轻松安装它。

$ sudo apt install haproxy

第三步:验证 HAProxy 安装

要确认 HAProxy 已成功安装,可以通过运行以下命令检查其版本:

$ haproxy -v

检查 HAProxy 版本

第四步:配置 HAProxy

为了配置你的主服务器以实现与其他节点服务器的负载均衡,你需要在 _/etc/haproxy/haproxy.cfg_ 文件中指定前端服务器(主要负责处理请求,也就是你的主服务器)和后端服务器(处理那些请求,即你的节点服务器)的信息。

对于新手来说,我会尽量简化这个过程。首先,用你喜欢的文本编辑器(我喜欢 Nano)打开 HAProxy 配置文件。

$ sudo nano /etc/haproxy/haproxy.cfg

当你打开文件时,你会看到类似下面的配置,这部分可以忽略。

global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations  
ca-base /etc/ssl/certs  
crt-base /etc/ssl/private  

# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate  
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384  
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256  
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets  

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

为了配置 HAProxy 主服务器以管理和重定向过多的流量到两个额外的节点服务器(监听 80 端口),只需在最后一行粘贴以下模板,并确保替换节点服务器的详细信息(红色标记的部分)。

frontend HAProxy_Server
bind *:80
default_backend Apache_Web_Servers

backend Apache_Web_Servers
mode http
balance roundrobin
server server1 192.168.1.102:80 check
server server2 192.168.1.103:80 check

完成之后,你的文件看起来会像这样:

HAProxy 配置文件

保存并关闭文件。

在继续下一步之前,最好检查一下配置文件是否有语法问题。

$ sudo haproxy -c -f /etc/haproxy/haproxy.cfg

检查 HAProxy 配置文件

第五步:重启 HAProxy

现在是时候重启 HAProxy 服务以应用我们在配置文件中所做的更改了,同时我们也会启用 HAProxy 服务,以确保它在系统重启时自动启动。

$ sudo systemctl restart haproxy
$ sudo systemctl enable haproxy

重启和启用 HAProxy 服务

  • 如何在 Ubuntu 上安装 UrBackup [客户端/服务器] 系统

第六步:检查 HAProxy 状态

最后,检查 HAProxy 服务的状态,以确保它正在无故障地运行。

$ systemctl status haproxy

检查 HAProxy 服务状态

第七步:配置防火墙(可选)

Ubuntu 默认预装了 UFW (Uncomplicated Firewall),所以如果你用它来保护网络,记得允许 80 端口以启用每个服务器上的 HAProxy 流量。

$ sudo ufw allow 80
$ sudo ufw status

在服务器上允许 80 端口

搞定!现在你的主服务器已经配置好了 HAProxy,它将会处理所有进来的流量,并根据节点服务器的状态进行分配。

总结

在这篇文章里,你学会了如何在 Ubuntu 上安装和配置 HAProxy 用于负载均衡,但这只是冰山一角——HAProxy 还有更多的高级配置等着你去探索。想要更多指导的话,强烈建议查阅它的 官方文档页面。

如果你有任何问题或疑问,随时可以在评论区留言提问哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何配置【Docker镜像】加速器+【Docker镜像】的使用

一、配置Docker镜像加速器 1. 安装/升级容器引擎客户端​ 推荐安装1.11.2以上版本的容器引擎客户端 2. 配置镜像加速器​ 针对容器引擎客户端版本大于1.11.2的用户 以root用户登录容器引擎所在的虚拟机 修改 "/etc/docker/daemon.json" 文件(如果没有…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案

在使用 GoZero 框架进行项目开发时,gentool 是一个非常方便的工具,它可以根据数据库表结构自动生成 Go 语言结构体和其他相关文件。然而,在使用 gentool 生成结构体时,可能会遇到一个问题:如果多次运行 gentool&#x…

深入Android架构(从线程到AIDL)_11 线程之间的通信架构

目录 5、 线程之间的通信架构 认识Looper与Handler对象 主线程丢信息给自己 子线程丢信息给主线程 替子线程诞生Looper与MQ 5、 线程之间的通信架构 认识Looper与Handler对象 当主线程诞生时,就会去执行一个代码循环(Looper),以便持续监视它的信息…

今日自动化编辑部今日自动化杂志社2024年第19期部分目录

智能控制技术 无人机视觉支持下的输电线路安全距离巡检系统探究 贺凌飞 王骋昊1-2,36 基于虚拟现实技术的安全警示系统设计 黄奇 李光辉 徐奎 许兆辉3-5 火焰自动焊接技术对泄漏率的影响研究 孙天鸽5-7 PLC在闸门自动化控制系统中的应用 黎芳8-9,23 智能控制算法在二次供水系统…

【双层模型】考虑供需双侧的综合能源双层优化模型

目录 主要内容 内容研究 1.模型简介 2 程序释义 部分代码 运行结果 下载链接 主要内容 该程序实现一个综合能源系统的优化调度双层模型,上下层分别采用差分进化算法和规划算法进行求解。模型考虑了多种能源设备,包括燃气轮机、燃气锅炉、风电…

单片机-串转并-74HC595芯片

1、74HC595芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三态输出(即高电平、低电平和高阻抗)。 15 和 1 到 7 脚 QA--QH:并行数据输出 9 脚 QH 非:串行数据输出 10 脚 SCLK 非&#x…

(框架漏洞)

1.Thinkphp 1.Thinkphp5x远程命令执⾏及getshell 搭建靶场环境 vulhub/thinkphp/5-rce docker-compose up -d #启动环境 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami ?s/Index/\think\app/invokefunctio…

[SMARTFORMS] 输出文本变量绑定

在SMARTFORMS表单中的表格接口的"导入"页签处添加导入参数IV_EBELN 参数IV_EBELN为采购凭证编号,并为该参数添加默认值 在SMARTFORMS表单中的全局定义中的"全局数据"页签定义变量 结构ZSPO_HEADER_437、ZSPO_ITEM_437与表类型ZTPO_ITEM_437的定…

【DevOps】Jenkins部署

Jenkins部署 文章目录 Jenkins部署资源列表基础环境一、部署Gilab1.1、安装Gitlab1.2、修改配置文件1.3、加载配置文件1.4、访问Gitlab1.5、修改root登录密码1.6、创建demo测试项目1.7、上传代码1.8、验证上传的代码 二、部署Jenkins所需软件2.1、部署JDK2.2、部署Tomcat2.3、部…

Redis(二)value 的五种常见数据类型简述

目录 一、string(字符串) 1、raw 2、int 3、embstr 二、hash(哈希表) 1、hashtable 2、ziplist 三、list(列表) ​编辑 1、linkedlist 2、ziplist 3、quicklist(redis 3.2后的列表内…

PyQt实战——将pcm文本数据转换成.pcm的二进制文件

系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序入口QMainWindow(三&…

Word2Vec解读

Word2Vec: 一种词向量的训练方法 简单地讲,Word2Vec是建模了一个单词预测的任务,通过这个任务来学习词向量。假设有这样一句话Pineapples are spiked and yellow,现在假设spiked这个单词被删掉了,现在要预测这个位置原本的单词是…

STM32F1学习——编码器接口

一、编码器接口 编码器接口可以接收正交编码器的信号,根据编码器旋转产生的正交信号脉冲,通过硬件自动控制CNT值的自增或自减,从而指出编码器的位置、旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口,他们会占…

什么是网关路由

1.认识网关 网关(Gateway)和路由(Router)是两个相关但不同的概念。 一、网关(Gateway) 定义 网关是一个网络节点,它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”&#xf…

S32K144 UDSdoCAN 升级刷写实现笔记

文章目录 1. 摘要2. 开发环境搭建2.1 开发板2.2 IDE 安装2.3 更新扩展包2.4 烧录仿真测试2.4.1 新建工程2.4.2 导入已有工程2.4.3 编译工程2.4.4 硬件连接2.4.5 Debug2.4.6 添加 .c .h 文件2.5 串口配置2.5.1 时钟2.5.2 GPIO2.5.3 定时器2.5.4 uart 工程2.5.5 烧录验证3. 升级原…

第十八周:Faster R-CNN论文阅读

Faster R-CNN论文阅读 摘要Abstract文章简介1. 引言2. Faster R-CNN 框架2.1 RPN2.2 损失函数2.3 RPN的训练细节 3. Faster R-CNN的训练4. 优缺点分析总结 摘要 本篇博客介绍了 Faster R-CNN,这是一种双阶段的目标检测网络,是对 Fast R-CNN 的改进。为了…

Day28下 - 大模型微调:酒店评论情感分析

一、前置准备 1. 下载 LLaMA Factory https://github.com/hiyouga/LLaMA-Factory.git 搭建过程详见:https://blog.csdn.net/CSBLOG/article/details/144584581 2. 选择 预训练模型 和 prompt指令模型 预训练阶段在实际工作中,一般是用不上的&#xff…

【网络安全 | 漏洞挖掘】JS Review + GraphQL滥用实现管理面板访问

未经许可,不得转载。 正文 在映射目标范围后,我发现了一个用于管理的控制台界面,但没有注册功能。 于是我开始尝试: 1、模糊测试注册端点 -> 失败 2、在请求中将登录替换为注册 -> 再次失败 尝试均未奏效后,我决定冷静下来,重新思考方法并利用技术手段。 我观察…

数据库管理-第278期 开年综艺,第七届中国PG数据库生态大会有感(20250105)

数据库管理278期 20245-01-05 数据库管理-第278期 开年综艺,第七届中国PG数据库生态大会有感(20250105)1 走后门的可观测性2 社区VS商业3 从O来到PG去4 现场集锦5 IF CLUB社区总结 数据库管理-第278期 开年综艺,第七届中国PG数据库…