HAproxy的安装与配置讲解

时间:2023-03-09 09:01:56
HAproxy的安装与配置讲解

1,安装

 官网下载
http://www.haproxy.org/#down
cd /usr/local/src/
wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.27.tar.gz
tar -zxvf haproxy-1.4..tar.gz
cd haproxy-1.4.
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /usr/local/haproxy/conf
cp examples/haproxy.cfg /usr/local/haproxy/conf 完成

HAproxy默认不创建配置文件目录,我们自己创建  mkdir /usr/local/haproxy/conf

拷贝事例配置文件到我们创建的配置文件目录

2配置文件讲解

默认配置文件如下:

 # this config needs haproxy-1.1. or haproxy-1.2.

 global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn
chroot /usr/share/haproxy
uid
gid
daemon
#debug
#quiet defaults
log global
mode http
option httplog
option dontlognull
retries
redispatch
maxconn
contimeout
clitimeout
srvtimeout listen appli1-rewrite 0.0.0.0:
cookie SERVERID rewrite
balance roundrobin
server app1_1 192.168.34.23: cookie app1inst1 check inter rise fall
server app1_2 192.168.34.32: cookie app1inst2 check inter rise fall
server app1_3 192.168.34.27: cookie app1inst3 check inter rise fall
server app1_4 192.168.34.42: cookie app1inst4 check inter rise fall listen appli2-insert 0.0.0.0:
option httpchk
balance roundrobin
cookie SERVERID insert indirect nocache
server inst1 192.168.114.56: cookie server01 check inter fall
server inst2 192.168.114.56: cookie server02 check inter fall
capture cookie vgnvisitor= len option httpclose # disable keep-alive
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address listen appli3-relais 0.0.0.0:
dispatch 192.168.135.17: listen appli4-backup 0.0.0.0:
option httpchk /index.html
option persist
balance roundrobin
server inst1 192.168.114.56: check inter fall
server inst2 192.168.114.56: check inter fall backup listen ssl-relay 0.0.0.0:
option ssl-hello-chk
balance source
server inst1 192.168.110.56: check inter fall
server inst2 192.168.110.57: check inter fall
server back1 192.168.120.58: backup listen appli5-backup 0.0.0.0:
option httpchk *
balance roundrobin
cookie SERVERID insert indirect nocache
server inst1 192.168.114.56: cookie server01 check inter fall
server inst2 192.168.114.56: cookie server02 check inter fall
server inst3 192.168.114.57: backup check inter fall
capture cookie ASPSESSION len
srvtimeout option httpclose # disable keep-alive
option checkcache # block response if set-cookie & cacheable rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address errorloc http://192.168.114.58/error502.html
errorfile /etc/haproxy/errors/.http

HAproxy基础配置文件讲解

HAproxy配置文件主要由五个部分组成
1,golbal部分
用来设定全局配置参数,属于进程级的配置,通常和操作系统有关系。
2,default部分
默认的参数部分
在此部分设置的参数值,默认会自动引用到下面的frontend,backend,和listen部分中,所以某些参数属于公用配置,只需要在default部分添加一次即可。
而如果在frontend,backend和listen部分中也配置了与default部分一样的参数,那么default部分参数对应的值会自动被覆盖
3,frontend部分
用于设置接收用户请求的前端虚拟节点。fronted可以根据ACL规则直接指定要使用的后端backend.
4,backend部分
此部分用来设置集群后端服务集群的配置,也就是来添加一组真是服务器,来处理前端用户的请求。添加的真实服务器类似与LVS中的real server节点
5,listen部分
此部分是frontend部分和backend部分的结合体.在HAproxy1.3版本之前,HAproxy的所有配置选项都在这个部分中来设置.为了保持兼容,HAproxy新的版本仍然保留了listen组件的配置方式
,目前在HAproxy中,两种配置选择其中一种即可。
详解

1,global部分

global
log 127.0.0.1 local0 info
maxconn 4096
chroot /usr/share/haproxy
user nobody #可以写 uid 99 gid 99
group nobody
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
log,全局的日志配置,local0表示日志设备,info表示日志级别(err,warning,info,debug))
上边表示使用127.0.0.1上的rysslog服务中的local0日志设备,记录日志级别为info
maxconn:设定HAproxy进程最大的并发连接数,像这个命令(ulimit -n)
user/group:运行HAProxy进程的用户和组
daemon:设置HAProxy进程后台运行,推荐方式
nbproc:设置HAProxy继承可创建的进程数此参数要求HAProxy运行模式为daemon默认只是启动一个进程,改值最好小于cpu核数
pidfile:指定HAProxy进程的pid文件,启动进程的用户必须有访问此文件的权限

2,default部分

