HAProxy安装及配置

一、安装

一、安装相关软件库

yum install  -y gccphp

二、建立路径下载安装包

mkdir –p /zjl/softwarehtml

wget http://download.openpkg.org/components/cache/haproxy/haproxy-1.8.6.tar.gz前端

 

三、建立一个不能登陆的用户管理HAProxy

groupadd HAProxylinux

useradd -s /sbin/nologin –M –g  HAProxy  HAProxynginx

 

四、建立安装目录:

建立安装目录:  mkdir –p /zjl/programweb

 

五、编译参数说明(转载自:http://blog.sina.com.cn/s/blog_51d3553f0100u1bb.html):

make TARGET=os ARCH=arch CPU=cpu USE_xxx=1 …正则表达式

编译以前,首先查看一下系统内核,由于参数与系统内核有关。   uname –r  或  uname –aredis

2.6.32-504.el6.x86_64算法

 

参数说明(在README文件中这些参数都有体现)数据库

TARGET

指定对目标操做系统在编译的时候进行优化,可选择以下值之一:

linux22  for Linux 2.2

linux24  for Linux 2.4 and above (default)

linux24e  for Linux 2.4 with support for a working epoll (> 0.21)

linux26  for Linux 2.6 and above

solaris  for Solaris 8 or 10 (others untested)

freebsd  for FreeBSD 5 to 8.0 (others untested)

openbsd  for OpenBSD 3.1 to 4.6 (others untested)

cygwin  for Cygwin

generic  for any other OS.

custom  to manually adjust every setting

若是目标系统不肯定,则保持默认值generic便可。

 

CPU

指定对特定的cpu进行优化,能够选择值以下:

i686   for intel PentiumPro, Pentium 2 and above, AMD Athlon

i586   for intel Pentium, AMD K6, VIA C3.

ultrasparc :   Sun UltraSparc I/II/III/IV processor

generic :   any other processor or no specific optimization. (default)

 

ARCH

指定ARCH值可强制编译成圣针对一个特定系统架构程序。

一般用于在一个系统架构的平台上生成针对另外一个不一样架构平台的程序。

好比:在一个64位架构的目标系统上编译生成一个32位的程序。

当前可选的值有:

x86_64

i386

i486

i586

i686

注意:若是选择上述其中的一个值“-m32”或“-m64”会被添加到CFLAGS和LDFLAG选项中。

 

DEBUG

指定生成调试信息,可经过指定DEBUG= DDEBUG_xxx对特定的代码部分生成调试信息。当前定义的DEBUG宏有:

DEBUG_FULL

DEBUG_MEMORY

DEBUG_FSM

DEBUG_HASH

DEBUG_AUTH

 

USE_PCRE和USE_STATIC_PCRE

能够经过指定“USE_xxx=1”表示使用,“USE_xxx=”表示禁用。

指定是否使用libpcre库中的正则表达式实现来替换系统的libc库中的实现,考虑到使用libpcre库的效率要比libc高,所以推荐此项使用。

注意:

由于libpcre尚未普遍普及,所以在动态连接的时候,须要确保目标系统安装有libpcre的动态库。针对上面的问题,可使用USE_STATIC_PCRE 指定动态连接libpcre。

使用libpcre编译时,须要确保系统中已经安装了libpcre库。若不使用libpcre,则默认使用系统libc库中的标准正则表达式实现。

强烈推荐使用STATIC_PCRE

 

PREFIX

指定安装目录,默认为/usr/local,其余诸如文档之类的文件将会在PREFIX指定的相应目录下。

 

DESTDIR

指定安装目录,默认没有设置,若是想将haproxy安装一个沙盒中则能够指定该属性。

考虑到咱们的系统为Linux,内核2.6+版本的,CPU为x86_64的,可使用以下命令编译:

make TARGET=linux26 USE_STATIC_PCRE=1

以上参数值用于说明使用,重点是下面所要执行的命令:

为了简便,咱们这里不加USE_STATIC_PCRE参数。

make TARGET=linux26  PREFIX=/usr/local/haproxy-1.8.6

 

六、编译命令:

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

 

七、配置文件:

解压后的安装包里examples 文件夹下一些cfg格式的文件都是简单的配置

image

配置:

global
        daemon               # 后台方式运行
        nbproc 1
        pidfile /zjl/program/haproxy/conf/haproxy.pid


defaults
        mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2               #两次链接失败就认为是服务器不可用,也能够经过后面设置
        option redispatch       #当serverId对应的服务器挂掉后,强制定向到其余健康的服务器
        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
        maxconn 4096            #默认的最大链接数
        timeout connect 5000ms  #链接超时
        timeout client 30000ms  #客户端超时
        timeout server 30000ms  #服务器超时
        #timeout check 2000 #=心跳检测超时
        log 127.0.0.1 local0 err #[err warning info debug]


########test1配置#################
listen test1                         #这里是配置负载均衡,test1是名字,能够任意
        bind 0.0.0.0:80            #这里是监听的IP地址和端口,端口号能够在0-65535之间,要避免端口冲突
        mode tcp                     #链接的协议,这里是tcp协议
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.244.131:80 #负载的机器
        server s2 192.168.244.130:80 #负载的机器,负载的机器能够有多个,往下排列便可
View Code

八、启动:

/zjl/program/haproxy/sbin/haproxy -f /zjl/program/haproxy/conf/haproxy.cfg

-f 是指定咱们的配置文件的路径。

九、验证

在另外两台机器192.168.244.130、192.168.244.131  上安装了nginx

haproxy所在的机器为:192.168.244.128

配置haproxy.cfg 监听端口 80 , 协议为http

重启后屡次访问http://192.168.244.128   把访问负载到192.168.244.130、192.168.244.131   这两台机器上的nginx

十、配置监控页面

haproxy带有监控功能,并且配置简单,直接在主配置文件中加入一下配置便可

用户名/密码   admin/admin

listen  admin_stats
        bind 0.0.0.0:8888
        mode  http
        stats uri   /haproxy
        stats realm     Global\ statistics
        stats auth  admin:admin

给监控配置端口检测:注意(check port 3306)

listen test1
        bind 0.0.0.0:3306
        mode tcp
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.111.101:3306 check port 3306
        server s2 192.168.111.102:3306 check port 3306

二、配置文件详解

haproxy 配置中分红五部份内容,分别以下:

1 、global:    参数是进程级的,一般是和操做系统相关。这些参数通常只设置一次,若是配置无误,就不须要再次进行修改
2 、defaults:  配置默认参数,这些参数能够被用到frontend,backend,Listen组件
3 、frontend: 接收请求的前端虚拟节点,Frontend能够更加规则直接指定具体使用后端的backend
4 、 backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
5 、 Listen:    是 Fronted和backend的组合体

 

有关haproxy配置文件咱们先简单介绍,以下:

global配置段,用于设定全局配置参数。

代理配置段中,主要是使用defaults、frontend、backend、listen关键词。

一、defaults配置段用于为全部其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所从新设定。

二、frontend配置段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之创建链接。

三、backend配置段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。

四、listen配置段经过关联“前端”和“后端”定义了一个完整的代理,一般只对TCP流量有用。

在上述haproxy配置文件中,咱们主要讲解ACL的匹配规则。

acl is_dg hdr_beg(host) dg.test.com    该行定义一个is_dg规则,若是客户端请求的是dg.test.com这个域名,则定义该规则为is_dg。

use_backend dgserver if is_dg     该定义一个dgserver服务器组,若是客户端请求符合is_dg定义的规则,则把该客户端的请求分发到dgserver服务器组。

acl is_ip src 192.168.5.140     该行定义一个is_ip规则,若是客户端的IP地址是192.168.5.140,则定义该规则为is_ip。

use_backend acl if is_171 is_ip    该定义一个acl服务器组,若是客户端请求同时符合is_ip和is_171定义的规则,则把该客户端的请求分发到acl服务器组。

default_backend backend_default    该行定义一个默认服务器组,若是客户端请求不符合上述定义的任何一个规则,则把该客户端的请求分发到backend_default服务器组。

##全局配置信息###
global
        log 127.0.0.1 local3                #[error warringinfo debug]#定义haproxy 日志级别 
        #log 127.0.0.1 local1 notice 
        #log loghost local0 info 
        maxconn 32768                      #默认最大链接数 
        chroot /usr/local/haproxy        #安装目录 

        uid 99                                     #运行haproxy 用户 UID 

        gid 99                                     #运行haproxy 用户组gid 
        daemon                                  #之后台形式运行harpoxy 
        nbproc 1                                 #设置harpoxy 的进程数量 
        pidfile /usr/local/haproxy/run/haproxy.pid      #haproxy的进程PID文件 
        ulimit-n 65535                                                #ulimit 的数量限制 
        #debug #haproxy 调试级别,建议只在开启单进程的时候调试 
        #quiet

####默认配置选项#######

defaults
        log    global
        mode    http                #设置haproxy的代理模式(7层代理http,4层代理tcp) 
        maxconn 65535         #最大链接数 
        option  httplog            #设置日志类别为http日志 
        option  httpclose        #设置每次请求完毕后主动关闭http通道 
        option  dontlognull     #不记录健康检查日志信息 
        option  forwardfor      #若是后端服务器须要得到客户端的真实ip,须要配置此参数,能够从http header 中获取客户端的IP 
        retries 3                       #3次链接失败就认为服务器不可用,也能够经过后面设置 
        option redispatch         #设置serverID 对应的服务器挂掉后,强制定向到其余健康的服务器 
        stats refresh 30            # 设置统计页面刷新时间间隔 
        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        balance roundrobin      #设置默认负载均衡方式,轮询方式 
       #balance source # 设置默认负载均衡方式,对源ip的hash,原理相似于nginx的ip_hash 
       #balnace leastconn #设置默认负载均衡方式,最小链接数 
        contimeout 5000          #设置链接超时时间 
        clitimeout 50000          #设置客户端超时时间 
        srvtimeout 50000         #设置服务器超时时间 
        timeout check  2000    #设置心跳检查超时时间 
        #timeout http-request 10s #默认http请求超时时间 
        #timeout queue 1m #默认队列超时时间 
        #timeout connect 10s #默认链接超时时间 
        #timeout client 1m #默认客户端超时时间 
        #timeout server 1m #默认服务器超时时间 
        #timeout http-keep-alive10s #默认持久链接超时时间

#########设置监控页面######
 listen  admin_status
        bind 0.0.0.0:81          #设置Frontend和Backend的组合体,监控组的名称,按须要自定义名称 
        mode http                           #设置http的7 层模式层 
        log 127.0.0.1 local3 err      #错误日志记录 
        stats refresh 30s                #设置监控页面刷新时间:5s 
        stats uri  /haproxy-stats      # 设置监控页面的url 
        stats realm  Frank \Frank   #设置页面提示信息 
        stats auth admin:admin123     #设置监控页面的用户名和密码:admin,能够设置多个用户名 
        stats auth  Frank:Frank           #设置监控页面的用户和密码:Frank 
        stats hide-version                    #隐藏监控页面的HAproxy版本信息 
        stats  admin if TRUE               #设置手工启动/禁用,后端服务器(haproxy-1.4.9之后版本)

########设置haproxy 错误页面#####

errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http
errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http

##### 设置frontend#########

frontend http_80_in
      bind 0.0.0.0:80               #设置监听端口,即haproxy提供的web服务端口,和lvs的vip 相似 
      mode http                       # http 的7层模式 
      log global                       #应用全局的日志设置 
      option httplog                 #启用http的log 
      option httpclose             #每次请求完毕后主动关闭http通道,HA-proxy不支持keep-alive模式 
      option forwardfor           #若是后端服务器须要得到客户端的真实IP,须要配置此参数,将能够从HttpHeader中得到客户端IP

####acl 策略配置######
      acl  frank_web hdr_reg(host)  -i ^(www.test.com.sh|news.test.com.sh)$
      #若是请求的域名知足正则表达式中的2个域名返回true -i 是忽略大小写 
      # acl frank_fund hdr_dom(host) -i fund.test.com.sh 
      #若是请求的域名知足fund.test.com.sh返回true -i是忽略大小写 
      acl  frank    hdr(host) -i test.com.sh
      #若是请求的域名知足test.com.sh返回true -i是忽略大小写 
      #acl file_req url_sub -i killall= 
      #在请求url中包含killall=,则此控制策略返回true,不然为false 
      # acl dir_req url_dir -i allow 
      #在请求url中存在allow做为部分地址路径,则此控制策略返回true,不然返回false 
      acl missing_cl hdr_cnt(Content-length)eq 0
      #当请求的header中Content-length等于0时返回true 
      #### Manage interface #### 
       acl Frank_Manage path_dir /Frank/manage/
       acl Frank_Network src  192.168.151.189 192.168.152.0/24
       ## deny lb.html### 
       acl Frank_lb  path /lb.html

########acl策略匹配相应#############

      block if Frank_lb
      block if Frank_Manage !Frank_Network
      #block if missing_cl 
      #当请求的header中Content-length等于0阻止请求返回403 
      #block if !file_req || dir_req 
      #block表示阻止请求,返回403错误,当前表示若是不知足策略file_req,或者知足策略dir_req,则阻止请求 
      redirect prefix http://192.168.151.249 code 301 if frank
      #当访问test.com.sh的时候,用http的301挑转到http://192.168.151.249 
      use_backend  server_web if frank_web
      #当知足frank_web的策略时使用server_web的backend服务器
      #use_backend server_blog if frank_fund 
      #当知足frank_fund的策略时使用server_blog的backend服务器 
      default_backend server_web
      #以上都不知足的时候使用默认server_web的backend服务器

##########backend的设置##############
####################backend server_web#########################
backend  server_web
      mode http            #http的7层模式 
      balance roundrobin  #负载均衡的方式,roundrobin平均方式 
      #cookie SERVERID insert indirect nocache #容许serverid插入cookie中,serverid后面能够定义 
      option httpchk GET /lb.html HTTP/1.0    #心跳检测的文件 
      server 192.168.51.78 192.168.151.78:80  weight 1 cookie cookie78 check inter 1500 rise 3 fall 3
      #服务器定义,cookie 78表示serverid为web78,check inter1500 是检测心跳频率,rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight 1表明权重为1 
      server 192.168.151.79 192.168.151.79:80 weight 1 cookie cookie79 check inter 1500 rise 3 fall 3
      #服务器定义,cookie 79表示serverid为web79,check inter1500 是检测心跳频率,rise 3 是3次正确认为服务器可用,fall 3 是3次失败认为服务器不可用,weight 1表明权重为1

另:

global
    daemon
    maxconn 60000   #ulimit -n至少为60018最大链接并发数
    #user /var/sbin/haproxy
    #user haproxy #运行haproxy的用户
    #chroot /usr/local/haproxy #安裝根目錄
    pidfile /var/run/haproxy.pid
    log 127.0.0.1 local2

defaults
    mode http
    log global
    #option http-keep-alive #使用keepAlive链接 
    option forwardfor    #若是后端服务器须要得到客户端的真实ip,须要配置的参数,记录客户端IP在X-Forwarded-For头域中
    option http-server-close # 后端为动态应用程序建议使用http-server-close,后端为静态建议使用http-keep-alive 
    option httplog           #开启httplog,HAProxy会记录更丰富的请求信息
    option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
    #option httpchk GET /healthCheck.html #定义默认的健康检查策略
    option redispatch #当serverid对应的服务器挂掉后,强制定向到其余健康的服务器
    balance roundrobin  #设置默认负载均衡方式,轮询方式
    #balance source 设置默认负载均衡方式,相似于nginx的ip_hash
    #balance leastconn 设置默认负载均衡方式,请求转发到具备最少链接数目的后端服务器,在会话时间较长的场景中推荐使用此算法。例如数据库负载均衡等
    timeout connect 2000ms #haproxy和服务端创建链接的最大时长,设置为1秒就足够了。局域网内创建链接通常都是瞬间的
    timeout client 10000ms #和客户端保持空闲链接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放链接
    timeout server 8000ms #和服务端保持空闲链接的超时时长,局域网内创建链接很快,因此尽可能设置短一些,特别是并发时,如设置为1-3秒 
    timeout http-request 12000ms  #从链接建立开始到从客户端读取完整HTTP请求的超时时间,用于避免类DoS攻击
    timeout queue 5000ms #请求在队列中排隊的最大时长

########frontend前端配置##############
frontend http-in
    bind *:80 #这里建议使用bind *:80的方式,要否则作集群高可用的时候有问题,vip切换到其余机器就不能访问了
    #maxconn 30000 #定义此端口上的maxconn最大链接并发数
    #url地址重寫,條件 
    #acl login_AuthCallBack path_beg -i /Account/AuthCallBack? 
    #acl login_AuthCallBack url_beg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack path_reg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack url_beg -i /Account/AuthCallBack? #測試可用1
    #acl url_ms1 path_beg -i /ms1/ #定义ACL,当uri以/ms1/开头时,ACL[url_ms1]为true
    #acl url_ms2 path_beg -i /ms2/ #同上,url_ms2
    #acl web hdr(host) -i www.abc.com #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,若是访问www.abc.com这个域名,就触发web规则
    #acl img hdr(host) -i img.abc.com #若是访问img.abc.com这个域名,就触发img规则。
    #redirect prefix http://192.168.21.201:8000 if login_AuthCallBack #測試可用1 重定向
    #redirect prefix http://192.168.21.126:8089 if login_AuthCallBack #測試可用1 重定向
    #redirect location http://192.168.21.126:8089 if login_AuthCallBack 
    #redirect prefix http://192.168.21.201:8000 if login_AuthCallBack 
    #redirect location http://0.0.0.0:8000/ if login_AuthCallBack 
    #use_backend youxi_pool if youxi 
    #use_backend ms1 if url_ms1 #当[url_ms1]为true时,定向到后端服务群ms1中
    #use_backend ms2 if url_ms2 #当[url_ms2]为true时,定向到后端服务群ms2中
    #use_backend webserver if web #若是上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个做用域。
    #use_backend imgserver if img #若是上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个做用域。
    default_backend dynamic_servers  #其余状况时,定向到后端服务群default_servers中 

backend dynamic_servers    #定义后端服务群default_servers
   #balance roundrobin
    #棄用這行設置,會導致後端服務器誰優先寫入了cookie的值,則以後每次請求都會定向到此後端服務器(不會輪詢了) 
   #cookie app_cook insert indirect nocache
   #server webser1 192.168.21.126:8076 cookie webser1 maxconn 300 check
   server webser1 192.168.21.126:8070 cookie webser1 maxconn 300 check
   server webser2 192.168.21.126:8071 cookie webser2 maxconn 300 check
   server webser3 192.168.21.126:8072 cookie webser3 maxconn 300 check
   server webser4 192.168.21.126:8073 cookie webser4 maxconn 300 check

#backend ms1 #定义后端服务群ms1
# balance roundrobin #使用RR负载均衡算法
# cookie HA_STICKY_ms1 insert indirect nocache #会话保持策略,insert名为"HA_STICKY_ms1"的cookie
# 
# #定义后端server[ms1.srv1],请求定向到该server时会在响应中写入cookie值[ms1.srv1]
# #针对此server的maxconn设置为300
# #应用默认健康检查策略,健康检查间隔和超时时间为2000ms,两次成功视为节点UP,三次失败视为节点DOWN
# server ms1.srv1 192.168.8.111:8080 cookie ms1.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
# 
# #同上,inter 2000ms rise 2 fall 3是默认值,能够省略
# server ms1.srv2 192.168.8.112:8080 cookie ms1.srv2 maxconn 300 check
#
#backend ms2 #定义后端服务群ms2
# balance roundrobin
# cookie HA_STICKY_ms2 insert indirect nocache
# server ms2.srv1 192.168.8.111:8081 cookie ms2.srv1 maxconn 300 check
# server ms2.srv2 192.168.8.112:8081 cookie ms2.srv2 maxconn 300 check 

#backend imgserver
#  mode http
#  option httpchk /index.php
#  balance roundrobin 
#  server img01 192.168.137.101:80 check inter 2000 fall 3
#  server img02 192.168.137.102:80 check inter 2000 fall 3

########统计页面配置########
listen stats    #定义监控页面
    bind *:2000                   #绑定端口1080
    maxconn 10 #默认的最大链接数
    stats refresh 30s             #每30秒更新监控数据
    stats uri /stats              #访问监控页面的uri
    #stats realm HAProxy\ Stats #监控页面的认证提示
    #stats auth admin:admin #设置监控页面的用户和密码:admin,能够设置多个用户名
    #stats auth Frank:Frank #设置监控页面的用户和密码:Frank
    #stats hide-version #隐藏统计页面上HAProxy的版本信息

#登錄回調端口監聽
listen port8070_8071_8072_8073
   bind *:8070
   bind *:8071
   bind *:8072
   bind *:8073
    #條件
   acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
    #重定向
   redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 

#listen port8070
# bind *:8070
# #條件
# acl login_AuthCallBack url_beg -i /Account/AuthCallBack? #測試可用1
# #重定向
# redirect prefix http://192.168.21.201:8000 if login_AuthCallBack #測試可用1 
#
#listen port8071
# bind *:8071
# #條件
# acl login_AuthCallBack url_beg -i /Account/AuthCallBack? #測試可用1
# #重定向
# redirect prefix http://192.168.21.201:8000 if login_AuthCallBack #測試可用1 
#
#listen port8072
# bind *:8072
# #條件
# acl login_AuthCallBack url_beg -i /Account/AuthCallBack? #測試可用1
# #重定向
# redirect prefix http://192.168.21.201:8000 if login_AuthCallBack #測試可用1 
#
#listen port8073
# bind *:8073
# #條件
# acl login_AuthCallBack url_beg -i /Account/AuthCallBack? #測試可用1
# #重定向
# redirect prefix http://192.168.21.201:8000 if login_AuthCallBack #測試可用1 

 

 

参考:https://blog.csdn.net/king_kgh/article/details/75599083

        http://www.javashuo.com/article/p-giugnwju-bo.html

        http://www.javashuo.com/article/p-qxlniskh-dn.html

相关文章
相关标签/搜索