Haproxy安装及配置详解与算法Word文档格式.docx
《Haproxy安装及配置详解与算法Word文档格式.docx》由会员分享,可在线阅读,更多相关《Haproxy安装及配置详解与算法Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
而Haproxy
仅仅,而且专门是一款的用于均衡负载的应用代理。
其自身并不能提供http服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。
1.安装
官方版本获取地址:
http:
//haproxy.1wt.eu/,不过官方页面已经打不开了,请自行搜索!
上面中的26是linux系统内核,通过命令#uname-a可查看,我使用的是CentOS
#
tarxzvfhaproxy-1.4.24.tar.gz
#cdhaproxy-1.4.24
makeTARGET=linux26PREFIX=/usr/local/haproxy
makeinstallPREFIX=/usr/local/haproxyb
2.配置
安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。
#cd/usr/local/haproxy
#vihaproxy.cfg
默认文件内容如下:
(注意!
!
标示开始的为默认的配置文件没有的)
CODE:
#thisconfigneedshaproxy-1.1.28orhaproxy-1.2.1
####################全局配置信息####################################
##########参数为进程级,通常和操作系统相关##########################
global
log127.0.0.1local0
log127.0.0.1local1notice
#logloghostlocal0info#日志
maxconn4096#默认最大连接数
chroot/usr/share/haproxy#chroot运行路径
uid99#所属运行的用户uid
gid99#所属运行的用户组
daemon#以后台形式运行haproxy
!
nbproc2#进程数量(可以设置多个进程提高性能)
pidfile/usr/local/haproxy/haproxy.pid#haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
#debug#
#quiet
####################默认的全局设置####################################
##########参数可以被利用配置到frontend,backend,listen组件#############
defaults
logglobal
modehttp#所处理的类别(#7层http;
4层tcp)
optionhttplog#日志类别http日志格式
!
optionhttpclose#每次请求完毕后主动关闭http通道
optiondontlognull#不记录健康检查的日志信息
optionforwardfor#后端服务器需要获得客户端真实ip需配置的参数,可从HttpHeader中获得ip
optionredispatch#serverId对应的服务器挂掉后,强制定向到其他健康的服务器
optionabortonclose#当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
statsrefresh30#统计页面刷新间隔
retries3#3次连接失败就认为服务不可用,也可以通过后面设置
redispatch#当serverid对应的服务器挂掉后,强制定向到其他健康服务器
balanceroundrobin#默认的负载均衡的方式,轮询方式
balancesource#默认的负载均衡的方式,类似nginx的ip_hash
balanceleastconn#默认的负载均衡的方式,最小连接
maxconn2000#最大连接数
contimeout5000#连接超时
clitimeout50000#客户端超时
srvtimeout50000#服务器超时
timeoutcheck2000#心跳检测超时
####################监控页面设置####################################
listenappli1-rewrite0.0.0.0:
10001
cookieSERVERIDrewrite
balanceroundrobin
serverapp1_1192.168.34.23:
8080cookieapp1inst1checkinter2000rise2fall5
serverapp1_2192.168.34.32:
8080cookieapp1inst2checkinter2000rise2fall5
serverapp1_3192.168.34.27:
8080cookieapp1inst3checkinter2000rise2fall5
serverapp1_4192.168.34.42:
8080cookieapp1inst4checkinter2000rise2fall5
listenappli2-insert0.0.0.0:
10002
optionhttpchk
cookieSERVERIDinsertindirectnocache
serverinst1192.168.114.56:
80cookieserver01checkinter2000fall3
serverinst2192.168.114.56:
81cookieserver02checkinter2000fall3
capturecookievgnvisitor=len32
optionhttpclose#disablekeep-alive
rspidel^Set-cookie:
\IP=#donotletthiscookietellourinternalIPaddress
listenappli3-relais0.0.0.0:
10003
dispatch192.168.135.17:
80
listenappli4-backup0.0.0.0:
10004
optionhttpchk/index.html
optionpersist
80checkinter2000fall3
81checkinter2000fall3backup
listenssl-relay0.0.0.0:
8443
optionssl-hello-chk
balancesource
serverinst1192.168.110.56:
443checkinter2000fall3
serverinst2192.168.110.57:
serverback1192.168.120.58:
443backup
listenappli5-backup0.0.0.0:
10005
optionhttpchk*
serverinst3192.168.114.57:
80backupcheckinter2000fall3
capturecookieASPSESSIONlen32
srvtimeout20000
optionhttpclose#disablekeep-alive
optioncheckcache#blockresponseifset-cookie&
cacheable
errorloc502http:
//192.168.114.58/error502.html
errorfile503/etc/haproxy/errors/503.http
####################监控页面的设置#######################
listenadmin_status#Frontend和Backend的组合体,监控组的名称,按需自定义名称
bind0.0.0.0:
65532#监听端口
modehttp#http的7层模式
log127.0.0.1local3err#错误日志记录
statsrefresh5s#每隔5秒自动刷新监控页面
statsuri/admin?
stats#监控页面的url
statsrealmitnihao\itnihao#监控页面的提示信息
statsauthadmin:
admin#监控页面的用户和密码admin,可以设置多个用户名
statsauthadmin1:
admin1#监控页面的用户和密码admin1
statshide-version#隐藏统计页面上的HAproxy版本信息
statsadminifTRUE#手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)
errorfile403/etc/haproxy/errorfiles/403.http
errorfile500/etc/haproxy/errorfiles/500.http
errorfile502/etc/haproxy/errorfiles/502.http
errorfile503/etc/haproxy/errorfiles/503.http
errorfile504/etc/haproxy/errorfiles/504.http
#################HAProxy的日志记录内容设置###################
capturerequestheaderHostlen40
capturerequestheaderContent-Lengthlen10
capturerequestheaderRefererlen200
captureresponseheaderServerlen40
captureresponseheaderContent-Lengthlen10
captureresponseheaderCache-Controllen8
#######################网站监测listen配置#####################
###########此用法主要是监控haproxy后端服务器的监控状态############
listensite_status
1081#监听端口
modehttp#http的7层模式
log127.0.0.1local3err#[errwarninginfodebug]
monitor-uri/site_status#网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503
aclsite_deadnbsrv(server_web)lt2#定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
aclsite_deadnbsrv(server_blog)lt2
aclsite_deadnbsrv(server_bbs)lt2
monitorfailifsite_dead#当满足策略的时候返回503,网上文档说的是500,实际测试为503
monitor-net192.168.16.2/32#来自192.168.16.2的日志信息不会被记录和转发
monitor-net192.168.16.3/32
########frontend配置可以定义多个acl进行匹配操作########
frontendhttp_80_in
80#监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似
logglobal#应用全局的日志配置
optionhttplog#启用http的log
optionhttpclose#每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式
optionforwardfor#如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从HttpHeader中获得客户端IP
########acl策略配置#############
aclitnihao_webhdr_reg(host)-i^(|)$
#如果请求的域名满足正则表达式中的2个域名返回true-i是忽略大小写
aclitnihao_bloghdr_dom(host)-i
#如果请求的域名满足返回true-i是忽略大小写
#aclitnihaohdr(host)-i
#aclfile_requrl_sub-ikillall=
#在请求url中包含killall=,则此控制策略返回true,否则为false
#acldir_requrl_dir-iallow
#在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false
#aclmissing_clhdr_cnt(Content-length)eq0
#当请求的header中Content-length等于0时返回true
########acl策略匹配相应#############
#blockifmissing_cl
#当请求中header中Content-length等于0阻止请求返回403
#blockif!
file_req||dir_req
#block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求
use_backendserver_webifitnihao_web
#当满足itnihao_web的策略时使用server_web的backend
use_backendserver_blogifitnihao_blog
#当满足itnihao_blog的策略时使用server_blog的backend
#redirectprefixcode301ifitnihao
#当访问的时候,用http的301挑转到http:
//192.168.16.3
default_backendserver_bbs
#以上都不满足的时候使用默认server_bbs的backend
##########backend的设置##############
######################backendserver_web#############################
backendserver_web
balanceroundrobin#负载均衡的方式,roundrobin平均方式
cookieSERVERID#允许插入serverid到cookie中,serverid后面可以定义
optionhttpchkGET/index.html#心跳检测的文件
serverweb1192.168.16.2:
80cookieweb1checkinter1500rise3fall3weight1
#服务器定义,cookie1表示serverid为web1,checkinter1500是检测心跳频率rise3是3次正确认为服务器可用,
#fall3是3次失败认为服务器不可用,weight代表权重
serverweb2192.168.16.3:
80cookieweb2checkinter1500rise3fall3weight2
#服务器定义,cookie1表示serverid为web2,checkinter1500是检测心跳频率rise3是3次正确认为服务器可用,
#########################backendserver_blog########################################
backendserver_blog
serverblog1192.168.16.2:
80cookieblog1checkinter1500rise3fall3weight1
#服务器定义,cookie1表示serverid为web1,checkinter1500是检测心跳频率rise3是3次正确认为服务器可用,fall3是3次失败认为服务器不可用,weight代表权重
serverblog2192.168.16.3:
80cookieblog2checkinter1500rise3fall3weight2
#服务器定义,cookie1表示serverid为web2,checkinter1500是检测心跳频率rise3是3次正确认为服务器可用,fall3是3次失败认为服务器不可用,weight代表权重
###################################backenderver_bbs####################################
backendserver_bbs
serverbbs1192.168.16.2:
80cookiebbs1checkinter1500rise3fall3weight1
serverbbs2192.168.16.3:
80cookiebbs2checkinter1500rise3fall3weight2
#服务器定义,cookie1表示serverid为web2,checkinter1500是检测心跳频率rise3是3次正确认为服务器可用,fall3是3次失败认为服务器不可用,weight代表权重
根据实际需求,更改配置文件,我的配置如下
3.加上日志支持
是根据上面的global和default里的log配置
#vim/etc/syslog.conf
在最下边增加
local3.*/var/log/hapro