haproxy服务介绍

news2024/9/22 1:34:07

haproxy

    • 搭建使用
      • 开启HAProxy的界面UI
      • 配置负载均衡
      • 配置web代理

HAProxy(High Availability Proxy)是一个高性能的TCP/HTTP负载均衡器和代理服务器,广泛用于提升Web应用的可用性和性能。[官网说明](https://docs.haproxy.org/2.8/intro.html#3.2)

功能和特点:

  • 负载均衡:

    • 支持多种负载均衡算法,例如轮询(Round Robin)、最少连接(Least Connections)、源地址散列(Source IP Hashing)等。
    • 支持会话保持(Session Persistence),可以根据用户的会话信息将请求分配给同一个服务器。
  • 高可用性:

    • 支持健康检查(Health Checks),定期检测后端服务器的状态,自动将故障服务器从负载均衡池中移除。
    • 支持主备模式(Active-Backup),可以在主服务器故障时自动切换到备用服务器。
  • 性能优化:

    • 高效的资源管理和事件处理机制,能够处理大量并发连接。
    • 支持连接池和连接复用,减少连接建立和关闭的开销。
  • 安全性:

    • 提供SSL/TLS终止和加速功能,减少后端服务器的加密负担。
    • 支持访问控制列表(ACL)和自定义的安全策略,保护应用免受恶意攻击。
  • 灵活的配置:

    • 配置文件简单且强大,支持复杂的路由和流量管理规则。
    • 支持热加载配置,允许在不中断服务的情况下修改配置。
  • 监控和统计:

    • 提供详细的监控和统计信息,帮助管理员了解服务器的负载情况和运行状态。
    • 支持多种日志格式和集成外部监控工具。

HAProxy 的工作原理

  • HAProxy 是一个事件驱动的非阻塞引擎,结合了非常快速的 I/O 层使用基于优先级的多线程调度程序。由于它设计有数据考虑到转发目标,其架构经过优化,可以尽可能快地移动数据尽可能少的操作。它专注于优化 CPU通过尽可能长时间地保持与同一个 CPU 的连接来提高缓存的效率。因此,它实现了分层模型,在每个级别都提供了旁路机制确保数据不会在需要时到达更高层。大部分处理
    在内核中执行,HAProxy 尽力帮助内核执行通过给出一些提示或避免某些操作来尽可能快地工作
    当它猜测它们稍后可能会被分组时。因此,典型的数字显示15% 的处理时间花在 HAProxy 上,而 85% 的处理时间花在内核的 TCP 或HTTP 关闭模式,HAProxy 约占 30%,而 HTTP 模式下内核约占 70%保持活动模式。

搭建使用

实验环境Ubuntu2404

安装下载

apt install -y haproxy
systemctl enable --now haproxy

开启HAProxy的界面UI

cat >> /etc/haproxy/haproxy.cfg << eof
listen stats
    bind *:8080
    stats enable
    stats uri /huhy
    stats refresh 10s
    stats auth admin:123456
    stats admin if TRUE
eof

参数含义

  • bind *:8080:监听8080端口。
  • stats enable:启用统计页面。
  • stats uri /haproxy?stats:访问统计页面的URI(在本例中为http://<你的服务器IP>:8080/haproxy?stats)。
  • stats refresh 10s:每10秒刷新一次页面。
  • stats auth admin:adminpassword:设置访问统计页面的认证信息,用户名为admin,密码为123456。
  • stats admin if TRUE:启用管理功能。
systemctl restart haproxy

界面访问:IP:8080/huhy

在这里插入图片描述

在这里插入图片描述

配置负载均衡

一般用于高可用集群;可参考博文配置openstack高可用集群

vim /etc/haproxy/haproxy.cfg
#可根据服务自定义名称
listen openstack_mariadb_galera_cluster 

  # 绑定HAProxy监听的IP地址和端口
  bind 192.168.200.154:3306

  # 负载均衡算法,基于客户端源IP地址进行负载均衡
  balance source

  # 设置TCP模式,用于处理TCP连接
  mode tcp

  # 启用TCP日志记录
  option tcplog

  # 自定义日志格式
  log-format "%ci:%cp [%t] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %ts %D %ac/%fc/%bc/%sc/%rc %sq/%bq"

  # 设置连接超时为5000毫秒(5秒)
  timeout connect 5000ms

  # 设置客户端连接超时为30000毫秒(30秒)
  timeout client 30000ms

  # 设置服务器连接超时为30000毫秒(30秒)
  timeout server 30000ms

  # 设置连接重试次数为3次
  retries 3

  # 定义后端服务器1,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
  server controller01 192.168.200.155:3306 check inter 2000 rise 2 fall 5 maxconn 100

  # 定义后端服务器2,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
  server controller02 192.168.200.156:3306 check inter 2000 rise 2 fall 5 maxconn 100

  # 定义后端服务器3,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
  server controller03 192.168.200.157:3306 check inter 2000 rise 2 fall 5 maxconn 100

负载均衡的算法有如下;可根据需求修改

  • balance roundrobin:轮询算法,将请求依次分配给后端服务器。

  • balance leastconn:最少连接数算法,将请求分配给当前连接数最少的服务器。

  • balance source:源地址散列算法,根据客户端的源 IP 地址进行负载均衡,确保同一客户端的请求总是分配到同一台服务器。

  • balance uri:URI 散列算法,根据请求的 URI 进行负载均衡,确保相同 URI 的请求总是分配到同一台服务器。

  • balance uri len:URI 长度散列算法,根据请求 URI 的长度进行负载均衡。

  • balance uri depth:URI 深度散列算法,根据请求 URI 的目录深度进行负载均衡。

  • balance url_param:URL 参数散列算法,根据指定的 URL 参数进行负载均衡。

  • balance rdp-cookie:RDP Cookie 散列算法,根据 RDP Cookie 进行负载均衡。

HAProxy 模式;得根据服务实际情况选择

  • mode tcp:传输层模式,用于处理 TCP 连接。这是用于数据库、SMTP 等应用程序的最常见模式。
  • mode http:应用层模式,用于处理 HTTP/HTTPS 流量。这允许使用 HTTP 特定的功能,如 URL 重写、负载均衡基于 HTTP 头或 Cookie 等。
  • mode health:健康检查模式,用于为后端服务器执行健康检查。此模式通常用于专用健康检查实例,而不实际处理客户端流量。

配置web代理

官网文档

配置了 HAProxy 作为前端代理服务器后,客户端只需要访问 HAProxy 的监听地址,而不需要直接访问真实的后端 Web 服务器。具体来说,客户端的请求将如下处理:

  • 客户端发起 HTTPS 请求,目标地址是 HAProxy 的监听地址
  • HAProxy 接收到请求后,根据配置的负载均衡算法(例如轮询 roundrobin)将请求转发给后端服务器之一(例如 192.168.1.101 或 192.168.1.102)。
  • 后端服务器处理请求并返回响应给 HAProxy。
  • HAProxy 再将响应转发回客户端。

http代理

vim /etc/haproxy/haproxy.cfg
frontend http_front
  # 绑定 HAProxy 在所有 IP 地址的 80 端口上监听 HTTP 请求
  bind *:80
  
  # 设置 HTTP 模式
  mode http
  
  # 使用 HTTP 日志格式记录日志
  option httplog
  
  # 默认后端服务器组
  default_backend http_back

backend http_back
  # 设置 HTTP 模式
  mode http
  
  # 负载均衡算法,轮询分配请求
  balance roundrobin
  
  # 定义后端服务器,
  # inter 2000:每隔 2000 毫秒进行一次健康检查。
  # rise 2:连续 2 次健康检查成功,认为服务器正常。
  # fall 3:连续 3 次健康检查失败,认为服务器不可用。
  server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3
  server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3

示例:通过haproxy配置代理openstack节点

主机IP
haproxy代理192.168.200.190
openstack192.168.200.195
vim /etc/haproxy/haproxy.cfg
frontend openstack_http_front
  bind 192.168.200.190:80
  mode http
  option httplog
  default_backend http_back

backend http_back
  mode http
  balance roundrobin
  server controller 192.168.200.195:80/horizon check inter 2000 rise 2 fall 3
systemctl restart haproxy

访问haproxy节点IP

在这里插入图片描述

haproxy节点状态

在这里插入图片描述

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

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

相关文章

羊大师:户外狂欢羊奶滋养,年轻人的活力养生新潮流

在这个快节奏的时代&#xff0c;年轻人正以他们独有的方式&#xff0c;重新定义着健康与养生的概念。他们深知&#xff0c;气血不足不应是青春的代名词&#xff0c;而应是活力四射的前奏。于是&#xff0c;一群年轻人以“发癫式”打卡的创意方式&#xff0c;将户外活动的乐趣推…

[保姆级教程]uniapp安装使用uViewUI教程

文章目录 创建 UniApp 项目下载uView UI下载安装方式步骤 1: 安装 uView UI步骤 2: 查看uView UI是否下载成功步骤 3: 引入 uView 主 JS 库步骤 4: 引入 uView 的全局 SCSS 主题文件步骤 5: 引入 uView 基础样式步骤 6: 配置 easycom 组件模式注意事项 NPM方式步骤 1: 安装 uVi…

跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py

Megatron-LM默认支持GPT、T5、BERT等多个常见模型的预训练&#xff0c;当下大模型流行&#xff0c;故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口&#xff0c;它通过命令行形式被调用&#xff0c;其精确执行路径位于M…

n7.Nginx 第三方模块

Nginx 第三方模块 第三模块是对nginx 的功能扩展&#xff0c;第三方模块需要在编译安装Nginx 的时候使用参数–add-modulePATH指定路径添加&#xff0c;有的模块是由公司的开发人员针对业务需求定制开发的&#xff0c;有的模块是开 源爱好者开发好之后上传到github进行开源的模…

初学Linux之常见指令(上)

初学Linux之常见指令&#xff08;上&#xff09; 文章目录 初学Linux之常见指令&#xff08;上&#xff09;1. Linux下的小技巧热键man 指令 2. ls 指令3. pwd 指令4. cd 指令5. tree 指令6. touch 指令7. mkdir 指令8. rmdir 和 rm 指令9. cp 指令10. mv 指令 1. Linux下的小技…

微信小程序:vant-weapp 组件库、css 变量

vant-weapp 组件库 前往 vant-weapp 官网 npm 使用限制&#xff1a;不支持依赖于 Node.js 内置库、浏览器内置对象、C 插件 的包。 安装 vant-weapp # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i…

Hadoop3:MR程序处理小文件的优化办法(uber模式)

一、解决方案 1、在数据采集的时候&#xff0c;就将小文件或小批数据合成大文件再上传HDFS&#xff08;数据源头&#xff09; 2、Hadoop Archive&#xff08;存储方向&#xff09; 是一个高效的将小文件放入HDFS块中的文件存档工具&#xff0c;能够将多个小文件打包成一个HAR…

Git --- Branch Diverged

Git --- Branch Diverged Branch Diverged是如何形成的如何解决RebaseMerge Branch Diverged是如何形成的 尝试提交并将更改推送到 master 分支时&#xff0c;是否看到这条烦人的消息 原因是&#xff1a; 直到更改 B 之前&#xff0c;我的分支和“origin/master”完全相同。从…

通过HTML/CSS 实现各类进度条的功能。

需求&#xff1a;我们在开发中会遇到使用各式各样的进度条&#xff0c;因为当前插件里面进度条各式各样的&#xff0c;为了方便我们定制化的开发和方便修改样式&#xff0c;我们这里使用HTML和CSS样式来进行开发进度条功能。 通过本文学习我们会明白如何使用 HTML/CSS 创建各种…

Docker_一刀流_好用、好玩还方便_(持续更新)

Docker 简介一、镜像和容器的概念镜像&#xff08;Image&#xff09;容器&#xff08;Container&#xff09;镜像和容器的关系 宿主机二、Dockerfile2.1 什么是Dockerfile2.2 Dockerfile中的常见指令2.3Dockerfile实例2.4 详细扩展 三、镜像3.1 镜像的创建3.2对于镜像的一些常用…

开放原子校源行 | 湖南大学师生一行赴麒麟信安开展专业见习活动

“开放原子校源行”是开放原子开源基金会作为国家级开源公益平台发起的长期性开源教育推广公益项目。项目拟通过资助高校设立开源社团、推广开源课程、设置开源助学金、引导开源实践等方式培育开源人才&#xff0c;加快将开源文化、理念和技术融入校园&#xff0c;引导广大师生…

TCP/IP四层模型、OSI七层模型

OSI定义了网络互连的七层框架&#xff08;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层&#xff09;TCP/IP 四层模型是目前被广泛采用的一种模型&#xff0c;由以下 4 层组成&#xff1a;应用层、传输层、网络层、网络接口层 FTP&#xff08;File Transfer Pro…

Thinkphp开发文档二次整理版

基础部分 安装 环境要求 ​ *php>7.1.0 命令下载 通过Composer进行下载&#xff0c;操作步骤下载软件 phpstudy --->点击软件管理 --->安装Composer --->再点击网站 --->点击管理 --->点击Composer --->复制如下命令代码&#xff1a; ​ 稳定版&…

数据采集卡替代传统仪表的输出功能优势分析

在现代工业控制和科学研究中&#xff0c;数据采集卡和传统仪表在信号输出功能上各有其独特的优势。本期视频将对它们在这一方面的特点进行详细对比分析。 1. 多通道和多种信号输出支持 传统仪表&#xff1a;信号输出较为有限&#xff0c;通常只能提供固定的单一类型信号输出接…

解决 go 引用私有包,安装失败

问题描述 go mod tidy 或者 go run main.go 时&#xff0c;提示失败&#xff0c;例如 no such host&#xff08;设置GOPRIVATE&#xff09;或者 x509: certificate signed by unknown authority 之类的报错&#xff08;设置GOINSECURE&#xff09; 解决 在各种 insteadof 方…

Android 消息发布订阅框架:EventBus

目录 1.是什么 2.如何使用 3.五种线程模型 4.Eventbus2和Eventbus3的区别 一、是什么 EventBus是一款发布/订阅事件总线的框架&#xff0c;使用它可以进行模块间通信、解耦。它可以使用很少的代码&#xff0c;来实现多组件之间的通信&#xff0c;非常的方便。 为什么使用它…

安装caffe-CPU版本并进行训练

目录 前言 0、安装Ubuntu 18.04 版本 输入ls没有反应 ubuntu换源 换源出现的问题 1、安装caffe出现E:Unable to locate package caffe-cpu问题 2、把 code 文件夹下载到 ubuntu 3、在本地使用caffe-CPU&#xff0c;并部署数据标注工具 ATool 问题1 问题2 问题3 命令行…

C语言迷宫

目录 开头程序程序的流程图程序输入与输出的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我要来看我用C语言编译出来的迷宫游戏。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> void printmaze(char s…

计算机网络基础:局域网、广域网及OSI七层模型解析

文章目录 一、局域网和广域网1、局域网&#xff08;LAN - Local Area Network&#xff09;2、广域网&#xff08;WAN - Wide Area Network&#xff09;3、对比局域网和广域网 二、OSI七层模型1、OSI的七层网络结构2、OSI的数据传输方式3、网络与操作系统的关系 一、局域网和广域…