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默认就是haproxy BASENAME=`basename $0` if [ -L $0 ]; then BASENAME=`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_back backend 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 30 backend 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 admin stats 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
版权声明:博主文章,可以不经博主允许随意转载,随意修改,知识是用来传播的。