- haproxy基础配置
- 安装
- 日志配置
- 配置结构
- 配置示例
haproxy基础配置
安装
- yum 安装
yum install haproxy
- 编译安装
tar -xzvf haproxy-1.3.20.tar.gz
make TARGET=linux26 PREFIX=/usr/local/haproxy install
#注:TARGET后面根据本机操作系统内核版本来填写
- 启动
haproxy -f /etc/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid`
日志配置
haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件
global
log 127.0.0.1 local3 #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别
maxconn 1024
user haproxy
group haproxy
daemon pidfile /var/run/haproxy.pid
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8 retries 2
option redispatch
maxconn 1024
编辑系统日志配置
vim /etc/rsyslog.conf
#默认有下面的设置,会读取 /etc/rsyslog.d/*.conf目录下的配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
为haproxy创建一个独立的配置文件
vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
#如果不加下面的的配置则除了在/var/log/haproxy.log中写入日志外,也会写入message文件
配置rsyslog的主配置文件,开启远程日志
vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=”-c 2 -r -m 0″
#-c 2 使用兼容模式,默认是 -c 5
#-r 开启远程日志
#-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
重启haproxy和rsyslog服务
/etc/init.d/rsyslog restart
haproxy -f /etc/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid`
配置结构
- HAProxy配置中分五大部分:
global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用
frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理
backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块
listen:我将其理解为frontend和backend
配置示例
global
log 127.0.0.1 local2
#定义日志输出的名字
chroot /var/haproxy
#chroot运行的路径,增加安全性
uid 99
#程序运行的用户id
gid 99
#程序运行的用户组id
daemon
#以后台形式运行haproxy
nbproc 1
#number of process进程数量,不建议修改
pidfile /var/run/haproxy.pid
#haproxy的pid存放路径
defaults
mode http
# mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测,返回OK
option dontlognull
# 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
option redispatch
# 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
option abortonclose
# 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option httpclose
# 这个参数我是这样理解的:使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除,如果该值为空将会添加为:Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关闭,连接就会一直处于打开,直到超时。
log global
#记录日志
#启用服务器端关闭
option forwardfor except 127.0.0.0/8
#传递客户端ip
option redispatch
#当服务器组中的某台设备故障后,自动将请求重定向到组内其他主机。
retries 3
# 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
timeout connect 5000
# 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容
timeout client 3000
# 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容
timeout server 3000
# 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容
timeout http-request 10s
# http请求超时时间
timeout queue 1m
#一个请求在队列里的超时时间
timeout connect 10s
#连接服务器超时时间
timeout client 1m
#设置客户端侧最大非活动时间
timeout server 1m
#设置服务器侧最大非活动时间
timeout http-keep-alive 10s
#设置http-keep-alive的超时时间
timeout check 10s
#当一个连接建立之后
maxconn 3000
#同时处理的最大连接数
#启用stats查看,认证等功能:
#默认在/haproxy?stats
#打开haproxy监控页面
listen stas #自定义监听名,任意取
bind *:1099
#监听的地址和端口
mode http
#模式七层负载
stats enable
#启用状态监控
stats hide-version
#隐藏软件版本号
stats auth admin:admin
#登陆用户名和密码
stats realm HAproxy\ stats
#提示信息,空格之前加\
stats admin if TRUE
#当通过认证才可管理
stats uri /stats
#访问路径
stats refresh 20s
#页面自动刷新间隔
stats hide-version
#隐藏haproxy版本信息
stats auth haproxy:system
#用户名和密码 stats hide-version
stats admin if TRUE
#是否可以手动启动和停止服务
# 四层负载
listen tcp_ws_8080 #自定义监控名称
option tcplog #日志模式采用tcp方式
mode tcp #四层负载
bind 0.0.0.0:8080 # 监听8080
server 10.0.8.34:8080 10.0.8.34:8080 #转发到10.0.8.34:8080
frontend main_80 *:80
mode http
# mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测,返回OK
log global
# 继承global中log的定义
option forwardfor
# 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP
option accept-invalid-http-request
#如果url中有汉字的话要加入这个选项表示可以接受否则汇报错误 402
acl is_kddfd_miaosha hdr_beg(host) -i www.kddfd.com
#判断请求域名是不是www.kddfd.com.cn
backend erp_server
#健康检查
option httpchk GET /kkk/jsp/login/login.jsp
# 检查后端服务器的URL,如果返回httpcode为200表示正常
#option httpchk
# 只是检查后端的端口是否正常可以打开
option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www.xxx.com
#负载调度算法
#balance roundrobin
# 负载表示按照权重进行随即分配
#balance source
#对ip进行hash计算后得到一个IP下次该ip来的时候将直接进入原来的服务器
balance leastconn
#适用于长连接的会话,新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的
server 80.66.40.90:8888 80.66.40.90:8888 check inter 10000 rise 1 fall 3 weight 1
server 10.0.8.223:8888 10.0.8.223:8888 check inter 10000 rise 1 fall 3 weight 1
server 10.0.8.155:8888 10.0.8.155:8888 check inter 10000 rise 1 fall 3 weight 1
# 使用server关键字来设置后端服务器;为后端服务器所设置的内部名称[10.0.8.223:8888/10.0.8.155:8888],该名称将会呈现在日志或警报中、后端服务器的IP地址,支持端口映射[80.66.40.90:8888]接受健康监测[check]、监测的间隔时长,单位毫秒[inter 2000]、监测正常多少次后被认为后端服务器是可用的[rise 1]、监测失败多少次后被认为后端服务器是不可用的[fall 3]、分发的权重[weight 1]