当前位置:   article > 正文

【Haproxy】Haproxy的配置和应用_haproxy.rpm download

haproxy.rpm download

HAProxy介绍

HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.2。

HAProxy是可提供高可用性、负载均衡以及基于TcP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

支持功能

  • TCP 和 HTTP反向代理

  • SSL/TSL服务器

  • 可以针对HTTP请求添加cookie,进行路由后端服务器

  • 可平衡负载至后端服务器,并支持持久连接

  • 支持所有主服务器故障切换至备用服务器 keepalive

  • 支持专用端口实现监控服务

  • 支持停止接受新连接请求,而不影响现有连接

  • 可以在双向添加,修改或删除HTTP报文首部字段

  • 响应报文压缩

  • 支持基于pattern实现连接请求的访问控制

  • 通过特定的URI(url)为授权用户提供详细的状态信息

HAProxy的主要特性有:

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

  3. 支持多达8种负载均衡算法,同时也支持会话保持;

  4. 支持虚拟机主机功能,从而实现web负载均衡更加灵活;

  5. 支持连接拒绝、全透明代理等独特的功能;

  6. 拥有强大的ACL支持,用于访问控制; sendfile

  7. 其独特的弹性二x树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

  8. 支持TCP加速,零复制功能,类似于mmap机制;

  9. 支持响应池(response buffering) ;

  10. 支持RDP协议;

  11. 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;

  12. 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;

  13. 基于流量的健康评估机制;

  14. 基于http认证;

  15. 基于命令行的管理接口;

  16. 日志分析器,可对日志进行分析

HAProxy负载均衡策略非常多,常见的有如下8种:

官方文档:HAProxy version 2.4.15 - Configuration Manual

静态调度算法:不管后端,按照调度器的算法进行 分配

动态调度算法:会考虑后端服务器的负载情况

(1) roundrobin,表示简单的轮询 rr

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

LVS、Nginx、HAproxy的区别:

  1. IVS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

  2. LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

  3. LVs因为工作在TCP模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URI等多种状态检测方式;

  4. HAProxy功能强大,但整体性能低于4层模式的IVS负载均衡。

  5. Ngrinx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

安装haproxy

yum安装

CentOS 7 的默认的base仓库中包含haproxy的安装包文件,但是版本比较旧,是1.5.18的版本,距离当前版本已经有较长时间没有更新,由于版本比较旧所以有很多功能不支持,如果对功能和性能没有要求可以使用此版本,否则推荐使用新版本。

  1. [root@centos7 ~]# yum install haproxy -y
  2. #验证haproxy版本
  3. [root@centos7 ~]# haproxy -v
  4. HA-Proxy version 1.5.18 2016/05/10
  5. Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
  6. #获取haproxy软件包信息
  7. yum info haproxy

第三方 rpm -ivh 安装包

从第三方网站下载rpm包:https://pkgs.org/download/haproxy

基于互联网第三方仓库在线安装

  1. [root@localhost data]#wget http://mirror.centos.org/centos/7/sclo/x86_64/rh/Packages/r/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm
  2. [root@localhost data]#yum install -y rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm
  3. #下载地址
  4. http://mirror.centos.org/centos/7/sclo/x86_64/rh/Packages/r/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm
  5. [root@localhost data]#rpm -ql rh-haproxy18-haproxy
  6. [root@localhost data]#vim /usr/lib/systemd/system/rh-haproxy18-haproxy.service
  7. [root@localhost data]#systemctl start rh-haproxy18-haproxy.service
  8. [root@localhost data]#/opt/rh/rh-haproxy18/root/usr/sbin/haproxy -v
  9. HA-Proxy version 1.8.24 2020/02/15
  10. Copyright 2000-2020 Willy Tarreau <willy@haproxy.org>
第三方yum仓库
  1. yum install centos-release-scl-rh
  2. yum install rh-haproxy18-haproxy

编译安装

1.5 基础功能 稳定

2.0 新特性

编译安装HAProxy 2.0 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/

解决lua环境