defaults
log global
mode http
retries 3
redispatch
maxconn 2000
timeout connect 10s
timeout client 20s
timeout server 30s
timeout check 5s
mode:设置HAProxy实例的运行模式,有tcp,http,health三个可选值
TCP模式,此模式下客户端与服务端之间建立一个全双工连接,不会对七层报文做任何类型的检查经常用于ssl,ssh,smtp等应用
HTTP模式,此模式下,客户端请求在转发至后端服务器之前将会被深度分析,所有不与RFC模式兼容的请求都会被拒绝
health,基本废弃
retries:设置连接后端服务器失败重复次数,如果超过这个值的话,HAProxy会认为后端服务器标记为不可用
timeout connect:设置成功连接一台后端服务器最长等待时间
timeout client:设置连接客户端发送数据时的最长等待时间
timeout server:设置服务端回应客户端数据发送的最长等待时间
timeout check:设置对后端服务器检测超时时间

frontend部分

frontend wwww

bind *:80
mode http
option httplog
option forwardfor
option httpclose
log global
default_backend htmpool

这部分通过frontend关键字定义了一个名字为'www'的前端虚拟节点.
bind:此选项只能在frontend和listen部分进行定义,用于定义一个或者监听的套接字.格式如下
bind [<address>:<port_range>] interface <interface>
address可选项,其可以是主机名或ip地址,如果将其设置为'*'或'0.0.0.0'将将监听当前所有IPV4地址
port_range可以是一个特定的tcp端口,也可以是一个端口范围.
option httplog 启用日志记录HTTP请求
option forwardfor 获取客户端真实ip地址
option httpclose 客户端与服务端完成一次链接请求后,HAProxy将主动断开TCP链接
log global 使用全局日志配置
default_backend:默认的后端服务器池,也就是指定一组后端服务器真实地址,这些真实服务器将在backend段进行定义,htmpool就是一个后端服务器组

backend部分配置事例如下
backend htmpool
mode http
option redispatch
option abortonclose
balance roundrobin
cookie SERVERID
option httpchk GET /index.php
server web1 10.200.34.181:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 10.200.34.182:8080 cookie server2 weight 6 check inter 2000 rise 2 fall 3
定义了一个名为htmpool的后端真实服务器地址
option redispatch:此参数用于cookie保持的环境中,默认情况下,HAProxy会将其请求的后端服务器的serverid插入cookie中,以保证会话的session持久性当后端服务器出现故障的时候,就会将客户的请求强制定向到另外一台健康的后端服务器上,来保证服务正常。
option abortonclose:此参数可以在服务器负载很高的情况下,自动结束当前队列中,处理时间比较长的连接
balance第一负载均衡算法
roundrobin:基于权重进行轮叫调度的算法。在服务器性能分布比较均匀时,这是一种最公平,最合理的算法
static-rr:也是基于权重进行轮叫调度的算法,但是此算法为静态方法
source:基于请求源ip的算法,这种方式可以使同一个客户端ip的请求始终被转发到某特定的后端服务器
leastconn:此算法会将新的连接请求转发到具有最少连接数数目的后端服务器.在会话较长的场景中推荐使用,例如数据库负载均衡,对于http这种会话较短的不推荐使用
uri
uri_param
hdr
cookie:准许像cookie插入serverid,没太服务器的serverid可在下面的server关键字中使用cookie关键字定义
option httpchk:启用http服务状态检测功能,语法如下
option httpchk <method> <uri> <version>
method表示http请求方式,常用的有OPTIONS,GET,HEAD.一般采用HEAD的方式,仅仅检查response的HEAD是不是状态码200
uri表示检测的URL地址,返回状态码为200正常,其他异常
server定义多台后端真时服务器地址,不能用于defaults,frontend部分
格式: server <name> <address> [:port] [param*]
<name>为后端服务器指定一个内部名称
<address>后端真实服务器的IP地址或主机名
<port>指定连接请求发往真实服务器时的目标端口
[param*]:为后端服务器设定参数,常用的如下
check-- 启用对后端服务器执行健康状态检查
inter 设置健康状态检查的时间间隔,单位ms
rise:设置从故障状态转化至正常状态需要成功检查的次数
fall:设置后端服务器从正常状态转换为不可用状态需要检查的次数,fall 3三次检查失败就认为此服务不可用
cookie:为指定后端服务器设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接功能
cookie server1表示web1的serverid为server1
weight:设置后端服务器的权重默认为1,最大256
backup:设置后端服务器的备份服务器仅仅在后端所有服务器都不能使用才启用

listen部分

listen admin_stats
bind 0.0.0.0:9188
mode http
log 127.0.0.1 local0 err
stats refresh 30s
stats uri /haproxy-status
status realm welcome login\ Haproxy
stats auth admin:admin~!@
stats hide-version
stats admin if TRUE

定义了一个名为admin_stats的实例,也就是定义了HAproxy的监控页面
stats refresh定义了HAproxy统计页面的自动刷新的时间
stats uri设定HAProxy监控页面的URL路径,stats uri /haproxy-status,可以通过http://IP:9188/haproxy-status查看
stats realm设置登录HAProxy统计页面时密码框上的文本信息
stats auth设置登录HAProxy统计页面的用户名和密码
stats hide-version隐藏HAProxy统计页面上的版本信息
stats admin if TRUE,可以在监控页面上手动启用或者禁止后端真实服务器,仅在1.4.9以后版本有效