HAProxy–理论–06–配置文件demo
#logging options
global
#定义全局的 syslog 服务器,最多可以定义 2 个
#local0 是日志设备,对应于/etc/rsyslog.conf 中的配置,默认回收 info 的日志级别
log 127.0.0.1 local0 info
##1. 修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作
##2. 可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
chroot /usr/share/haproxy
# 1. 以指定的GID运行haproxy
# 2. 建议使用专用于运行haproxy的GID,以免因权限问题带来风险;
gid 111
## 同gid,不过指定的组名
group haproxy
# 1. 以指定的UID身份运行haproxy进程;
# 2. 建议使用专用于运行haproxy的uid,以免因权限问题带来风险;
uid 111
# 同uid,但使用的是用户名;
user haproxy
# 让haproxy以守护进程的方式在后台工作
# 其等同于"-D"选项的功能,当然,也可以在命令行中以"-db"选项将其禁用
daemon
# 安装模式,启动时无输出
quiet
#1. 指定启动的haproxy进程的个数
#2. 只能用于守护进程模式的haproxy
#3. 默认只启动1个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
nbproc 1
# 设置最大打开的文件描述符数,在1.4的官方文档中提示,该值会自动计算,所以不建议进行设置
# ulimit -n 65536
## 进程文件(默认路径 /var/run/haproxy.pid)
# pidfile /var/run/haproxy.pid
## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时
node hd.haproxy-01
description hd.haproxy-01 ## 当前实例的描述信息
## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定
defaults
## 继承 global 中 log 的定义
log global
#1. mode所处理的模式
# 1. tcp:四层
# 2. http:七层
# 3. health:状态检查,只会返回 OK
#2. tcp
# 1. 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对 7 层报文做任何类型的检查,
# 2. 此为默认模式
#3. http
# 1. 实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与 RFC 模式兼容的请求都会被拒绝
#4. health
# 1. 实例运行于 health 模式,其对入站请求仅响应"OK"信息并关闭连接,且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求
mode tcp
#if you set mode to tcp,then you nust change tcplog into httplog
## serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
option tcplog
#1. 启用该项,日志中将不会记录空连接。
#2. 空连接:就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
#3. 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
option dontlognull
# 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
retries 3
# 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;
# 而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
option redispatch
# 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option httpclose
# 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option abortonclose
option httplog ## 启用日志记录 HTTP 请求
#1. 设定每个haproxy进程所接受的最大并发连接数
#2. 等同于命令行选项"-n","ulimit -n"自动计算的结果正是参照此参数设定的
#3. 不能用于 backend 区段
#4. 对于大型站点来说,可以尽可能提高此值以便让 haproxy 管理连接队列, 从而避免无法应答用户请求。
#5. 注意:
# 1. haproxy 会为每个连接维持两个缓冲,每个缓存的大小为 8KB,再加上其他的数据,每个连接将大约占用 17KB 的 RAM 空间,这意味着经过适当优化后 ,有着 1GB 的可用 RAM 空间时将维护 40000-50000 并发连接。
# 2. 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对
#6. 默认为 2000
maxconn 2000 ## 前端的最大并发连接数(默认为 2000)
# 定义haproxy将客户端请求转发至后端服务器所等待的超时时长
timeout connect 5s
#客户端空闲超时时间为 60秒 则HA 发起重连机制
timeout client 60s
#客户端与服务器端建立连接后,等待服务器端的超时时长,
timeout server 15s
listen admin_stats # 定义一个名为admin_stats的部分
bind 0.0.0.0:1080 # 定义监听的套接字
mode http # 定义为HTTP模式
log global # 继承global中log的定义
# stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s
stats refresh 30s
# 设置统计页面的uri为/admin?stats
stats uri /admin?stats
# 设置统计页面认证时的提示内容
stats realm Private lands
# 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
stats auth admin:admin
# 隐藏统计页面上的haproxy版本信息
stats hide-version
frontend http_80_in # 定义一个名为http_80_in的前端部分
# http_80_in定义前端部分监听的套接字
bind 0.0.0.0:80
mode http # 定义为HTTP模式
log global # 继承global中log的定义
# 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP
option forwardfor
# 定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到
acl static_down nbsrv(static_server) lt 1
# 定义一个名叫php_web的acl,当请求的url末尾是以.php结尾的,将会被匹配到,下面两种写法任选其一
#acl php_web path_end .php
acl php_web url_reg /*.php$
# 定义一个名叫static_web的acl,当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif结尾的,将会被匹配到,上面两种写法任选其一
#acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
acl static_web path_end .gif .png .jpg .css .js .jpeg
# 如果满足策略static_down时,就将请求交予backend php_server
use_backend php_server if static_down
# 如果满足策略php_web时,就将请求交予backend php_server
use_backend php_server if php_web
# 如果满足策略static_web时,就将请求交予backend static_server
use_backend static_server if static_web
backend php_server #定义一个名为php_server的后端部分、
# 设置为http模式
mode http
# 设置haproxy的调度算法为源地址hash
balance source
# 允许向cookie插入SERVERID,每台服务器的SERVERID可在下面使用cookie关键字定义
cookie SERVERID
# 开启对后端服务器的健康检测,通过GET /test/index.php来判断后端服务器的健康情况
option httpchk GET /test/index.php
server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 3 weight 2
server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1
server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup
# server语法:server [:port] [param*] # 使用server关键字来设置后端服务器;为后端服务器所设置的内部名称[php_server_1],该名称将会呈现在日志或警报中、后端服务器的IP地址,支持端口映射[10.12.25.68:80]、指定该服务器的SERVERID为1[cookie 1]、接受健康监测[check]、监测的间隔时长,单位毫秒[inter 2000]、监测正常多少次后被认为后端服务器是可用的[rise 3]、监测失败多少次后被认为后端服务器是不可用的[fall 3]、分发的权重[weight 2]、最后为备份用的后端服务器,当正常的服务器全部都宕机后,才会启用备份服务器[backup]
backend static_server
mode http
option httpchk GET /test/index.html
server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3
## listen: 用于定义通过关联"前端"和"后端"一个完整的代理,通常只对 TCP 流量有用
listen mycat_servers
bind :3306 ## 绑定端口
mode tcp
option tcplog ## 记录 TCP 请求日志
option tcpka ## 是否允许向 server 和 client 发送 keepalive
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www ## 后端服务状态检测
# 1. 向后端服务器的 48700 端口(端口值在后端服务器上通过 xinetd 配置)发送 OPTIONS 请求(原理请参考 HTTP 协议)
# 2. HAProxy 会根据返回内容来判断后端服务是否可用.
# 3. 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。
balance roundrobin ## 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默认为轮询方式
server mycat_01 192.168.187.129:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10
server mycat_02 192.168.187.131:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10
# 1. 格式:server <name> <address>[:[port]] [param*]
# 2. serser 在后端声明一个 server,只能用于 listen 和 backend 区段。
# 3. <name>为此服务器指定的内部名称,其将会出现在日志及警告信息中
# 4. <address>此服务器的 IPv4 地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的 IPV4 地址
# 5. [:[port]]指定将客户端连接请求发往此服务器时的目标端口,此为可选项
# 6. [param*]为此 server 设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:
# weight: 权重,默认为 1,最大值为 256,0 表示不参与负载均衡
# backup:设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server
# check:启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定
# inter:设定监控状态检查的时间间隔,单位为毫秒,默认为 2000,也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
# rise:设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2)
# fall:设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3)
# 7. cookie:为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能
# 8. maxconn:指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其他连接被释放