HAProxy 支持基于lua实现功能扩展,lua是一种小巧的脚本语言,于1993年由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 官网:www.lua.org

Lua 应用场景

  • 游戏开发

  • 独立应用脚本

  • Web 应用脚本

  • 扩展和数据库插件,如MySQL Proxy

  • 安全系统,如入侵检测系统

由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy,过程如下:

  1. (实操)
  2. #查看当前系统版本
  3. [root@centos7 ~]#lua -v
  4. Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
  5. #下载lua
  6. curl -L -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
  7. tar zxf lua-5.4.6.tar.gz
  8. cd lua-5.4.6
  9. make all test
  10. #创建一个软连接
  11. ln -s lua-5.4.6 lua
  12. #查看版本
  13. cd src
  14. ./lua -v
编译安装 haproxy
  1. (实操)
  2. #安装依赖环境
  3. yum -y install gcc openssl-devel pcre-devel systemd-devel
  4. tar xf haproxy-2.4.25.tar.gz
  5. cd haproxy-2.4.25/
  6. #记得改后面的路径
  7. make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/lua/src/ LUA_LIB=/opt/lua/src/
  8. #编译
  9. make install PREFIX=/apps/haproxy
  10. #创建快捷方式
  11. ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
  12. haproxy -v #查看版本
  13. haproxy -h #查看帮助
  14. #创建并编写haproxy.service文件
  15. tee /usr/lib/systemd/system/haproxy.service <<eof
  16. [Unit]
  17. Description=HAProxy Load Balancer
  18. After=syslog.target network.target
  19. [Service]
  20. ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
  21. ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
  22. ExecReload=/bin/kill -USR2 $MAINPID
  23. LimitNOFILE=100000
  24. [Install]
  25. WantedBy=multi-user.target
  26. eof
  27. ###############建立文件########################
  28. mkdir /etc/haproxy
  29. [root@test1 opt]# vim /etc/haproxy/haproxy.cfg
  30. #写入
  31. global
  32. maxconn 100000
  33. chroot /apps/haproxy
  34. stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
  35. uid 99
  36. gid 99
  37. daemon
  38. #nbproc 4
  39. #cpu-map 1 0
  40. #cpu-map 2 1
  41. #cpu-map 3 2
  42. #cpu-map 4 3
  43. pidfile /var/lib/haproxy/haproxy.pid
  44. log 127.0.0.1 local3 info
  45. defaults
  46. option http-keep-alive
  47. option forwardfor
  48. maxconn 100000
  49. mode http
  50. timeout connect 300000ms
  51. timeout client 300000ms
  52. timeout server 300000ms
  53. listen stats
  54. mode http
  55. bind 0.0.0.0:9999
  56. stats enable
  57. log global
  58. stats uri /haproxy-status
  59. stats auth haadmin:123456
  60. listen web_port
  61. bind 0.0.0.0:8899
  62. mode http
  63. log global
  64. server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
  65. [root@test1 opt]# mkdir /var/lib/haproxy
  66. #设置用户和目录权限
  67. [root@test1 opt]# useradd -r -s /sbin/nologin haproxy
  68. [root@test1 opt]# systemctl enable --now haproxy
  69. Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.
  70. #查看进程haproxy
  71. [root@test1 opt]# pstree | grep haproxy
  72. |-haproxy---haproxy---{haproxy}

配置文件详解

官方地址配置文件官方帮助文档
  1. http://cbonte.github.io/haproxy-dconv/
  2. http://cbonte.github.io/haproxy-dconv/2.4/configuration.html
  3. https://www.haproxy.org/download/2.5/doc/configuration.txt

HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分

global:全局配置段

  1. 进程及安全配置相关的参数
  2. 性能调整相关参数
  3. Debug参数

proxies:代理配置段

  1. defaults:为frontend, backend, listen提供默认配置
  2. frontend:前端,相当于nginx中的server {}
  3. backend:后端,相当于nginx中的upstream {}
  4. listen:同时拥有前端和后端配置,配置简单,生产推荐使用

