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   #定义服务器组中的具体服务器

#以上是配置文件