HAproxy 实践笔记
Published on 2015 - 07 - 16
HAproxy 实践笔记
内核优化
vi /etc/security/limits.conf
追加如下两行:
* soft nofile 65535
* hard nofile 65535
优化后重启系统,使用ulimit -n
查看并发数,看看是否生效
安装HAproxy
YUM安装
安装EPEL源或HAproxy源后运行安装命令
-y install haproxy
编译安装
yum install gcc gcc-c++
uname -a #查询内核版本
uname -r #查询内核版本
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz
tar -zxvf haproxy-1.5.12.tar.gz -C /usr/src/
cd /usr/src/haproxy-1.5.12/
make TARGET=linux2632 #2632是内核号码
make install
参考配置文件
cd examples/ && ls
增加日志服务器
/etc/rsyslog.conf
在文件最后追加三行如:
$ModLoad imudp
$UDPServerRun 514
l ocal3.* /var/log/haproxy.log
service rsyslog restart
撰写配置文件
创建chroot目录
mkdir /var/haproxy
cat /etc/haproxy/haproxy.cfg
#以下是配置文件内容
global
log 127.0.0.1 local3 info
maxconn 65535
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /var/run/haproxy.pid
ulimit-n 65535
stats socket /var/tmp/stats
defaults
log global
mode http
maxconn 20480
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
stats refresh 30
retries 3
balance roundrobin
cookie SRV
timeout check 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen admin_status #定义HAProxy监控界面
bind 0.0.0.0:6553
mode http
log 127.0.0.1 local3 info
stats enable
stats refresh 5s #监控统计页面自动刷新时间为 5s
stats realm Haproxy\ Statistics #登录监控页面提示符
stats uri /admin?stats #监控页面url路径
stats auth admin:admin #查看HAProxy监控页面的账户与密码
stats hide-version #隐藏HAProxy版本信息
frontend web_serivce #定义终端用户访问的前端服务器
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
option forwardfor
acl inside_src src 192.168.74.0/24 #定义ACL inside_src地址段
use_backend inside_servers if inside_src #定义ACL,如果IP是74.0段,则访问inside_servers
default_backend external_servers #不属于inside_src段的IP 访问external_servers
backend external_servers
mode http
balance roundrobin #轮询真实服务器
option httpchk GET /index.html #检查真实服务器的 index.html 文件,以此判断服务器的健康状态
server web1 192.168.74.128:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1
server web2 192.168.74.130:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1
#cookie:定义后端真实服务器,向cookie信息中插入web1信息,check代表允许对服务器进行
#check inter:健康检查,健康检查时间间隔为2000ms,连续两次健康检查成功,则认为服务器是有效开启的,
# 连续三次健康检查失败后,认为服务器已经宕机
#weight:服务器权重为1(越大越优先)
backend inside_servers
mode http
balance roundrobin
option httpchk GET /index.html
server web3 192.168.74.134:80 cookie web3 check inter 1500 rise 2 fall 3 weight 1
#以上是配置文件内容
启动
haproxy -f /etc/haproxy/haproxy.cfg
设置开机启动
echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" > /etc/rc.local
客户端验证
如果使用192.168.74.0 会访问server3,否则是server1与server2的均衡负载
HAproxy各类参数整理表格
Global | 配置项 | 描述 |
---|---|---|
chroot < jail dir > | 将工作目录切换至<`jail dir`>并执行chroot。该配置可增强 HAProxy 的安全性,但需要使用超级账户启动HAProxy程序 | |
daemon | 配置HAProxy以后台进程模式工作 | |
uid < number > | 配置进程的账户ID,建议设置为HAProxy专用账户 | |
git < unmber > | 配置进程的组ID,建议设置为HAProxy专用组 | |
log < address >< facility > | 配置全局syslog服务器,可以设置两台日志服务器 | |
nbproc < number > | 指定后台进程的数量 | |
pidfile < pidfile > | 将进程ID号写入<`pidfile`>文件 | |
ulimit-n < number > | 设置每个进程的最大文件描述符数量 | |
maxconn < number > | 设置每个进程支持的最大并发数 | |
tune.bufsize < number > | 设置buffer大小,默认值为16384 | |
代理设置 | ||
mode | HAProxy工作模式,可选项为:tcp,http,health | |
timeout check< timeout > | 设置检查超时时间 | |
contimeout < timeout > | 设置连接超时时间 | |
balance roundrobin | 默认均衡负载工作模式,轮询 | |
bind < address >:< port > | 定义一个或多个监听地址或端口 | |
stats auth admin:admin | 设置监控界面的用户名密码 | |
stats refresh |
统计页面刷新间隔时间 | |
option httplog | 使用http日志 | |
cookie < name > | 启用基于cookie的保持连接功能 | |
option forwardfor | 允许插入 X-Forwarded-For 数据包头,给后端真实服务器,可以让后端服务器获得客户端的真实IP地址 | |
option abortonclose | 服务器负载高时,自动关闭队列里处理时间比较长的连接请求 | |
option allbackups | 当后端服务器全部宕机时,是否激活所有备用的服务器,默认仅启动第一个备用服务器 | |
option dontlognull | 不记录连接日志,主要用于不记录健康检查日志 | |
option redispatch | 在HTTP模式,如果使用cookie的服务器宕机,客户端还会坚持连接它,该选项在后端服务器宕机时强制将请求转发给其他健康主机。 | |
monitor-uri < uri > | 检查< uri >文件是否存在,依次判断主机健康状态。 | |
monitor-fail if site_dead | 当服务器宕机时,返回503错误代码,需要定义ACL | |
option httpchk | 使用HTTP协议检查服务器健康状态 | |
retries < value > | 服务器连接失败后的重试次数 | |
timeout client < n > | 设置客户端最大超时时间为 n ,默认单位为毫秒 | |
timeout server < n > | 设置服务器最大超时时间为 n ,默认单位为毫秒 | |
timeout connect < n > | 设置连接最大超时时间为 n,默认单位为毫秒 | |
default_backend | 配置文件中没有 use_backend 规则时,设置默认后端服务器组,服务器组由backend定义 | |
use_backend | 当条件满足时,指定后端服务器组,需要设置ACL | |
acl< name >< criterion > | 定义访问控制列表,配置文件中通过name调用该ACL,常用限制包括:dst(目标地址),dst_port(目标端口),src(源地址),hdr(连接头部信息),path_reg(访问路径匹配正则),url(统一资源定位符) |
再来个HAProxy ACL的配置文件
#以下是配置文件
global
daemon
maxconn 65535
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
acl badboys src 192.168.0.0/24 # 定义ACL控制源地址为192.168.0.0/24
acl example_acl hdr_reg(host) -i ^ (www.example.com|web.example.com) $
#定义ACL控制请求包头信息通过正则匹配 -i 代表不区分大小写
block if badboys #如果badboys地址段访问,禁止
use_backend servers_2 if example_acl #符合example_acl的客户端访问 servers_2
default_backend servers_1 #没有ACL时使用默认服务器组
backend servers_1 #定义后端服务器组 servers_1
server server1 127.0.0.1:8000 maxconn 32 #定义服务器组中的具体服务器
backend servers_2 #定义后端服务器组 servers_s
server server1 127.0.0.1:8000 maxconn 3 #定义服务器组中的具体服务器
#以上是配置文件