2015年(68)
分类: 系统运维
2015-08-31 18:54:48
简介
HAProxy是一款开源的软件,支持4-7层交换,可作为高可用性、负载均衡以及基于TCP和HTTP应用的代理。支持高并发,特别适用于那些负载特大、需要会话保持或七层处理的web站点。
架构图如下:
想了解更详细可到官网上看, style="font-size:14px;">
安装:
//下载
[root@localhost]cd /opt
[root@localhost]wget
//安装
[root@localhost opt]# tar zxf haproxy-1.4.21.tar.gz
[root@localhost opt]# cd haproxy-1.4.21
[root@localhost haproxy-1.4.21]# uname -a
Linux localhost.localdomain 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost haproxy-1.4.21]# make TARGET=linux26 PREFIX=/usr/local/haproxy
[root@localhost haproxy-1.4.21]# make install PREFIX=/usr/local/haproxy
[root@localhost haproxy-1.4.21]# ls /usr/local/haproxy
doc sbin share
//创建目录用于放置pid、配置文件等,以方便管理
[root@localhost haproxy-1.4.21]# mkdir -p /usr/local/haproxy/etc //放配置文件
[root@localhost haproxy-1.4.21]# mkdir -p /usr/local/haproxy/run //放pid文件
[root@localhost haproxy-1.4.21]# mkdir -p /usr/local/haproxy/log //放日志文件
配置:
HAProxy的配置主要可分为三个部份
globlal:参数是进程级的,通常和操作系统(OS)相关
defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
(frontent/backend)或是listen:listen是frontent与backend的组合体,frontend-接收请求的前端虚拟节点,可以根据规则直接指定具体使用后端的 backend;backend-后端服务集群的配置,对应一个或多个服务器
// 使用listen还是(frontent/backend)
这个我觉得见仁见智了,listen是frontent与backend的组合体,配置会比(frontent/backend)精简很多,但是(frontent/backend)相比于listen,结构会更清晰有条理,而且易于理解,在刚开始配置使用haproxy,我个人更倾向于(frontent/backend)。
//示例结构
server1:80(192.168.22.238)
/
--->|haproxy (192.168.22.240)|
\
server2:81(192.168.22.239)
//示例配置
#---------- ------------------------------- global -----------------------------------------------------
global
log 127.0.0.1:514 local0 info #日志配置
maxconn 4096 #最大连接数
user nobody #运行haproxy的用户
group nobody #运行haproxy的组
daemon #以后台模式运行
nbproc 1 #fork的进程数,为便于调试,默认为1
pidfile /opt/haproxy/logs/haproxy.pid #pid文件
#---------- ------------------------------- defaults -----------------------------------------------------
defaults
mode http #模式 { tcp(4层)|http(7层)|health(只返回OK) }
option httplog #采用http日志格式
retries 3 #连接失败重试次数,三次连接失败就认为是服务器不可用
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
maxconn 4096 #默认的最大连接,负载过高时,自动结束掉当前队列处理比较久的链接
contimeout 5000 #连接超时时间
clitimeout 30000 #客户端超时时间
srvtimeout 30000 #服务器超时
timeout check 2000 #=心跳检测超时
#(注:参数值为时间为的参数,默认单位为毫秒(ms),可以加后缀来使用其他的单位如us(微秒)、s(秒)、m(分)、h(小时)、d(天))
#---------- ----------------------------统计页面配置 -------------------------------------------------
listen admin_stats
bind 0.0.0.0:1080 #监听端口
mode http #http的7层模式
log 127.0.0.1 local0 err #日志设置
stats refresh 30s #统计页面自动刷新时间
stats uri /admin?stats #统计页面url
stats realm Gemini\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin~!@ #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
#---------- ----------------------------网站检测listen定义-------------------------------------------------
listen site_status
bind 0.0.0.0:1081
mode http
log 127.0.0.1 local0 err #[err warning info debug]
monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回500
#定义网站down时的策略,当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
acl site_dead nbsrv(www_server) lt 1
#当满足策略的时候返回500
monitor fail if site_dead
#如果192.168.0.101或者192.168.0.102这两台机器挂了,认为网站挂了,这时候返回500,判断标准是如果mode是http,返回200认为是正常的,如果mode是tcp认为端口畅通是好的
monitor-net 192.168.0.101/31
#---------- ----------------------------frontend配置-------------------------------------------------
frontend http_80_in
bind 0.0.0.0:80 #监听端口
mode http #http的7层模式
log global #应用全局的日志配置
option httplog #启用http的log
option httpclose #每次请求完毕后主动关闭http通道,即不使用keep-alive模式
option forwardfor #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP
#---------- -------------------------日志记录内容配置-------------------------------------------------
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8
##########backend的设置##############
backend www_server
mode http #http的7层模式
balance roundrobin #负载均衡的方式,roundrobin平均方式
cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义
#心跳检测的URL,HTTP/1.1¥r¥nHost:XXXX,指定了心跳检测HTTP的版本,XXX为检测时请求
#服务器的request中的域名是什么,这个在应用的检测URL对应的功能有对域名依赖的话需要设置
option httpchk GET /index.php HTTP/1.1\r\nHost:192.168.22.240
#服务器定义,cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
server app1 192.168.22.238:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1
server app2 192.168.22.239:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2
日志支持:
测试系统为 rehl 6
[root@localhost]#vi/etc/rsyslog.conf
添加:
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
起用:
$Modload imudp.so
$UDPServerRUN 514
[root@localhost]# service rsyslog restart //重启rsyslog服务
启动、测试:
//检测配置是否有错
[root@localhost]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg -c
//启动
[root@localhost]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
//登录到haproxy的状态页面