global配置

官方文档:http://cbonte.github.io/haproxy-dconv/2.4/configuration.html#3

详细讲解:

  1. vim /etc/haproxy/haproxy.cfg
  2. maxconn #最大连接数
  3. chroot #锁定运行目录,类似于 ftp中的禁锢
  4. deamon #以守护进程运行
  5. stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin process 1 #socket文件 进程件通信
  6. user, group, uid, gid  #运行haproxy的用户身份
  7. nbproc   n #开启的haproxy worker 进程数,默认进程数是一个,保持与 淳朴个数相同
  8. #nbthread 1 #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个haproxy进程开启的线程数,默认为每个进程一个线程
  9. #如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务
  10. Apr  7 14:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot
  11. enable multiple processes if multiple threads are configured. Please use either
  12. nbproc or nbthread but not both.
  13. # cpu亲缘性
  14. cpu-map 1 0   #绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
  15. cpu-map 2 1     #绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1号CPU
  16. maxconn n   #每个haproxy进程的最大并发连接数
  17. maxsslconn n   #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
  18. maxconnrate n   #每个进程每秒创建的最大连接数量
  19. spread-checks n #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
  20. pidfile #指定pid文件路径
  21. log 127.0.0.1 local2 info #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
  1. (实操)
  2. [root@test1 opt]# vim /etc/haproxy/haproxy.cfg
  3. #删除第八行的注释,开启进程
  4. 7 daemon
  5. 8 nbproc 4
  6. 9 #cpu-map 1 0
  7. [root@test1 opt]# systemctl restart haproxy.service
  8. [root@test1 opt]# pstree | grep haproxy
  9. |-haproxy---4*[haproxy]
  10. [root@test1 opt]# ps axo cmd,psr,pid | grep haproxy
  11. /usr/sbin/haproxy -Ws -f /e 1 80276
  12. /usr/sbin/haproxy -Ws -f /e 0 80280
  13. /usr/sbin/haproxy -Ws -f /e 1 80281
  14. /usr/sbin/haproxy -Ws -f /e 0 80282
  15. /usr/sbin/haproxy -Ws -f /e 0 80283
  16. grep --color=auto haproxy 0 80285
  17. [root@test1 opt]# vim /etc/haproxy/haproxy.cfg
  18. #删除第9~12行的注释,开启进程
  19. 8 nbproc 4
  20. 9 cpu-map 1 0
  21. 10 cpu-map 2 1
  22. 11 cpu-map 3 2
  23. 12 cpu-map 4 3
  24. [root@test1 opt]# ps axo cmd,psr,pid | grep haproxy
  25. /usr/sbin/haproxy -Ws -f /e 1 80276
  26. /usr/sbin/haproxy -Ws -f /e 0 80280
  27. /usr/sbin/haproxy -Ws -f /e 1 80281
  28. /usr/sbin/haproxy -Ws -f /e 1 80282
  29. /usr/sbin/haproxy -Ws -f /e 0 80283
  30. grep --color=auto haproxy 1 80296
状态页
  1. (实操)
  2. [root@test1 opt]# vim /etc/haproxy/haproxy.cfg
  3. listen stats
  4. mode http #7层协议
  5. bind 0.0.0.0:9999 #任意地址
  6. stats enable #开启
  7. log global #日志使用全局配置
  8. stats uri /haproxy-status #状态页
  9. stats auth haadmin:123456 #用户名和密码
  10. 访问:http://192.168.67.11:9999/haproxy-status
  11. 输入用户名和密码

日志

