haproxy-基本配置信息

avatar
作者
猴君
阅读量:0

一、简介

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

        haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

企业版网站:https://www.haproxy.com

社区版网站:http://www.haproxy.org

github:https://github.com/haprox

企业版本和社区版功能对比
功能社区版企业版
高级HTTP / TCP负载平衡和持久性支持支持
高级健康检查支持支持
应用程序加速支持支持
高级安全特性支持支持
高级管理支持支持
HAProxy Dev Branch新功能支持
24*7 支持服务支持
实时仪表盘支持
VRRP和Route Health Injection HA工具支持
ACL,映射和TLS票证密钥同步支持
基于应用程序的高级DDoS和Bot保护(自动保护)支持
Bot(机器人)监测支持
Web应用防火墙支持
HTTP协议验证
实时集群追踪

二、安装与服务信息

2.1实验架构

2.2配置

2.2.1安装

在haproxy中安装

yum install haproxy -y

查看版本

haproxy -v

2.2.2基本配置信息

global:全局配置段

  • 进程及安全配置相关的参数
  • 性能调整相关参数
  • Debug参数

proxies:代理配置段

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

chroot:锁定运行目录

deamon:守护进程运行

user、group、uid、gid:运行haproxy的用户身份

stats socket:套接字文件

nbproc N:开启的haproxy worker 进程数,默认进程数是一个

nbthread 1 (和nbproc 互斥):指定每个haproxy进程开启的线程数,默认为每个进程一个 线程

cpu-map 1 0:绑定haproxy worker 进程至指定CPU,将第1个work进程绑 定至0号CPU

cpu-map 2 1:绑定haproxy worker 进程至指定CPU,将第2个work进程绑 定至1号CPU maxconn N:每个haproxy进程的最大并发连接数

maxsslconn N :每个haproxy进程ssl最大连接数,用于haproxy配置了证书的 场景下 maxconnrate N : 每个进程每秒创建的最大连接数量

spread-checks N :后端server状态check随机提前或延迟百分比时间,建议2- 5(20%-50%)之间,默认值0

pidfile:指定pid文件路径

log 127.0.0.1 local2 info:定义全局的syslog服务器;日志服务器需要开启UDP协议, 最多可以定义两个

2.2.2.2、proxies

defaults []:默认配置项,针对以下的frontend、backend和listen生效,可以多个 name也可以没有name
 

frontend:前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。

bind:指定haproxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中

backlog #针对所有server配置,当前端服务器的连接数达到上限后的后援队列长度,注意:不 支持backend

配置实例

frontend lee-webserver-80     bind 172.25.254.100:80     mode http     use_backend lee-webserver-80-RS #调用backend的名称

backend:#后端服务器组,等于nginx的upstream和LVS中的RS服务器

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

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

配置实例

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

其中server

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

listen: #将frontend和backend合并在一起配置,相对于frontend和backend 配置更简洁,生产常用

配置实例

listen webserver bind 172.25.254.100:80 mode http option forwardfor server web1 172.25.254.10:80 check inter 3s fall 3 rise 5 server web2 172.25.254.20:80 check inter 3s fall 3 rise 5

2.2.3、socat

        对服务器动态权重和其它状态可以利用 socat工具进行调整,Socat 是 Linux 下的一个多功能的网络工 具,名字来由是Socket CAT,相当于netCAT的增强版.Socat 的主要特点就是在两个数据流之间建立双向 通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、Socket文件等

安装

yum install socat -y

范例:利用工具socat 对服务器动态权重调整

在配置文件中更改设置,然后重启haproxy

#修改配置文件 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg stats socket /var/lib/haproxy/stats mode 600 level admin

以下是关于更改权重的命令

第一个命令是查看

第4,5个命令是更改

2.2.4、cookie

        cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少, 已经被session 共享服务器代替

配置选项

cookie name [ rewrite | insert | prefix ][ indirect ] [ nocache ][ postonly ] [ preserve ][ httponly ] [ secure ][ domain ]* [ maxidle ][ maxlife ]

  • name: #cookie 的 key名称,用于实现持久连接
  • insert: #插入新的cookie,默认不插入
  • cookie indirect: #如果客户端已经有cookie,则不会再发送cookie信息
  • nocache: #当client和hapoxy之间有缓存服务器(如:CDN)时,不允许中间缓存器缓存cookie, #因为这会导致很多经过同一个CDN的请求都发送到同一台后端服务器

配置实例

listen webserver     bind *:80     option forwardfor     mode http     balance roundrobin     cookie WEBCOOKIE insert nocache indirect     server web1 172.25.254.10:80 cookie web1 weight 1 check inter 3s fall 3 rise 5     server web2 172.25.254.20:80 cookie web2 weight 1 check inter 3s fall 3 rise 5

可以通过此命令验证

curl -i 172.25.254.100

2.2.5、状态页

通过web界面,显示当前haproxy的运行状态

配置项

  • stats enable #基于默认的参数启用stats page
  • stats hide-version #将状态页中haproxy版本隐藏
  • stats refresh #设定自动刷新时间间隔,默认不自动刷新
  • stats uri #自定义stats page uri,默认值:/haproxy?stats
  • stats auth : #认证时的账号和密码,可定义多个用户,每行指定一个用户 #默认no authentication
  • stats admin { if | unless } #启用stats page中的管理功能

配置实例

listen stats:     mode http     bind *:80     stats enable     log global     stats uri /status #自定义stats page uri     stats auth gxx:gxx #认证,此行可以出现多次

测试

浏览器访问:172.25.254.100:80/status

页面信息:

session rate(每秒的连接会话信息)         Errors(错误统计信息)

cur:每秒的当前会话数量                         Req:错误请求量

max:每秒新的最大会话数量                   conn:错误链接量

limit:每秒新的会话限制量                        Resp:错误响应量

sessions(会话信息)                                Warnings(警告统计信息)

cur:当前会话量                                        Retr:重新尝试次数

max:最大会话量                                      Redis:再次发送次数

limit: 限制会话量                                     Total:总共会话量

Server(real server信息)                           LBTot:选中一台服务器所用的总时间

Status:后端机的状态,包括UP和DOWN

Last:和服务器的持续连接时间              LastChk:持续检查后端服务器的时间

Wght:权重 Bytes(流量统计)                     Act:活动链接数量

In:网络的字节输入总量                            Bck:备份的服务器数量

Out:网络的字节输出总量                         Chk:心跳检测时间

Dwn:后端服务器连接后都是DOWN的数量

Denied(拒绝统计信息)                            Dwntme:总的downtime时间

Req:拒绝请求量                                      Thrtle:server 状态

Resp:拒绝回复量

2.2.6、透传

        web服务器中需要记录客户端的真实IP地址,用于做访问统计、安全防护、行为分析、区域排行等场景。

四层透传

目前的阶段是nginx中配置比较多,apache是不支持了

vim /wtc/nginx/nginx.conf

更改后重启

并在haproxy中

弄好之后就可以重启

就可以在测试机上查看日志内容

tail -n 3 /var/log/nginx/access.log
七层透传

在apache下

vim /etc/httpd/conf/httpd.conf

在haproxy下

listen webserver     option forwardfor     bind 1*:80     mode http     balance roundrobin     server web1 172.25.254.10:80 send-proxy weight 1 check inter 3s fall 3 rise 5     server web2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5

编辑完了都要重启

测试

tail -n 3 /etc/httpd/logs/access_log

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!