基本内容简介:

官网:
http://www.haproxy.org
http://www.haproxy.com
文档:
https://cbonte.github.io/haproxy-dconv/


功能:
1 提供cookie的持久性,支持基于cookie进行调度
2 实现基于内容的交换,过载保护的高级流量管制
3 自动故障切换
4 以正则表达式为基础的控制运行时间
5 基于web页面的报表及高级日志记录
6 支持http反向代理|动态程序反向代理|数据库反向代理

安装:
yum install -y haproxy

配置文件解析:

主配置文件:
/etc/haproxy/haproxy.cfg
相关应用程序:
/usr/bin/halog
/usr/bin/iprange
主程序:
/usr/sbin/haproxy
服务server:
/usr/lib/systemd/system/haproxy.service

配置文件解析:global

global --全局配置
进程及安全配置相关的参数
性能调整相关参数
Debug参数
进程及安全管理:
chroot --禁锢haproxy进程在固定目录,降低安全风险
deamon --后台运行
user --用户
group --组
uid 
gid
nbproc [n] 要启动的haproxy的进程数量,系统默认单进程,要求使用daemon模式
默认开启单进程
建议配置的数量小于等于cpu数量!

ulimit-n [n] 每个haproxy进程可打开的最大文件数,系统会自动指定
不建议手动设置!

daemon 后端方式运行,建议使用!
-db --禁用
如何使用前台模式:docker专用
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -db

log 定义全局的syslog服务器,最多可定义两个
如何定义:
第一步:
在rsyslog配置文件中加入:
local2.*              /var/log/haproxy.log
第二步:开启网络日志功能
$ModLoad imudp
$UDPServerRun 514
日志功能其它设置:
log <address> [len [n]] 
address ---rsyslog服务器地址
len --记录日志长度 默认1024
max level --记录最大级别
facility --记录设施
min level --最小级别
log-format <格式定义> --参考官方文档
日志管理---捕获信息

捕获请求和相应报文中的cookie并记录日志
capture cookie <name> len <n>

捕获请求报文中指定的首部并记录日志
capture request header <name> len <n>
示例:
capture request header X-Forwarded-For len 15

捕获响应报文中指定的首部并记录日志
capture response header <name> len <n>
例子:
capture response header Content-length len 9
capture response header Location len 10

性能调整参数:
maxconn <n> -- 设置每个进程所能接受的最大并发连接
默认是--4000
maxconnrate <n> --设置每个进程每秒钟所能建立的最大连接数
--属于传输层
--一个连接可以发起多个会话
maxsessrate <n> --设置每个进程每秒钟所能建立的最大会话数量
--属于应用层
maxsslconn <n> --每进程支持ssl的最大连接数
spread-checks <0..50,in percent> --健康检测延迟时长百分比,建议2-5之间

配置文件解析:proxies

defaults --为frontend,backend,listen提供默认配置

backend --后端--相当于nginx中的upstream {}
--指定将连接请求转发至后端服务器的相关设置

frontend --前端 --相当于nginx中的server()
--指定接收客户端连接监听套接字设置
相关配置参数:

bind --指定一个或多个前端监听地址和端口
使用格式:frontend|listen
1 bind *:80,*:443 --*可以省略
2 172.20.23.36:80,172.20.23.36:443
3 /run/ssl-frontend.sock user root mode 600 accept-proxy


listen --同时拥有前端和后端-适用于一对一环境
--指定完整的前后端设置
proxy [名称]:使用字母 数字- _ .:并区分字符大小写

mode --默认模式---http

效果展示:
格式:
frontend [名称]
	bind *:80  --指定打开端口/IP
	default_backend websrvs ---把服务反向代理到后端backend
	
backend [名称]
   balance roundrobin 
   server [后端服务器名称] 192.168.23.41:80 check --后端主机
   server [后端服务器名称] 192.168.23.40:80 check
[后端服务器名称] --可随意自定义

 
具体使用:简单配置

frontend web
	bind *:80  
	default_backend httpd
	
backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check
   
[root@www13:37:55~]#for i in {1..10000};do curl 172.20.23.38; sleep 1; done
test RS2 server
test RS1 server


仅仅有一组时可以使用listen
使用格式:
listen httpd
		bind 172.20.23.36:80
		balance roundrobin 
		server srv1 192.168.23.41:80 check 
		server srv2 192.168.23.40:80 check

其它参数:
default_backend <backend> --用于frontend中
没有use_backend匹配时,使用默认的backend,用于frontend中


default-server [param*]
为backend中的各server设定默认选项
用于[defaults|listen|backend]
官网案例:
default-server inter 1000 weight 13

inter 1000 --设置多长时间健康检测-单位毫秒
weight 13 --权重

server段配置:


