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

  

centos7下haproxy1.7的使用与配置的更多相关文章

  1. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  2. CentOS7下安装MySQL5.7安装与配置(转)

    原文地址:http://www.centoscn.com/mysql/2016/0626/7537.html 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在M ...

  3. centos7下/etc/rc.local文件里配置的开机启动项不执行的解决办法

    习惯于在/etc/rc.local文件里配置我们需要开机启动的服务,这个在centos6系统下是正常生效的.但是到了centos7系统下,发现/etc/rc.local文件里的开机启动项不执行了!仔细 ...

  4. CentOS7下搭建Nginx+PHP7的安装配置

    一.安装编译工具及库文件: yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 环境要求 nginx是C ...

  5. CentOS7下安装MySQL5.7安装与配置(YUM)

    http://blog.csdn.net/xyang81/article/details/51759200 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在My ...

  6. CentOS7下SVN server的安装与配置

    CentOS7通过yum install命令进行安装SVN(参考:http://subversion.apache.org/packages.html#centos) $ yum install su ...

  7. CentOS7下安装Nexus私服及基础配置

    环境准备 VMware上安装CentOS7 XShell/Xftp NexusOSS-3.10 jdk1.8 安装 使用root用户登录,将安装包均放置在/usr/local文件夹下 使用Xshell ...

  8. CentOS7下MySQL8的二进制基本安装配置

    前言 基于本地Centos7.6虚拟机Mysql8的配置(亲测有效) 一.安装前的准备 1.到官网下载mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz 2.通过Xs ...

  9. CentOS7下安装MySQL的安装与配置(yum) (转)

    原文链接:http://www.centoscn.com/mysql/2016/0626/7537.html 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mys ...

随机推荐

  1. Spring STS Call Hierarchy 查找不到被调用的信息

    今天使用Spring的STS的时候,发现Call  Hierarchy无法使用,很奇怪,发现问题出现在同一个工作区间里,如果工作区间不在此工作区间,发现还是可以找到被调用的信息的.当时在网上找也没找到 ...

  2. python模块os

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

  3. [Shell]Bash基本功能:历史命令 & 别名 & Bash快捷键

    /*----------------------------------------------------------------------------------------------- @黑 ...

  4. http post 接口

    集团需求管理系统通过网状网与给各省公司需求管理系统进行交互.落地方为发起方提供访问的URL,发起方使用HTTP POST方法发送请求报文并得到应答报文,发起方作为落地方的HTTP客户端,落地方作为发起 ...

  5. 收藏点webservice接口

    商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ...

  6. 让Hibernate和触发器协同工作

        Sql Server触发器和hibernate一起使用时经常报类似如下错误 Batch update returned unexpected row count from update [0] ...

  7. 多线程 Runnable 实现线程 内部类

    public class ThreadDemo4 { public static void main(String[] args){ System.out.println(Thread.current ...

  8. [图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]

    [图解tensorflow源码] 入门准备工作 附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html  tensorf ...

  9. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  10. beta分布 java代码

    public class BetaDistributionActivity { /** * @param alpha: eg. click * @param beta : eg. pv - click ...