Haproxy搭建web集群

目录

一、web集群调度器

[二、Haproxy 的 8 种调度算法:](#二、Haproxy 的 8 种调度算法:)

[三、Haproxy 的会话保持](#三、Haproxy 的会话保持)

四、haproxy的特性

[五、LVS Nginx Haproxy 的区别](#五、LVS Nginx Haproxy 的区别)

实例:

[Nginx、Tomcat 服务器1:192.168.30.104](#Nginx、Tomcat 服务器1:192.168.30.104)

[Nginx、Tomcat 服务器2:192.168.30.105](#Nginx、Tomcat 服务器2:192.168.30.105)

Haproxy服务器:192.168.30.203

客户端验证


一、web集群调度器

web集群调度器分为软件和硬件

软件调度器

  • LVS:性能最好,搭建复杂
  • Nginx:性能较好,但集群节点健康检查功能呢不强,高并发性能较弱
  • Haproxy:高并发性能好

常用硬件调度器

绿盟、F5

二、Haproxy 的 8 种调度算法:

roundrobin 轮询

static-rr 加权轮询

leastconn 最小连接

source 根据源地址哈希

uri 根据请求的URI地址哈希

url_param 根据请求的URL参数哈希

hdr(name) 根据请求头哈希

rdp-cookie(name) 根据cookie的key哈希

三、Haproxy 的会话保持

1)源地址hash

2)设置cookie

3)会话粘性表stick-table

四、Haproxy的特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法;
  • 支持Session会话保持,Cookie的引导;
  • 支持通过获取指定的url来检测后端服务器的状态;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 支持TCP协议的负载均衡转发;(支持7层代理、实现动静分离)
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

五、LVS Nginx Haproxy 的区别

负载均衡性能

硬件负载均衡器F5 \> LVS 最好 > Haproxy 其次 > Nginx 弱于其它两种

支持的代理类型

  • LVS基于Linux系统内核实现的软负载均衡,只支持4层代理的IP转发,不支持正则匹配
  • Haproxy和Nginx基于应用程序实现的软负载均衡,都能支持4层和7层代理转发,支持正则匹配

支持的节点健康检查方式

  • LVS可以配合keepalived实现支持对TCP端口和URL路径方式的健康检查
  • Nginx默认情况下只支持被动健康检查,主动健康检查模块需要依赖第三方模块
  • Haproxy支持TCP端口、URL路径、脚本等方式的健康检查

实例:

Haproxy服务器:192.168.30.203

Nginx、Tomcat 服务器1:192.168.30.104

Nginx、Tomcat 服务器2:192.168.30.105

客户端

Nginx、Tomcat 服务器1:192.168.30.104

cd /usr/local/tomcat/sbin

./startup.sh 开启Tomcat服务

systemctl start nginx 开启nginx服务

Nginx、Tomcat 服务器2:192.168.30.105

cd /usr/local/tomcat/sbin

./startup.sh 开启Tomcat服务

systemctl start nginx 开启nginx服务

Haproxy服务器:192.168.30.203

编译安装Haproxy

yum install -y zlib-devel.i686 pcre-devel.i686 openssl-devel.i686 systemd-devel.i686

make PREFIX=/usr/local/haproxy ARCH=x86_64 TARGET=linux_glibc USER_PCRE=1 USER_OPENSSL=1 USER_ZLIB=1 USER_SYSTEMD=1

Haproxy服务器配置

global #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关

#将info(及以上)的日志发送到rsyslog的local0接口,将warning(及以上)的日志发送到rsyslog的local1接口

log 127.0.0.1 local0 info

log 127.0.0.1 local1 warning

maxconn 30000 #最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18

#chroot /var/lib/haproxy #修改haproxy工作目录至指定目录,一般需将此行注释掉

pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件

user haproxy #以指定的用户名身份运行haproxy进程

group haproxy #以指定的组名运行haproxy,以免因权限问题带来风险

daemon #让haproxy以守护进程的方式工作于后台

#nbproc 1 #指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。haproxy是单进程、事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启多进程

spread-checks 2 #在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度

上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。

defaults #配置默认参数,这些参数可以被用到listen,frontend,backend组件

log global #所有前端都默认使用global中的日志配置

mode http #模式为http(7层代理http,4层代理tcp)

option http-keep-alive #使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-close

option forwardfor #记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段

option httplog #开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplog

option dontlognull #不在日志中记录空连接

option redispatch #当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上

option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

maxconn 20000 #最大连接数,"defaults"中的值不能超过"global"段中的定义

retries 3 #定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用

#contimeout 5000 #设置连接超时时间,默认单位是毫秒

#clitimeout 50000 #设置客户端超时时间,默认单位是毫秒

#srvtimeout 50000 #设置服务器超时时间,默认单位是毫秒

timeout http-request 2s #默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发

timeout queue 3s #默认客户端请求在队列中的最大时长

timeout connect 1s #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容

timeout client 10s #默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeout

timeout server 2s #默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeout

timeout http-keep-alive 10s #默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout client

timeout check 2s #和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)

frontend http-in

bind *:80

acl url jsp path_end -i .jsp

use_backend tomcat_server if url_jsp

default_backend nginx_server

backend nginx_server

balance roundrobin

option httpchk GET /index.html

server ngx01 192.168.30.104:80 check inter 2000 fall 3 rise 2

server ngx02 192.168.30.105:80 check inter 2000 fall 3 rise 2

backend tomcat_server

balance roundrobin

option http-server-close

cookie HA_STICKY_dy insert indirect nocache

server tomcat01 192.168.30.104:8080 cookie tomcat0l check inter 2000 fall 3 rise 2

server tomcat02 192.168.30.105:8080 cookie tomcat02 check inter 2000 fall 3 rise 2

listen stats

bind *:1080

stats enable

stats refresh 30s

stats uri /stats

stats realm HAProxy\ Stats

stats auth admin:admin

客户端验证

刷新

因为设了cooki所以不能跳转

相关推荐
ping某1 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz3 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈3 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造