server <name> <address>:<port> [参数]
相关参数:
weight [n] --权重默认为1
maxconn [n] --当前后端server的最大并发连接数
backlog [n] --当server的连接数达到上限后的排队等待队列长度
backup --设定当前server为准备服务器sorry server
具体设置:
frontend web
	bind 172.20.23.36:80  
	default_backend httpd
	
backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check
   server sorryserver 127.0.0.1:8080 check backup --道歉服务器
道歉服务:
server sorryserver 127.0.0.1 check backup

check:对当前server做健康状态检测,只用于四层检测
addr:检测时使用IP地址
port:针对此端口进行检测
inter <n>:检测之间的时间间隔 默认为2000毫秒
rise <n>:连续多少次检测结果为成功才标记位可用-默认为2次
fall <n>:连续多少次检测结果为失败才标记不可用-默认为3次

tcp检测--传输层
ping检测--网络层
url检测--应用层
定义应用层检测方法:
httpchk|smtpchk|mysql-check|ssl-hello-chk|pgsql-check

disabled:标记为不可用

on-error--后端服务器故障时行动策略
-fastinter --加速检测速率
-fail-check --连续做健康检测
-sudden-death
-mark-down --直接标记为down

redir <prefix> 将发往此server的所有GET和HEAD类的请求重定向至
指定URL
具体用法:
frontend web
	bind 172.20.23.36:80  
	default_backend httpd
	
backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check redir http://172.20.23.36:8080
   
测试需要:
for i in {1..1000};do curl -L  http://172.20.23.36 ; sleep 0.5 ; done

基于cookie会话绑定:

cookie <value> 为当前server指定cookie值 实现基于cookie的会话黏性
首次请求后,服务器会在响应报文中添加cookie给客户端
再次请求时,客户端的请求报文会带有cookie


<name>:cookie名称 用于实现持久连接
rewrite --重写
insert --插入
prefix --前缀
nocache --当客户端和haproxy之间有缓存时 不缓存cookie
indirect 

格式:
cookie <name> [rewrite|insert|prefix] [indirect] [nocache] [postonly]
[preserve] [httponly] [secure] [domain <domain>]* [maxidle <idle>] [maxlife <life>]


具体实现:
frontend web
	bind 172.20.23.36:80
	default_backend httpd

backend httpd
	cookie web insert nocache
	server srv1 192.168.23.41:80 check cookie rs1
	server srv2 192.168.23.40:80 check cookie rs2
	server sorryserver 127.0.0.1:8080 check backup

在curl命令中添加cookie值
curl -b  web=rs1 172.20.23.36

haproxy统计接口启用相关的参数:web页面

启用统计页 基于默认的参数启动 stats page
stats enable 
隐藏版本
stats hide-version 
设置自动刷新时间间隔:
stats refresh <n>
自定义stats page uri 默认值/haproxy?stats
stats uri <xxx>
认证时的realm 示例 stats realm  HAProxy\ Statistics
stats realm <xx>
认证时的账号和密码-可使用多次 默认-no authenticcation
stats auth <user>:<passwd>
启用stats page中的管理功能
stats admin {if|unless} <cond>
具体用法1:
stats admin if TRUE|LOCALHOST
具体管理指令:
Set state to MAINT --维护模式
Set state to DRAIN --逐渐排干净用户
Set state to READY --恢复正常
kill Session --杀死所有会话

页面基本介绍:
Hide 'DOWN' servers --隐藏宕机后端主机
Refresh now --刷新

综合应用:
listen status
	bind 192.168.23.36:80 --绑定内网网卡
	stats enable	      --启用统计页
	stats hide-version    --隐藏版本
	stats refresh 30      --刷新时间间隔   
	stats uri /test       --自定义访问uri
	stats realm  please\ show\ your\ password --提示语句
	stats auth tom:[密码] --账号密码
	stats admin if TRUE   --页面启用管理功能

Queue--队列
Cur--当前
Max-曾经最大峰值
Limit--限制值
Session rate--会话速率
Session--会话数量
Bytes--接收发送量
Denied--拒绝访问
Errors--错误访问
Warning ---警告信息
Server--后端服务器相关信息

工作模式:mode

工作模式:mode
模式类型:
tcp --基于layer4实现代理-可代理mysql|pgsql|ssl等协议
https时使用此模式--默认模式
具体实现:
listen ssh
	bind :22222
	balance roundrobin
	mode tcp
	server ssh1 192.168.23.40:22 check
	server ssh2 192.168.23.41:22 check


http --仅当代理协议为http时使用--centos中haproxt实际的模式模式

health --工作为健康状态检查的响应模式-当连接请求到达时回应"OK"
后即断开连接--较少使用!

基于四层调度mariadb
listen mysql
	bind *:3306
	balance roundrobin
	mode tcp
	server ssh1 192.168.23.36:3306 check
	server ssh2 192.168.23.37:3306 check