七层负载均衡 HAproxy

news2024/12/23 11:39:28

一、HAproxy

1、负载均衡类型:

(1) 无负载均衡:

没有负载均衡,用户直接连接到 Web 服务器。当许多用户同时访问服务器时,可能无法连接。

(2) 四层负载均衡:

用户访问负载均衡器,负载均衡器将用户的请求平衡转发给后端服务器。

(3) 七层负载均衡:

7层负载均衡是更复杂的负载均衡方法,使用第7层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。

2、HAproxy 亲缘性:

在 HAProxy 中,会话亲缘性是一种负载均衡策略,它确保来自同一客户端的请求总是被路由到同一后端服务器,维护会话状态的一致。

保持会话亲缘性的方式:

● 用户 ip 识别:

HAproxy 将客户端的IP地址计算出一个哈希值,然后根据哈希值选择一个后端服务器。

● cookie 识别:

在客户端的第一个请求中,HAproxy 可以在响应中添加一个特定的 Cookie,并在后续请求中使用该 Cookie 来识别客户端会话。

● session 识别:

在 HAproxy 中,可以将后端服务器生成的会话状态和后端服务器标识存储在HAProxy的表格(stick-table)中,在客户端请求时可以查询该表格,以维护会话亲缘性。

3、示例:

(1) 环境:

HAproxy:192.168.198.131

web1:192.168.198.132

web2:192.168.198.133

域名解析:vim /etc/hosts

(2) web 配置:

yum install -y httpd

echo web111 > /var/www/html/index.html

echo web222 > /var/www/html/index.html

(3) 配置 haproxy

yum install -y epel-release

yum install -y haproxy

vim /etc/haproxy/haproxy.cfg

global
  log 127.0.0.1 local3 info
  maxconn 4096
  user bean
  group bean
  daemon
  nbproc 1
  pidfile /run/haproxy.pid

defaults
  log global
  mode http
  maxconn 2048
  retries 3
  option redispatch
  timeout connect 5000
  timeout client 50000
  timeout server 50000
  option abortonclose

  stats uri /admin?stats
  stats realm Private lands
  stats auth admin:123
  stats hide-version


frontend http-in
  bind 0.0.0.0:80
  mode http
  log global
  option httplog
  option httpclose
  acl html url_reg -i \.html$
  use_backend html-server if html
  default_backend html-server

backend html-server
  mode http
  balance roundrobin
  option httpchk GET /index.html
  cookie SERVERID insert indirect nocache
  server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
  server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

global: 设置全局配置参数,通常与操作系统相关:

● log 127.0.0.1 local3 info:配置日志记录的指令;

● maxconn 4096: 每个后端服务器的最大连接数(优先级较低);

● daemon: haproxy以守护进程的方式运行,确保haproxy在后台持续运行;

● nbproc 1 ;pidfile /run/haproxy.pid :haproxy 进程数和进程 id 存储位置;

defaults:配置默认参数,这些参数可以被用到 frontend,backend,Listen 组件中。

● log global:日志配置按全局配置中进行;

● mode http :haproxy 工作模式,七层 http,四层 tcp;

● maxconn 2048:最大连接数(优先级比 global 高)

● retries 3:haproxy 尝试连接后端服务器的重试次数,3次连接失败就认为服务不可用,用户请求将不会被发往此后端服务器;

● option redispatch:当 haproxy 在连接到后端服务器失败时,请求将分配给其他可用的后端服务器;

● timeout connect 5000 ;timeout client 50000 ;timeout server 50000

timeout connect:重传计时器,haproxy将客户端请求转发给后端服务器,所等待的超时时长,若超时则再次进行转发;

timeout client:haproxy 作为客户端和后端服务器之间空闲连接的超时时间;

timeout server:haproxy 作为服务端和用户之间空闲连接的超时时间;

● option abortonclose:当服务器负载过高时,haproxy 会结束挂起的请求,释放资源提高性能;

● stats uri /admin?stats

设置统计页面的URI路径,在URL中输入"/admin?stats"时,就可以进入haproxy 的统计页面;

● stats realm Private lands ;stats auth admin:123

统计页面认证时的提示内容 ;设置用户名和密码;

● stats hide-version:隐藏了haproxy的版本信息,以提高安全性;

frontend http-in: 前端部分开始配置。

● bind 0.0.0.0:80: 前端监听器的绑定地址和端口,haproxy 监听所有可用的网络接口(0.0.0.0)上的80端口;

● option httplog:这个选项开启了HTTP请求的详细日志记录;

● option httpclose:haproxy 在每个HTTP事务结束后关闭与客户端的连接;

● acl html url_reg -i \.html$ ;use_backend html-server if html

创建了一个名为 html 的ACL,使用正则表达式 -i \.html$ 来匹配以 ".html" 结尾的URL,若匹配中ACL,则使用名为 html-server 的后端服务器来处理请求;

● default_backend html-server

如果请求不匹配任何ACL条件,则 html-server 后端服务器来处理这些请求。

backend html-server:后端服务集群的配置。

● balance roundrobin:使用的负载均衡算法为 roundrobin (rr);

● option httpchk GET /index.html

定义了健康检查的方式,haproxy 使用HTTP GET 请求来检查后端服务器的健康状态。请求 "/index.html" 页面,如果后端服务器返回预期的响应,它将被标记为up,否则将被标记为down;

● cookie SERVERID insert indirect nocache

将用户访问所到达的后端服务器的 id 插入到 cookie 中,保持用户与服务器的会话;

● server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5

后端服务器的名称,地址和端口;weight 1:权重为1;cookie 3:cookie SERVERID;

