文章目录

  1. 1. 第一章 简介
  2. 2. 第二章 概述(略)
  3. 3. 第三章 参数
    1. 3.1. 1、global
    2. 3.2. 2、defaults
    3. 3.3. 3、frontend
    4. 3.4. 4、backend
    5. 3.5. 5、listen
  4. 4. 第四章 安装
    1. 4.1. global
    2. 4.2. defaults
    3. 4.3. listen web_proxy 0.0.0.0:80 #监听端口
  5. 5. 第五章 操作
    1. 5.1. 1、启动参数
    2. 5.2. haproxy -f < 配置文件>
    3. 5.3. haproxy 的启动
    4. 5.4. haproxy 的重启
    5. 5.5. haproxy 的停止
  6. 6. 第六章 算法
  7. 7. 第七章 重点
    1. 7.1. 1、多主机Session共享
      1. 7.1.1. (1)用户IP 识别
      2. 7.1.2. (2)cookie 识别
      3. 7.1.3. (3)session 识别

HAProxy使用说明,项目中配置集群。

第一章 简介

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

HAProxy反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

第二章 概述(略)

第三章 参数

1、global

参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改

2、defaults

配置默认参数的,这些参数可以被利用配置到frontend,backend,listen 组件

3、frontend

接收请求的前端虚拟节点,frontend 可以根据规则直接指定具体使用后端的backend(可动态选择)。

4、backend

后端服务集群的配置,是真实的服务器,一个Backend 对应一个或者多个实体服务器。

5、listen

frontend 和backend 的组合体。

附注:以上5 个组件不是必选的,可以根据需要选择部分作为配置。详细的配置信息,请查阅官方文档

1.3 版本

http://haproxy.1wt.eu/download/1.3/doc/configuration.txt

1.4 版本

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

第四章 安装

cd /usr/src/
tar zxvf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24
make TARGET=linux26 CPU=i686        //如果是64bit,使用命令:make TARGET=linux26 CPU=x86-64
make install PREFIX=/usr/local/haproxy
vi /usr/local/haproxy/haproxy.cfg

global

  
    #全局的日志配置其中日志级别是[err warning info debug]  
    #local0是日志设备,必须为如下24种标准syslog设备的一种:  
    #kern user mail daemon auth syslog lpr news  
    #uucp cron auth2 ftp ntp audit alert cron2  
    #local0 local1 local2 local3 local4 local5 local6 local7    
    log 127.0.0.1   local0   
    #最大连接数    
    maxconn 5218  
    #chroot /usr/local/haproxy  
    #用户   
    uid haproxy  
    #组  
    gid haproxy   
    #使HAProxy进程进入后台运行。这是推荐的运行模式       
    daemon  
    #创建6个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"  
    nbproc 6   
    #将所有进程的pid写入文件启动进程的用户必须有权限访问此文件。  
    pidfile /usr/local/haproxy/haproxy.pid

defaults

    
    #log     127.0.0.1       local3   
    #默认的模式mode { tcp|http|health }   
    mode    http    
    #采用http日志格式  
    option  httplog  
    #强制短连接,每次请求完毕后主动关闭http通道  
    option  httpclose   
    #不记录健康检查的日志信息   
    option  dontlognull   
    #如果后端服务器需要获得客户端真实ip需要配置的参数  
    #可以从Http Header中获得客户端ip     
    option  forwardfor  
    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
    option abortonclose  
    #如果cookie写入了serverId而客户端不会刷新cookie,  
    #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器    
    option  redispatch    
    #三次连接失败就认为是服务器不可用,也可以通过后面设置  
    retries 3  
    #默认的最大连接数    
    maxconn 8000  
    balance static-rr  
   #balance source  
    #balance leastconn   
    #默认的负载均衡的方式,轮询方式    
    #balance roundrobin                
   stats enable  
    #统计页面url  
   stats uri /ha?stats  #haproxy运行状态查看 自定义uri  
    #连接超时  
    contimeout      5000  
    #客户端超时    
    clitimeout      50000   
    #服务器超时   
    srvtimeout      50000    
    #=心跳检测超时  
    timeout check 2000  
    #注:一些参数值为时间,比如说timeout。时间值通常单位为毫秒(ms)  
    #- us : microseconds. 1 microsecond = 1/1000000 second  
    #- ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.  
    #- s : seconds. 1s = 1000ms  
    #- m : minutes. 1m = 60s = 60000ms  
    #- h : hours. 1h = 60m = 3600s = 3600000ms  
    #- d : days. 1d = 24h = 1440m = 86400s = 86400000ms  

