七层负载均衡 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

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 统计页面:

相关推荐
阿雄不会写代码5 分钟前
ubuntu安装nginx
linux·服务器·网络
chinayu200712 分钟前
虚拟机桥接模式
linux·运维·桥接模式
1LOVESJohnny16 分钟前
Linux | scp指令基于WSL在Windows/Ubuntu系统间传输文件
linux·ubuntu·wsl·文件传输
vvw&38 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
大哥_ZH42 分钟前
Linux umami在国产麒麟系统安装网站统计工具(只能上国内网站的系统)
linux·服务器
o(╥﹏╥)1 小时前
在 Ubuntu 上安装 VS Code
linux·运维·vscode·ubuntu·vs
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器1 小时前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye2 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_433618442 小时前
shell 编程(三)
linux·运维·服务器