check inter 2000 rise 2 fall 5:每2秒进行一次健康检查,rise 2 表示连续2次成功的健康检查标记服务器为 up ;fall 5 表示连续5次失败的健康检查标记服务器为 down。

(4) 测试结果:

systemctl start haproxy

客户机测试:

登录 haproxy 统计页面:

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

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

相关文章

时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIMA-LSTM差…

关于数据中台的理解和思考

一、什么是数据中台 数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。把数据统一后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效的、可复用的服…

项目管理软件排行榜聚焦榜:选择最适合你的工具

在一个复杂的项目中,需要有一个好的项目管理软件来帮助协调资源、任务和时间表。然而,市场上有很多种不同的项目管理软件,每种软件都有其优点和缺点。本文综合 PCMag,Softwareworld,B2BSaaS Reviews 等产品测评网站的评…

windows下-mysql环境配置,以及使用navicat可视化数据库,便捷撰写sql语句。

文章目录 MySQL 连接到本地MySQL 下载MySQL连接基本SQL操作语句创建并查看数据库删除数据库修改数据库插入、删除、修改数据 图形化界面展示数据库 Navicat 基础操作连接本地的mysql数据库撰写sql语句 MySQL 连接到本地 MySQL 下载 直接系统自带应用商城下载,安装最…

【多线程面试题 一】、 创建线程有哪几种方式?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:创建线程有哪几种方式&a…

Vuex模块化(modules)与namespaced(命名空间)的搭配

Vuex模块化(modules)与namespaced(命名空间)的搭配 Vuex模块化(modules)格式 原理:可以对Vuex的actions,mutations,state,getters四个属性综合成一个部分&a…

Android问题笔记四十一:JNI NewStringUTF错误的几种解决方案

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

B站视频下载工具的分享

直接解压使用1.5.9版本的就可以。 资源:链接:https://pan.baidu.com/s/1zWJWzxVss4h2lmMhCFFzDg?pwdw1v8 提取码:w1v8 先解压 解压 双击使用

小白的福利教学。4+共病+WGCNA+机器学习+实验,简单易复现

今天给同学们分享一篇共病WGCNA机器学习实验的生信文章“Exploring immune related gene signatures and mechanisms linking non alcoholic fatty liver disease to atrial fibrillation through transcriptome data analysis”,这篇文章于2023年10月16日发表在Sci…

c++学习MFC还是QT?

c学习MFC还是QT? 建议学习Qt, Qt开发不仅跨平台,而且社区活跃度和网上的资料也比较多一点,特别是跨平台这一点很重要,最近很多小伙伴找我,说想要一些QT资料,然后我根据自己从业十年经验,熬夜搞了…

Proteus仿真--基于51单片机的LED模拟交通灯仿真(仿真文件+程序)

本文主要介绍基于51单片机的LED模拟交通灯仿真(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--基于51单片机的LED模拟交通灯仿真(仿真文件程序) 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu.c…

软件测试必问的面试题(答案+文档)

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

视频剪辑高手必学:批量制作画中画效果的秘诀

随着社交媒体的兴起,视频制作越来越受到人们的关注。在视频制作中,画中画效果是一种常见的技术,它能够让多个画面同时出现在屏幕上,增强视频的视觉效果。然而,对于许多初学者来说,制作画中画效果可能是一项…

python会计应用实操-企业收入与发票比对

案例:企业收入与开票 公司月底或一个季度盘点一下,收入账款与开票数额是否匹配。 使用工具:jupter lab和python 数据: 上海电子税务局已开票统计excel表 银行流水单excel表 编程思路: 两个excel对比金额&#x…

4.OsgEarth加载Mbtiles

愿你出走半生,归来仍是少年&#xff01; 1.Mbtiles mbtiles是在GIS开发中最常用的瓦片包格式&#xff0c;在移动端、桌面端都是常用的格式。 2.代码 通过OsgEarth的MBTilesImageLayer图层进行加载&#xff0c;也是封装成了一个静态的方法方便调用。 /// <summary&g…

【ROS入门】机器人导航(仿真)——导航模块概述

文章结构 导航模块简介全局地图自身定位路径规划运动控制环境感知 导航之坐标系坐标系变换 导航模块简介 在ROS中机器人导航(Navigation)由多个功能包组合实现&#xff0c;ROS 中又称之为导航功能包集&#xff0c;关于导航模块&#xff0c;官方介绍如下: 一个二维导航堆栈&…

拥有DOM力量的你究竟可以干什么

如果你希望访问 HTML 页面中的任何元素&#xff0c;那么您总是从访问 document 对象开始&#xff01; 查找HTML元素 document.getElementById(id) 通过元素 id 来查找元素 <!DOCTYPE html> <html> <head><meta charset…

OSPF 的10种网络类型和5种区域类型

10种网络类型&#xff0c;也有称7类的&#xff0c;因为8、9、10类是V3专有的&#xff0c;如下&#xff1a; LSA 类型描述传播范围使用与目的Type 1路由器LSA (Router LSA)区域 (Area)描述路由器连接的直连网络和链路信息&#xff0c;用于建立拓扑图和计算最短路径。Type 2网络…

Nginx性能优化

简介 nginx作为常用的web代理服务器&#xff0c;某些场景下对于性能要求还是蛮高的&#xff0c;所以本片文章会基于操作系统调度以及网络通信两个角度来讨论一下Nginx性能的优化思路。 基于操作系统调度进行Nginx优化 CPU工作方式 对于用户进程&#xff0c;CPU会按照下面的…

10个简单好用的Python装饰器

_装饰器&#xff08;Decorators&#xff09;_是Python中一种强大而灵活的功能&#xff0c;用于修改或增强函数或类的行为。装饰器本质上是一个函数&#xff0c;它接受另一个函数或类作为参数&#xff0c;并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外…