listen web_proxy 0.0.0.0:80 #监听端口

    # option httpchk HEAD /index.jsp HTTP/1.0   #健康检测 检测server web根目录有无此文件  
    #http的7层模式  
    mode http  
    #cookie和session都可以用,这里有6个参数,这个经实验最好使。  
    cookie SRV insert indirect nocache            
    #服务器定义  
    server  s1 192.168.1.168:7003 cookie A check inter 1500 rise 3 fall 3 weight 10  
    server  s2 192.168.1.37:7005 cookie A check inter 1500 rise 3 fall 3 weight 15  

第五章 操作

1、启动参数

haproxy -f < 配置文件>

[-n 最大并发连接总数] [-N 每个侦听的最大并发数][-d] [-D] [-q] [-V] [-c] [-p ] [-s] [-l] [-dk]
[-ds][-de] [-dp] [-db] [-m < 内存限制M>][{-sf|-st} pidlist...]
-d 前台,debug 模式
-Ddaemon 模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf 程序启动后向pidlist 里的进程发送FINISH 信号,这个参数放在命令行的最后
-st 程序启动后向pidlist 里的进程发送TERMINATE信号,这个参数放在命令行的最后

haproxy 的启动

/usr/local/haproxy/sbin/haproxy–f /usr/local/haproxy/haproxy.cfg

haproxy 的重启

/usr/local/haproxy/sbin/haproxy-f /usr/local/haproxy/haproxy.cfg -st cat
/usr/local/haproxy/haproxy.pid (不要换行)

haproxy 的停止

killall -9 haproxy

第六章 算法

roundrobin,表示简单的轮询,这个是负载均衡基本都具备的。
static-rr,表示根据权重。(1.3无)
leastconn,表示最少连接者先处理。
source,表示根据请求源IP。
uri,表示根据请求的URI。
url_param,表示根据请求的URl参数'balanceurl_param' requires an URL parameter name。
hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求。
rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。(1.3无)

第七章 重点

1、多主机Session共享

(1)用户IP 识别

概念:haroxy将用户IP经过hash计算后指定到固定的真实服务器上。(类似于nginx 的IP hash 指令)

配置指令balancesource

概念:haproxy将服务端发送给客户端的cookie中增加haproxy定义的后端的服务器COOKIE ID。

配置指令

cookie SESSION_COOKIE insert indirectnocache

服务器定义

server s1 192.168.1.168:7003cookieA check inter 1500 rise 3 fall 3 weight10

(3)session 识别

概念:haproxy将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。

配置指令appsession LXSYM len 64 timeout 5h request-learn

注意:LXSYM这个值替换成session.name的值。

(完)

微信公众号

文章目录

  1. 1. 第一章 简介
  2. 2. 第二章 概述(略)
  3. 3. 第三章 参数
    1. 3.1. 1、global
    2. 3.2. 2、defaults
    3. 3.3. 3、frontend
    4. 3.4. 4、backend
    5. 3.5. 5、listen
  4. 4. 第四章 安装
    1. 4.1. global
    2. 4.2. defaults
    3. 4.3. listen web_proxy 0.0.0.0:80 #监听端口
  5. 5. 第五章 操作
    1. 5.1. 1、启动参数
    2. 5.2. haproxy -f < 配置文件>
    3. 5.3. haproxy 的启动
    4. 5.4. haproxy 的重启
    5. 5.5. haproxy 的停止
  6. 6. 第六章 算法
  7. 7. 第七章 重点
    1. 7.1. 1、多主机Session共享
      1. 7.1.1. (1)用户IP 识别
      2. 7.1.2. (2)cookie 识别
      3. 7.1.3. (3)session 识别