HAproxy本身不记录客户端的访问日志.此外为减少服务器负载,一般生产中HAProxy不记录日志.也可以配置HAProxy利用rsyslog服务记录日志到指定日志文件中

  1. (实操)
  2. [root@test1 opt]# tail -f /var/log/messages
  3. 刷新状态页,可以看到日志并不会刷新
  4. [root@test1 ~]# vim /etc/rsyslog.conf
  5. #删除1516行的#,打开udp
  6. 14 # Provides UDP syslog reception
  7. 15 $ModLoad imudp
  8. 16 $UDPServerRun 514
  9. #在74行添加local3
  10. 72 # Save boot messages also to boot.log
  11. 73 local7.* /var/log/boot.log
  12. 74 local3.* /var/log/haproxy.log
  13. #保存退出
  14. #重启配置文件
  15. [root@test1 ~]# systemctl restart rsyslog.service haproxy.service
  16. [root@test1 ~]#
  17. Message from syslogd@localhost at Mar 8 02:40:27 ...
  18. haproxy[80905]: proxy web_port has no server available!
  19. Message from syslogd@localhost at Mar 8 02:40:27 ...
  20. haproxy[80908]: proxy web_port has no server available!
  21. Message from syslogd@localhost at Mar 8 02:40:27 ...
  22. haproxy[80907]: proxy web_port has no server available!
  23. Message from syslogd@localhost at Mar 8 02:40:27 ...
  24. haproxy[80906]: proxy web_port has no server available!
  25. #这边卡住直接回车即可
  26. [root@test1 ~]# ls /var/log/haproxy.log
  27. /var/log/haproxy.log
  28. [root@test1 ~]# tail -f /var/log/haproxy.log
  29. 再刷新状态页,可以看到日志随之刷新
将日志传给远端服务器
  1. (实操)
  2. [root@test1 ~]# vim /etc/haproxy/haproxy.cfg
  3. #在15行添加,将日志发送到远端
  4. 14 log 127.0.0.1 local3 info
  5. 15 log 192.168.67.12 local6 info
  6. [root@test1 ~]# systemctl restart haproxy.service
  7. [root@test1 ~]#
  8. Message from syslogd@localhost at Mar 8 02:47:54 ...
  9. haproxy[81050]: proxy web_port has no server available!
  10. Message from syslogd@localhost at Mar 8 02:47:54 ...
  11. haproxy[81053]: proxy web_port has no server available!
  12. Message from syslogd@localhost at Mar 8 02:47:54 ...
  13. haproxy[81051]: proxy web_port has no server available!
  14. Message from syslogd@localhost at Mar 8 02:47:54 ...
  15. haproxy[81052]: proxy web_port has no server available!
  16. #这边卡住,直接回车即可
  17. #打开远端192.168.67.12
  18. #安装haproxy
  19. [root@test2 ~]# yum -y install haproxy.x86_64
  20. [root@test2 ~]# vim /etc/rsyslog.conf
  21. #开启udp
  22. 14 # Provides UDP syslog reception
  23. 15 $ModLoad imudp
  24. 16 $UDPServerRun 514
  25. #添加local6
  26. 72 # Save boot messages also to boot.log
  27. 73 local7.* /var/log/boot.log
  28. 74 local6.* /var/log/haproxy.log
  29. #保存退出,重启日志
  30. [root@test2 ~]# systemctl restart rsyslog.service haproxy.service
  31. #最好等一会再操作
  32. [root@test2 ~]# ls /var/log/haproxy.log
  33. /var/log/haproxy.log
  34. [root@test2 ~]# tail -f /var/log/haproxy.log
  35. #刷新状态页,可以远端也会同步刷新

Proxies配置

官方文档:HAProxy version 2.1.12 - Configuration Manual

  1. defaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
  2. frontend <name>   #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。
  3. backend <name>   #后端服务器组,等于nginx的upstream和LVS中的RS服务器
  4. listen  <name>   #将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用

注意:name字段只能使用大小写字母,数字,‘-’(dash),'_‘(underscore),'.' (dot)和 ':'(colon),并且严格区分大小写

Proxies配置-defaults

