HAProxy配置使用说明.docx
《HAProxy配置使用说明.docx》由会员分享,可在线阅读,更多相关《HAProxy配置使用说明.docx(13页珍藏版)》请在冰豆网上搜索。
![HAProxy配置使用说明.docx](https://file1.bdocx.com/fileroot1/2023-1/29/b2ba8a8f-d7b6-4def-ad62-23bc74eda2d2/b2ba8a8f-d7b6-4def-ad62-23bc74eda2d21.gif)
HAProxy配置使用说明
HAProxy配置使用说明
摘要:
HAProxy-可靠、高性能的TCP/HTTP负载均衡器.这个是必学的.
简介:
软件负载均衡一般通过两种方式来实现:
基于操作系统的软负载实现和基于第三方应用的软负载实现。
LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。
当前,HAProxy支持两种主要的代理模式:
"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。
在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。
7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
详情可以在HAProxy官方网站(http:
//haproxy.1wt.eu)可以下载配置说明文档(configuration.txt)和架构文件(architecture.txt)作为参考。
1.HAProxy的安装
在“http:
//haproxy.1wt.eu/#down”下载HAProxy的源码包。
这里以1.3.20版本,安装在目录/home/admin/haproxy为例
解压下载的源码包
tar-xzvfhaproxy-1.3.20.tar.gz
2.编译安装
进入解压后的源码目录
makeTARGET=linux26PREFIX=/home/admin/haproxyinstall
(注意,TARGET后面根据本机操作系统内核版本来填写,PREFIX是要安装到的目录)
安装完成后会在安装目录下生成doc,sbin,share三个文件夹。
解压的源码文件也可以删除掉。
3.创建配置文件
在安装目录下建立配置文件目录
mkdirconf
在新创建的目录下创建配置文件
vihaproxy.cfg
在创建的haproxy.cfg文件中填入
global
log127.0.0.1local0info#[errwarninginfodebug]
maxconn4096
useradmin
groupadmin
daemon
nbproc1
pidfile/home/admin/haproxy/logs/haproxy.pid
defaults
maxconn2000
contimeout5000
clitimeout30000
srvtimeout30000
listenadmin_stats
bind0.0.0.0:
1080
modehttp
log127.0.0.1local0err
statsuri/admin?
stats
这个配置是能让HAProxy工作起来的最小配置
4.启动HAProxy
进入安装目录下的sbin目录
启动HAProxy
./haproxy-f../conf/haproxy.cfg
通过浏览器访问“http:
//xxx.xxx.xxx.xxx:
1080/admin?
stats“(xxx为IP),看到管理页面
5.修改haproxy启动文件权限
(如果你是用ROOT用户启动HAProxy,这步可以省略,这个步骤是为了能让非ROOT用户也能通过HAProxy监听80端口,因为LIUNX的80端口一定要使用ROOT账户启动)
使用root账户进入sbin目录
更改haproxy的所有者为root
chownroot:
roothaproxy
给haproxy增加S权限
chmodu+shaproxy
6.配置日志
创建日志目录
使用非root账户这里是admin账户创建日志文件
mkdir/home/admin/haproxy/logs
修改操作系统的日志配置
HAProxy可以收集本机及其他后端服务器日志,但是需要在HAProxy和操作系统上作一些配置。
使用root账户首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m0”修改为SYSLOGD_OPTIONS="-m0-r-x",支持收集远程服务器日志。
然后修改/etc/syslog.conf,增加如下语句:
local0.*/home/admin/haproxy/logs/haproxy.log//haproxy.log地址代表了需要存储日志的地址,其中local0这个级别要和haproxy.cfg配置的log级别一样
执行servicesyslogrestart,重新启动系统日志器
更改日志文件用户
chownadmin:
admin/home/admin/haproxy/logs/haproxy.log
7.创建启动/停止脚本(如果你认为现在的启动脚本已经够方便了,这步可以省略)
为了方便以后启动或停止,所以编写一个启动脚本
在sbin目录下创建hactl.sh
vihactl.sh
填入一下内容
#!
/bin/sh#
cd`dirname$0`/..
BASE_DIR="`pwd`"
ARGV="$@"
start()
{
echo"STARTHAPoxySERVERS"
$BASE_DIR/sbin/haproxy-f$BASE_DIR/conf/haproxy.cfg
}
stop()
{
#haproxy.pid的路径是haproxy.cfg文件中配置的
echo"STOPHAPoxyListen"
kill-TTOU$(cat$BASE_DIR/logs/haproxy.pid)
echo"STOPHAPoxyprocess"
kill-USR1$(cat$BASE_DIR/logs/haproxy.pid)
}
case$ARGVin
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo"hactl.sh[start|restart|stop]"
esac
exit$ERROR
保存后,给hactl.sh增加可执行权限
chmod755hactl.sh
这样就可以使用./hactl.sh[start|restart|stop]的方式启动,关闭,重启了,如果你使用的目录和例子中不一样的话,需要自己对应的修改下以上脚本的目录地址
经过以上1-6步骤以后HAProxy的安装已经结束,之后就是详细的配置下haproxy.cfg文件了
2.HAProxy的配置
HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。
global:
参数是进程级的,通常和操作系统(OS)相关。
这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults:
配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
frontend:
接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择)。
backend:
后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
listen:
Frontend和Backend的组合体。
下面是HAProxy的一些常用的配置,这个配置是用来说明HAProxy的一些常用功能的配置,具体详细配置请查看安装目录下的doc目录下的文档文件,或者到”http:
//cn.haproxy.org/”
下载中文配置说明文档
配置文件例子:
global
#全局的日志配置其中日志级别是[errwarninginfodebug]
#local0是日志设备,必须为如下24种标准syslog设备的一种:
#kernusermaildaemonauthsysloglprnews
#uucpcronauth2ftpntpauditalertcron2
#local0local1local2local3local4local5local6local7
#但是之前在/etc/syslog.conf文件中定义的是local0所以
#这里也是用local0
log127.0.0.1local0info#[errwarninginfodebug]
#最大连接数
maxconn4096
#用户
useradmin
#组
groupadmin
#使HAProxy进程进入后台运行。
这是推荐的运行模式
daemon
#创建4个进程进入deamon模式运行。
此参数要求将运行模式设置为"daemon"
nbproc4
#将所有进程的pid写入文件启动进程的用户必须有权限访问此文件。
pidfile/home/admin/haproxy/logs/haproxy.pid
defaults
#默认的模式mode{tcp|http|health},tcp是4层,http是7层,health只会返回OK
modehttp
#采用http日志格式
optionhttplog
#三次连接失败就认为是服务器不可用,也可以通过后面设置
retries3
如果cookie写入了serverId而客户端不会刷新cookie,
#当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
optionredispatch
#当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
optionabortonclose
#默认的最大连接数
maxconn4096
#连接超时
contimeout5000
#客户端超时
clitimeout30000
#服务器超时
srvtimeout30000
#=心跳检测超时
timeoutcheck2000
#注:
一些参数值为时间,比如说timeout。
时间值通常单位为毫秒(ms),但是也可以通过加#后缀,来使用其他的单位。
#-us:
microseconds.1microsecond=1/1000000second
#-ms:
milliseconds.1millisecond=1/1000second.Thisisthedefault.
#-s:
seconds.1s=1000ms
#-m:
minutes.1m=60s=60000ms
#-h:
hours.1h=60m=3600s=3600000ms
#-d:
days.1d=24h=1440m=86400s=86400000ms
########统计页面配置############
listenadmin_stats
#监听端口
bind0.0.0.0:
1080
#http的7层模式
modehttp
#日志设置
log127.0.0.1local0err#[errwarninginfodebug]
#统计页面自动刷新时间
statsrefresh30s
#统计页面url
statsuri/admin?
stats
#统计页面密码框上提示文本
statsrealmGemini\Haproxy
#统计页面用户名和密码设置
statsauthadmin:
admin
statsauthadmin1:
admin1
#隐藏统计页面上HAProxy的版本信息
statshide-version
#######网站检测listen定义############
listensite_status
bind0.0.0.0:
1081
modehttp
log127.0.0.1local0err#[errwarninginfodebug]
#网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回500
monitor-uri/site_status
#定义网站down时的策略
#当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
aclsite_deadnbsrv(denali_server)lt1
aclsite_deadnbsrv(tm_server)lt1
aclsite_deadnbsrv(mms_server)lt1
#当满足策略的时候返回500
monitorfailifsite_dead
#如果192.168.0.252或者192.168.0.31这两天机器挂了
#认为网站挂了,这时候返回500,判断标准是如果mode是
#http返回200认为是正常的,如果mode是tcp认为端口畅通是好的
monitor-net192.168.0.252/31
########frontend配置############
frontendhttp_80_in
#监听端口
bind0.0.0.0:
80
#http的7层模式
modehttp
#应用全局的日志配置
logglobal
#启用http的log
optionhttplog
#每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式
optionhttpclose
#如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从HttpHeader中
#获得客户端IP
optionforwardfor
###########HAProxy的日志记录内容配置##########
capturerequestheaderHostlen40
capturerequestheaderContent-Lengthlen10
capturerequestheaderRefererlen200
captureresponseheaderServerlen40
captureresponseheaderContent-Lengthlen10
captureresponseheaderCache-Controllen8
####################acl策略定义#########################
#如果请求的域名满足正则表达式返回true-i是忽略大小写
acldenali_policyhdr_reg(host)-i^(||)$
#如果请求域名满足返回true-i是忽略大小写
acltm_policyhdr_dom(host)-i
##在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
aclinvalid_requrl_sub-isip_apiname=
##在请求url中存在timetask作为部分地址路径,则此控制策略返回true,否则返回false
acltimetask_requrl_dir-itimetask
#当请求的header中Content-length等于0时返回true
aclmissing_clhdr_cnt(Content-length)eq0
######################acl策略匹配相应###################
##当请求中header中Content-length等于0阻止请求返回403
blockifmissing_cl
##block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,或者满足策略timetask_req,则阻止请求。
blockif!
invalid_req||timetask_req
#当满足denali_policy的策略时使用denali_server的backend
use_backenddenali_serverifdenali_policy
#当满足tm_policy的策略时使用tm_server的backend
use_backendtm_serveriftm_policy
#reqisetbe关键字定义,根据定义的关键字选择backend
reqisetbe^Host:
\imgdynamic
reqisetbe^[^\]*\/(img|css)/dynamic
reqisetbe^[^\]*\/admin/statsstats
#以上都不满足的时候使用默认mms_server的backend
default_backendmms_server
#HAProxy错误页面设置
errorfile400/home/admin/haproxy/errorfiles/400.http
errorfile403/home/admin/haproxy/errorfiles/403.http
errorfile408/home/admin/haproxy/errorfiles/408.http
errorfile500/home/admin/haproxy/errorfiles/500.http
errorfile502/home/admin/haproxy/errorfiles/502.http
errorfile503/home/admin/haproxy/errorfiles/503.http
errorfile504/home/admin/haproxy/errorfiles/504.http
##########backend的设置##############
backendmms_server
#http的7层模式
modehttp
#负载均衡的方式,roundrobin平均方式
balanceroundrobin
#允许插入serverid到cookie中,serverid后面可以定义
cookieSERVERID
#心跳检测的URL,HTTP/1.1¥r¥nHost:
XXXX,指定了心跳检测HTTP的版本,XXX为检测时请求
#服务器的request中的域名是什么,这个在应用的检测URL对应的功能有对域名依赖的话需要设置
optionhttpchkGET/member/login.jhtmlHTTP/1.1\r\nHost:
#服务器定义,cookie1表示serverid为1,checkinter1500是检测心跳频率
#rise3是3次正确认为服务器可用,fall3是3次失败认为服务器不可用,weight代表权重
servermms110.1.5.134:
80cookie1checkinter1500rise3fall3weight1
servermms210.1.6.118:
80cookie2checkinter1500rise3fall3weight2
backenddenali_server
modehttp
#负载均衡的方式,source根据客户端IP进行哈希的方式
balancesource
#但设置了backup的时候,默认第一个backup会优先,设置optionallbackups后
#所有备份服务器权重一样
optionallbackups
#心跳检测URL设置
optionhttpchkGET/mytaobao/home/my_taobao.jhtmlHTTP/1.1\r\nHost:
#可以根据机器的性能不同,不使用默认的连接数配置而使用自己的特殊的连接数配置
#如minconn10maxconn20
serverdenlai110.1.5.114:
80minconn4maxconn12checkinter1500rise3fall3
serverdenlai210.1.6.104:
80minconn10maxconn20checkinter1500rise3fall3
#备份机器配置,正常情况下备机不会使用,当主机的全部服务器都down的时候备备机会启用
serverdnali-back110.1.7.114:
80checkbackupinter1500rise3fall3
serverdnali-back210.1.7.114:
80checkbackupinter1500rise3fall3
backendtm_server
modehttp
#负载均衡的方式,leastconn根据服务器当前的请求数,取当前请求数最少的服务器
balanceleastconn
optionhttpchkGET/trade/itemlist/prepayCard.htmHTTP/1.1\r\nHost:
trade.gemini.taobao.ne
servertm110.1.5.115:
80checkinter1500rise3fall3
servertm210.1.6.105:
80checkinter1500rise3fall3
######reqisetbe自定义关键字匹配backend部分#######################
backenddynamic
modehttp
balancesource
optionhttpchkGET/welcome.htmlHTTP/1.1\r\nHost:
serverdenlai110.3.5.114:
80checkinter1500rise3fall3
serverdenlai210.4.6.104:
80checkinter1500rise3fall3
backendstats
modehttp
balancesource
optionhttpchkGET/welcome.htmlHTTP/1.1\r\nHost:
serverdenlai110.5.5.114:
80checkinter1500rise3fall3
serverdenlai210.6.6.104:
80checkinter1500rise3fall3
3.HA-Proxy的压力测试结果
简单的压力测试采用Apacheab,