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

七层负载均衡 HAproxy

一、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

globallog 127.0.0.1 local3 infomaxconn 4096user beangroup beandaemonnbproc 1pidfile /run/haproxy.piddefaultslog globalmode httpmaxconn 2048retries 3option redispatchtimeout connect 5000timeout client 50000timeout server 50000option abortonclosestats uri /admin?statsstats realm Private landsstats auth admin:123stats hide-versionfrontend http-inbind 0.0.0.0:80mode httplog globaloption httplogoption httpcloseacl html url_reg -i \.html$use_backend html-server if htmldefault_backend html-serverbackend html-servermode httpbalance roundrobinoption httpchk GET /index.htmlcookie SERVERID insert indirect nocacheserver html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5server 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.lryc.cn/news/210257.html

相关文章:

  • SQL SELECT TOP, LIMIT, ROWNUM
  • vue3-admin-element框架登录如何修改?
  • 基于mysql的请假系统,java/springboot/jsp/javaweb/tomcat
  • 【Python机器学习】零基础掌握partial_dependence检验、检查
  • 前端Vue页面中如何展示本地图片
  • 基于PHP的图像分享社交平台
  • 【算法|动态规划No.31 | 01背包问题】01背包模板题
  • Azure - 机器学习:使用 Apache Spark 进行交互式数据整理
  • 4.5 final修饰符
  • Clickhouse数据库部署、Python3压测实践
  • 探索控制领域:从电视遥控器到自动驾驶【基础概念理解、应用实例】
  • 在R中安装CmdStanR的步骤-R4.3.1-CmdStanR-0.6.1.900
  • 安信可小安派AiPi 代码下载
  • 程序化交易(二)level2行情数据源接入
  • 4.6 static修饰符
  • C++头文件定义变量
  • [蓝桥杯-610]分数
  • Vue指令大全:深入探索Vue提供的强大指令功能
  • x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论
  • shell_56.Linux永久重定向
  • CN考研真题知识点二轮归纳(1)
  • hadoop使用简介
  • WebSocketClient objects are not reuseable
  • 分享54个ASP.NET源码总有一个是你想要的
  • 闭包通俗解释,Demo(Go Java Python)
  • Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)
  • 【PWN · heap | Off-By-One】Asis CTF 2016 b00ks
  • C++STL---Vector、List所要掌握的基本知识
  • 使用FastAPI部署Ultralytics YOLOv5模型
  • A. Doremy‘s Paint 3