defaults 配置参数:

  1. #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
  2. option redispatch    
  3. #当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启
  4. option abortonclose  
  5. #开启与客户端的会话保持
  6. option http-keep-alive
  7. #透传客户端真实IP至后端web服务器
  8. option forwardfor    
  9. #设置默认工作类型,使用TCP服务器性能更好,减少压力
  10. mode http|tcp
  11. #session 会话保持超时时间,此时间段内会转发到相同的后端服务器
  12. timeout http-keep-alive 120s
  13. #客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms
  14. timeout connect 120s
  15. #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如果超时,会出现502错误,此值建议设置较大些,访止502错误
  16. timeout server 600s
  17. #设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout server相同
  18. timeout client 600s
  19. #对后端服务器的默认检测超时时间
  20. timeout check   5s  
  21. #指定后端服务器的默认设置
  22. default-server inter 1000 weight 3  
Proxies配置-listen 简化配置

使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用

  1. #官网业务访问入口
  2. listen WEB_PORT_80 #业务名称
  3.   bind 10.0.0.7:80   #ip加端口
  4.   mode http #默认 可以不写
  5.   option forwardfor #透传客户端真实IP至后端web服务器
  6.   server web1   10.0.0.17:8080   check inter 3000 fall 3 rise 5
  7.   server web2   10.0.0.27:8080   check inter 3000 fall 3 rise 5

例子: 默认无后端健康性检测,

  1. listen ky35_port_80
  2. bind 192.168.67.11:80
  3. mode http
  4. log global
  5. server rs1 192.168.67.12:80
  6. server rs2 192.168.67.13:80

加入健康性检测 check

  1. (实操)
  2. [root@test1 ~]# vim /etc/haproxy/haproxy.cfg
  3. listen ky35_port_80
  4. bind 192.168.67.11:80
  5. mode http
  6. log global
  7. server rs1 192.168.67.12:80 check
  8. server rs2 192.168.67.13:80 check
  9. #保存退出,重启配置文件
  10. [root@test1 ~]# systemctl restart haproxy.service
  11. #开启23号机,关闭防火墙、安装并开启httpd
  12. [root@test2 ~]# yum -y install httpd
  13. [root@test2 ~]# systemctl start httpd
  14. [root@test2 ~]# echo test2 >/var/www/html/index.html
  15. [root@test2 ~]# cat /var/www/html/index.html
  16. test2
  17. [root@test3 ~]# yum -y install httpd
  18. [root@test3 ~]# systemctl start httpd
  19. [root@test3 ~]# echo test3 >/var/www/html/index.html
  20. [root@test3 ~]# cat /var/www/html/index.html
  21. test3
  22. #192.168.67.13,关闭httpd,抓包ens33网卡的80端口
  23. tcpdump -i ens33 -nn port 80
  24. #抓指定流向的包
  25. tcpdump -i ens33 -nn src host 192.168.67.10 and dst host 192.168.67.12
Proxies配置-frontend

frontend 配置参数:

  1. bind: #指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于
  2. listen字段中
  3. #格式:
  4. bind [<address>]:<port_range> [, ...] [param*]
  5. #注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1
  6. backlog <backlog> #针对所有server配置,当前端服务器的连接数达到上限后的后援队列长度,注
  7. 意:不支持backend

范例:

  1. listen http_proxy #监听http的多个IP的多个端口和sock文件
  2.   bind :80,:443,:8801-8810
  3.   bind 10.0.0.1:10080,10.0.0.1:10443
  4.   bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
  5. listen http_https_proxy #https监听
  6.   bind :80
  7.   bind :443 ssl crt /etc/haproxy/site.pem #公钥和私钥公共文件
  8. listen http_https_proxy_explicit #监听ipv6、ipv4和unix sock文件
  9.   bind ipv6@:80
  10.   bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
  11.   bind unix@ssl-frontend.sock user root mode 600 accept-proxy
  12. listen external_bind_app1 #监听file descriptor
  13.   bind "fd@${FD_APP1}"

例子:

  1. frontend ky26_web_port #可以采用后面形式命名:业务-服务-端口号
  2.   bind :80,:8080
  3.   bind 10.0.0.7:10080,:8801-8810,10.0.0.17:9001-9010
  4.   mode http|tcp     #指定负载协议类型
  5.   use_backend <backend_name>  #调用的后端服务器组名称
Proxies配置-backend

