haproxy服务介绍

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 statsbind *:8080stats enablestats uri /huhystats refresh 10sstats auth admin:123456stats 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次失败认为不可用,限制最大连接数为100server controller01 192.168.200.155:3306 check inter 2000 rise 2 fall 5 maxconn 100# 定义后端服务器2,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100server controller02 192.168.200.156:3306 check inter 2000 rise 2 fall 5 maxconn 100# 定义后端服务器3,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100server 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_backbackend 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 3server 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_frontbind 192.168.200.190:80mode httpoption httplogdefault_backend http_backbackend http_backmode httpbalance roundrobinserver controller 192.168.200.195:80/horizon check inter 2000 rise 2 fall 3
systemctl restart haproxy

访问haproxy节点IP

在这里插入图片描述

haproxy节点状态

在这里插入图片描述

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

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

相关文章

NLP: 词袋模型和TFIDF模型

文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型&#xff1a; 词集模型&#xff1a;单词构成的集合&#xff0c;集合自然每个元素都只有一个&#xff0c;也即词集中的每个单词都只有一个。 词袋模型&#xff1a;在词集的基础上如果一个单词…

autoxjs的安装与配置

AutoxJs 是一个基于 JavaScript 的自动化工具&#xff0c;用于在 Android 平台上创建自动化脚本。它是在原 Auto.js 项目的基础上继续维护和升级而来的。 AutoxJs 的优势主要包括以下几点&#xff1a; 无需 root 权限&#xff1a;可以在没有 root 权限的设备上运行大部分功能&…

JavaWeb系列二十三: web 应用常用功能(文件上传下载)

文件上传下载 基本介绍文件上传基本原理文件上传应用实例文件上传注意事项和细节 文件下载基本原理文件下载应用实例文件下载注意事项 ⬅️ 上一篇: JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal) &#x1f389; 欢迎来到 JavaWeb系列二十三: web 应用常用功能(文件上传…

创建最佳实践创建 XML 站点地图--SEO

您是否正在努力让您的网站被搜索引擎索引&#xff1f;您想提高您网站的搜索引擎知名度吗&#xff1f;如果是&#xff0c;您可能会错过 XML 站点地图的重要性。XML 站点地图在改善您网站的 SEO 方面发挥着至关重要的作用。‍ XML 站点地图是您网站结构的蓝图&#xff0c;可帮助…

YOLOv5项目梳理

1 项目介绍 参考项目&#xff1a;YOLO项目 1.1训练模型 YOLOv5模型 train.py 训练预训练模型 ... ... def parse_opt(knownFalse):# 命令行参数解析器初始化parser argparse.ArgumentParser()# 初始权重路径&#xff0c;默认为 ROOT / yolov5s.pt&#xff0c;用于指定模…

Navicat 17 for Mac 数据库管理软件

Mac分享吧 文章目录 效果一、准备工作二、开始安装1. 双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕。2. 应用程序/启动台显示Navicat图标&#xff0c;表示安装成功。 二、运行测试运行后提示&#xff1a;“Navicat Premium.pp”已损坏&#x…

在qt的c++程序嵌入一个qml窗口

//拖拽一个QQuickWidget c端和qml通信的桥梁 找到qml的main.qml的路径 ui->quickWidget->setSource(QUrl::fromLocalFile("../../../code/main.qml"));// QML 与 Qt Widgets 通信//窗口就成了一个类实例对象pRoot (QObject*)ui->quickWidget->rootObje…

redis面试基础知识

redis的数据类型 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; 五种基本数据类型 Redis 通用命令 通用指令是部分数据类型的&#xff0c;都可以使用的指令&#xff0c;常见的有&#xff1a; KEYS&#xff…

