首页 > 代码库 > centos7下haproxy1.7的使用与配置

centos7下haproxy1.7的使用与配置

centos7下haproxy1.7的使用与配置

haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

一、haproxy下载

http://www.haproxy.org/#down

如:haproxy-1.7.2.tar.gz

 

二、安装haproxy

查看内核版本

> uname -r

解压haproxy,并安装

> tar xf haproxy-1.7.2.tar.gz> cd haproxy-1.7.2> make TARGET=linux2628 PREFIX=/data/haproxy> make install PREFIX=/data/haproxy

安装成功后,查看版本

> /data/haproxy/sbin/haproxy -v

复制haproxy文件到/usr/sbin下
因为下面的haproxy.init启动脚本默认会去/usr/sbin下找,当然你也可以修改,不过比较麻烦。

> cp /data/haproxy/sbin/haproxy /usr/sbin/

复制haproxy脚本,到/etc/init.d下

> cp ./examples/haproxy.init /etc/init.d/haproxy> chmod 755 /etc/init.d/haproxy

我们可以查看一下这个haproxy.init文件

#$BASENAME默认就是haproxyBASENAME=`basename $0`if [ -L $0 ]; thenBASENAME=`find $0 -name $BASENAME -printf %l`BASENAME=`basename $BASENAME`fi#执行文件路径BIN=/usr/sbin/$BASENAME#配置文件路径CFG=/etc/$BASENAME/$BASENAME.cfg#pid文件路径PIDFILE=/var/run/$BASENAME.pid#锁文件路径LOCKFILE=/var/lock/subsys/$BASENAME

创建系统账号

> useradd -r haproxy

创建配置文件

> mkdir /etc/haproxy> vi /etc/haproxy/haproxy.cfg
#全局配置global    #设置日志    log 127.0.0.1 local3 info    chroot /data/haproxy    #用户与用户组    user haproxy    group haproxy    #守护进程启动    daemon    #最大连接数    maxconn 4000#默认配置defaults    log global    mode http    option httplog    option dontlognull    timeout connect 5000    timeout client 50000    timeout server 50000#前端配置,http_front名称可自定义frontend http_front    bind *:80    #haproxy的状态管理页面,通过/haproxy?stats来访问    stats uri /haproxy?stats    default_backend http_back#后端配置,http_back名称可自定义backend http_back    #负载均衡方式    #source 根据请求源IP    #static-rr 根据权重    #leastconn 最少连接者先处理    #uri 根据请求的uri    #url_param 根据请求的url参数    #rdp-cookie 据据cookie(name)来锁定并哈希每一次请求    #hdr(name) 根据HTTP请求头来锁定每一次HTTP请求    #roundrobin 轮询方式    balance roundrobin    #设置健康检查页面    option httpchk GET /index.html    #传递客户端真实IP    option forwardfor header X-Forwarded-For    # inter 2000 健康检查时间间隔2秒    # rise 3 检测多少次才认为是正常的    # fall 3 失败多少次才认为是不可用的    # weight 30 权重    server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30    server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30

打开rsyslog配置

> vi /etc/rsyslog.conf

去掉下面两行前面的#号

$ModLoad imudp$UDPServerRun 514

并添加下面一行

local3.* /var/log/haproxy.log

重启rsyslog

> systemctl restart rsyslog

启动haproxy

> service haproxy start

  

三、haproxy的acl规则

frontend http_front    bind *:80    stats uri /haproxy?stats    #创建一个acl,is_http_back2是acl的名称,可自定义,用于判断主机名是否为www.back2.com    acl is_http_back2 hdr_end(host) www.back2.com    #通过正则判断主机名中是否为bbs.back.com或forum.back.com    acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com)    #判断ua是否为android    acl is_ua_android hdr_reg(User-Agent) -i android    #判断主机名开头是否为img.或css.或js.    acl is_host_static hdr_beg(host) -i img. css. js.    #判断url路径中是否有/bbs    acl is_path_bbs path_beg -i /bbs    #判断url文件结尾    acl is_php path_end -i .php    #通过正则判断url中结尾以    acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$    #效果同上    acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif    #如果主机名是www.back2.com那么就使用后端http_back2    use_backend http_back2 if is_http_back2    #默认使用的后端    default_backend http_backbackend http_back    balance roundrobin    option httpchk GET /index.html    option forwardfor header X-Forwarded-For    server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30backend http_back2    balance roundrobin    option httpchk GET /index.html    option forwardfor header X-Forwarded-For    server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30

  

四、haproxy的动态管理

在/etc/haproxy/haproxy.cfg的global配置中添加如下项:

stats socket /data/haproxy/haproxy.sock mode 600 level adminstats timeout 2m

安装socat工具

> yum install socat

查看帮助

> echo "help" | socat stdio /data/haproxy/haproxy.sock

查看信息

> echo "info" | socat stdio /data/haproxy/haproxy.sock

关闭后台主机

> echo "disable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock

打开后台主机

> echo "enable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock

  

五、可调优的参数

配置端口可用范围

> cat /proc/sys/net/ipv4/ip_local_port_range

配置端口复用

> cat /proc/sys/net/ipv4/tcp_tw_reuse

修改timeout的时间(不建议修改)

> cat /proc/sys/net/ipv4/tcp_fin_timeout

  

centos7下haproxy1.7的使用与配置