定义一组后端服务器,backend服务器将被frontend进行调用。

注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动

  1. mode http|tcp     #指定负载协议类型,和对应的frontend必须一致
  2. option #配置选项
  3. server   #定义后端real server,必须指定IP和端口

server 配置

  1. #针对一个server配置
  2. check #对指定real进行健康状态检查,如果不加此设置,默认不开启检查,只有check后面没
  3. 有其它配置也可以启用检查功能
  4. #默认对相应的后端服务器IP和端口,利用TCP连接进行周期性健康性检查,注意必须指定
  5. 端口才能实现健康性检查
  6. addr <IP>   #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量
  7. port <num> #指定的健康状态监测端口
  8. inter <num> #健康状态检查间隔时间,默认2000 ms
  9. fall <num>   #后端服务器从线上转为线下的检查的连续失效次数,默认为3
  10. rise <num>   #后端服务器从下线恢复上线的检查的连续有效次数,默认为2
  11. weight <weight> #默认为1,最大值为2560(状态为蓝色)表示不参与负载均衡,但仍接受持久连
  12. backup #将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似
  13. Sorry Server
  14. disabled #将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受连接,
  15. 状态为深黄色,优雅下线,不再接受新用户的请求
  16. redirect prefix http://www.baidu.com/ #将请求临时(302)重定向至其它URL,只适用于
  17. http模式
  18. redir http://www.baidu.com       #将请求临时(302)重定向至其它URL,只适用于
  19. http模式
  20. maxconn <maxconn> #当前后端server的最大并发连接数

  1. (实操)
  2. vim /etc/haproxy/haproxy.cfg
  3. #注释掉listen块后,添加frontend和backend
  4. 34 frontend ky35
  5. 35 bind 192.168.67.11:80 #本机IP
  6. 36 use_backend ky35_web #调用后端
  7. 37
  8. 38 backend ky35_web
  9. 39 server rs1 192.168.67.12:80 check
  10. 40 server rs2 192.168.67.13:80 check
  11. #保存退出,重启配置文件
  12. [root@test1 ~]# systemctl restart haproxy.service
  13. #通过客户机4,访问
  14. [root@test4 ~]# curl 192.168.67.11
  15. test2
  16. [root@test4 ~]# curl 192.168.67.11
  17. test3

haproxy+keepalive高可用(未完成)

设备准备
  1. 调度器1:192.168.67.11
  2. web1:192.168.67.12
  3. web2:192.168.67.13
  4. 调度器2:192.168.67.14

配置调度器1、2(haproxy+keepalive)

  1. [root@test1 ~]# yum -y install keepalived
  2. [root@test1 ~]# vim /etc/keepalived/keepalived.conf
  3. [root@test1 ~]# cd /opt/
  4. [root@test1 opt]# lua -v
  5. Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
  6. #下载lua
  7. [root@test1 opt]# curl -L -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
  8. % Total % Received % Xferd Average Speed Time Time Time Current
  9. Dload Upload Total Spent Left Speed
  10. 100 169 100 169 0 0 272 0 --:--:-- --:--:-- --:--:-- 272
  11. 100 354k 100 354k 0 0 7553 0 0:00:48 0:00:48 --:--:-- 12652
  12. [root@test1 opt]# ls
  13. fdisk.sh lua-5.4.6.tar.gz rh
  14. [root@test1 opt]# tar zxf lua-5.4.6.tar.gz
  15. [root@test1 opt]# ls
  16. fdisk.sh lua-5.4.6 lua-5.4.6.tar.gz rh
  17. [root@test1 opt]# cd lua-5.4.6/
  18. [root@test1 lua-5.4.6]# ls
  19. doc Makefile README src
  20. [root@test1 lua-5.4.6]# make all test
  21. #创建软连接
  22. [root@test1 lua-5.4.6]# cd /opt
  23. [root@test1 opt]# ln -s lua-5.4.6 lua
  24. [root@test1 opt]# ls
  25. fdisk.sh lua lua-5.4.6 lua-5.4.6.tar.gz rh