思维(交互题),CF 1990E2 - Catch the Mole(Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 E2 - Catch the Mole(Hard Version) 二、解题报告 1、思路分析 考虑每次误判都会让鼹鼠上升一层&#xff0c;相应的&#xff0c;最外层的一层结点都没用了 由于数据范围为5000&#xff0c;我们随便找个叶子…

Electron案例解析-编写一个简单的electron程序

index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8" /><!-- 内容安全策略--><metahttp-equiv"Content-Security-Policy"content"default-src self; script-src self"/><metahttp-equiv&quo…

C语言-栈和队列

文章目录 &#x1f3af;引言&#x1f453;栈和队列1.栈1.1栈的概念与结构1.2栈的实现 2.队列2.1队列的概念与结构2.2队列的实现 &#x1f947;结语 &#x1f3af;引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在之前的文章中&#xff0c;我们详细介绍了链表及其操作方法。…

8年前端总结和感想(转)~

我是牛奶&#xff0c;本文是我前端工作 8 年的一些总结和感想 主要记录下个人点滴、前端知识点、场景应用、未来的憧憬以及个人规划&#xff0c;供自己以后查漏补缺&#xff0c;也欢迎同道朋友交流学习。 自我介绍 我是一名工作在非知名公司的 8 年前端&#xff0c;双非普通本…

JMeter使用手册

安装 下载地址 https://jmeter.apache.org/download_jmeter.cgi 下载后解压到win的文件夹中 打开JMeter的bin文件夹&#xff0c;双击这个jar就启动了JMeter 启动 出现这样的界面 基本使用 添加变量 这个变量在使用的时候可以被引用 创建线程组 所有的请求都得基于…

Linux:Linux进程概念

目录 前言 1. 冯诺依曼体系结构 2. 操作系统 2.1 什么是操作系统 3. 进程 3.1 基本概念 3.2 描述进程——PCB 3.3 进程和程序的区别 3.4 task_struct-PCB的一种 3.5 task_struct的内容分类 4. 查看进程 4.1 通过系统文件查看进程 4.2 通过ps指令查看进程 4.3 …

lse:一款专为渗透测试和CTF设计的Linux枚举工具

关于linux-smart-enumeration linux-smart-enumeration是一款专为渗透测试和CTF设计的Linux枚举工具&#xff0c;该工具可以帮助广大研究人员收集与本地Linux系统安全相关的信息。 工具特性 该工具从2.0版本开始符合POSIX标准&#xff0c;并且经过了shellcheck和posh测试。它…

前端三大主流框架Vue React Angular有何不同?

前端主流框架&#xff0c;Vue React Angular&#xff0c;大家可能都经常在使用&#xff0c;Vue React&#xff0c;国内用的较多&#xff0c;Angualr相对用的少一点。但是大家有思考过这三大框架的不同吗&#xff1f; 一、项目的选型上 中小型项目&#xff1a;Vue2、React居多…

【数据结构-前缀和】力扣2550.统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内&#xff08;包含 这两个值&#xff09;并且以元音开头和结尾的字符串的数目。 返回一个整数数组&#xff0c;其中…

中文诗歌生成

用transformer在诗歌集上训练出的模型 import os os.environ["KERAS_BACKEND"] "tensorflow" # param ["tensorflow", "jax", "torch"] os.environ[TF_CPP_MIN_LOG_LEVEL] 2 os.environ[HF_ENDPOINT] https://hf-mirro…

IT程序员的黄金机遇

在这个数字化时代&#xff0c;IT程序员不仅是技术革新的推动者&#xff0c;更是全球经济的重要支柱。而对于拥有一技之长的IT人才来说&#xff0c;加拿大正敞开大门&#xff0c;提供一片充满机遇的热土。本文将为你揭示为何加拿大是IT程序员移民的不二之选&#xff0c;并提供实…

SecureCRT (mac or windows)解决中文显示乱码

中文乱码问题的方法主要包括设置SecureCRT的编码为UTF-8以及设置LANG环境变量为zh_CN.UTF-8。‌ 1.设置SecureCRT的编码为UTF-8&#xff1a;‌ 打开SecureCRT&#xff0c;‌进入Options -> Global Options -> Default Session -> Edit Default Settings-> Appear…