编译安装haproxy
  1. #安装依赖环境
  2. [root@test1 opt]# yum -y install gcc openssl-devel pcre-devel systemd-devel
  3. [root@test1 opt]# rz -E
  4. rz waiting to receive.
  5. [root@test1 opt]# ls
  6. fdisk.sh haproxy-2.4.25.tar.gz lua lua-5.4.6 lua-5.4.6.tar.gz rh
  7. [root@test1 opt]# tar xf haproxy-2.4.25.tar.gz
  8. [root@test1 opt]# ls
  9. fdisk.sh haproxy-2.4.25.tar.gz lua-5.4.6 rh
  10. haproxy-2.4.25 lua lua-5.4.6.tar.gz
  11. [root@test1 opt]# cd haproxy-2.4.25/
  12. make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/lua/src/ LUA_LIB=/opt/lua/src/
  13. #编译
  14. [root@test1 haproxy-2.4.25]# make install PREFIX=/apps/haproxy
  15. #创建快捷方式
  16. [root@test1 haproxy-2.4.25]# ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
  17. #创建并编写haproxy.service文件
  18. [root@test1 haproxy-2.4.25]# tee /usr/lib/systemd/system/haproxy.service <<eof
  19. >
  20. > [Unit]
  21. > Description=HAProxy Load Balancer
  22. > After=syslog.target network.target
  23. >
  24. > [Service]
  25. > ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
  26. > ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
  27. > ExecReload=/bin/kill -USR2 $MAINPID
  28. > LimitNOFILE=100000
  29. >
  30. > [Install]
  31. > WantedBy=multi-user.target
  32. >
  33. >
  34. > eof
  35. [root@test1 haproxy-2.4.25]# mkdir /etc/haproxy
  36. [root@test1 haproxy-2.4.25]# vim /etc/haproxy/haproxy.cfg
  37. #写入
  38. #cpu-map 2 1
  39. #cpu-map 3 2
  40. #cpu-map 4 3
  41. pidfile /var/lib/haproxy/haproxy.pid
  42. log 127.0.0.1 local3 info
  43. defaults
  44. option http-keep-alive
  45. option forwardfor
  46. maxconn 100000
  47. mode http
  48. timeout connect 300000ms
  49. timeout client 300000ms
  50. timeout server 300000ms
  51. listen stats
  52. mode http
  53. bind 0.0.0.0:9999
  54. stats enable
  55. log global
  56. stats uri /haproxy-status
  57. stats auth haadmin:123456
  58. listen web_port
  59. bind 0.0.0.0:8899
  60. mode http
  61. log global
  62. server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
  63. #设置用户和目录权限
  64. [root@test1 haproxy-2.4.25]# mkdir /var/lib/haproxy
  65. [root@test1 haproxy-2.4.25]# useradd -r -s /sbin/nologin haproxy
  66. [root@test1 haproxy-2.4.25]# systemctl enable --now haproxy
  67. Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.
  68. #查看进程haproxy
  69. [root@test1 haproxy-2.4.25]# pstree | grep haproxy
  70. |-haproxy---haproxy---{haproxy}
  71. #重启haproxy
  72. [root@test1 examples]# systemctl restart haproxy

配置Web1、Web2

安装httpd
  1. #安装、启动、查看httpd服务
  2. [root@test2 ~]# yum -y install httpd
  3. [root@test2 ~]# systemctl restart httpd
  4. [root@test2 ~]# systemctl status httpd
  5. [root@test3 ~]# yum -y install httpd
  6. [root@test3 ~]# systemctl restart httpd
  7. [root@test3 ~]# systemctl status httpd
  8. #在web1和web2的 var/www/html目录下创建测试页
  9. [root@test2 ~]# vim /var/www/html/index.html
  10. This is Web1
  11. [root@test3 ~]# vim /var/www/html/index.html
  12. This is Web2

在客户机上测试

curl 192.168.67.11

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/987857
推荐阅读
相关标签
  

闽ICP备14008679号