一、Haproxy概念                                              

 Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七

处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很   简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。                              

二、安装Haproxy                                                 

# mkdir /usr/local/haproxy
# tar zxvf haproxy-1.5.3.tar.gz
# cd haproxy-1.5.3
# make TARGET=linux2628 PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# mkdir /etc/haproxy
# cp examples/haproxy.cfg /etc/haproxy/
# groupadd -g 1001 haproxy
# useradd -g haproxy haproxy -s /sbin/nologin

三、配置Haproxy                                                 

    Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。

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

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

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

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

    listen:Frontend和Backend的组合体。

    编写haproxy.cfg文件:


# vi /etc/haproxy/haproxy.cfg      # 两节点配置一致
global 
    log 127.0.0.1  local0            #日志输出配置,所有日志都记录在本机,通过local0输出
    log 127.0.0.1 local1 notice           
    #log loghost  local0 info  
    maxconn 51200                    #最大连接数
    chroot /usr/local/haproxy        #改变当前工作目录。
    pidfile /var/run/haproxy.pid 
    uid haproxy  
    gid haproxy  
    daemon         #以后台程序运行
    #quiet  
    nbproc 1       #进程数  
      
defaults  
    log global 
    mode http          #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
    retries 3          #两次连接失败就认为是服务器不可用,也可以通过后面设置
    option  httplog                        #日志类别,采用httplog
    option  dontlognull    
    #option redispatch     #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
    #option abortonclose   #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 
    maxconn 20000          #默认的最大连接数
    timeout connect 5000ms #连接超时  
    timeout client 30000ms #客户端超时  
    timeout server 30000ms #服务器超时  
    timeout check 2000    #心跳检测超时       
  
listen admin_stats  
    bind 0.0.0.0:8888 #监听端口 
    stats enable       #开启统计页面功能 
    option httplog    #采用http日志格式  
    stats refresh 10s #统计页面自动刷新时间  
    stats uri /stats  #统计页面url  
    stats realm Haproxy Manager #统计页面密码框上提示文本  
    stats auth admin:123456 #统计页面用户名和密码设置,开启登录验证功能  
    stats admin if TRUE #若登录用户验证通过,则赋予管理功能
    stats hide-version #隐藏统计页面上HAProxy的版本信息 
    
  listen web *:88
   option  httpclose    #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现  
   option  forwardfor   #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
   balance roundrobin   #负载均衡算法
   #option httpchk HEAD /index.php HTTP/1.0    #启用HTTP协议检查服务器监控状态,在web服务器上分别建立index.html页面,可以添加不同的内容,给待会测试用,内容分别填写100:80,150:8080,200:8080好了,如果没有,haproxy会认为对应的web服务器挂掉了。
   server web1 192.168.1.101:8080 cookie 100 check inter 5000 fall 1 rise 2        
   server web2 192.168.1.102:8080 cookie 150 check inter 5000 fall 1 rise 2
   ##server 服务器定义:cookie 表示server id;check inter 2000 是检测心跳频率;rise 2 是2次正确认为服务器可用;fall 5 是5次失败认为服务器不可用;weight 代表权重
   
 附:这里还说一下啊,HAProxy的算法现在也越来越多了,具体有如下8种: 
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; 
②static-rr,表示根据权重,建议关注; 
③leastconn,表示最少连接者先处理,建议关注; 
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注; 
⑤ri,表示根据请求的URI; 
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name; 
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; 
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

四、通过脚本来启动与关闭haproxy                                       

  1、编写haproxy脚本 

# vi /etc/rc.d/init.d/haproxy
#!/bin/bash  
BASE_DIR="/var/run"  
ARGV="$@"  
 
start()  
{  
echo "START HAPoxy SERVERS"  
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg  
}  
 
stop()  
{  
echo "STOP HAPoxy Listen"  
kill -TTOU $(cat $BASE_DIR/haproxy.pid)  
echo "STOP HAPoxy process"  
kill -USR1 $(cat $BASE_DIR/haproxy.pid)  
}  
case $ARGV in  
 start)  
start  
ERROR=$?  
;;  
 
stop)  
stop  
ERROR=$?  
;;  
 
restart)  
stop  
start  
ERROR=$?  
;;  
 
*)  
echo "hactl.sh [start|restart|stop]"  
esac  
exit $ERROR

   2、让脚本随系统自动启动

# chmod +x /etc/rc.d/init.d/haproxy 
# chkconfig --add haproxy

haproxy does not support chkconfig
----解决上面的问题的办法是在/etc/rc.d/init.d/haproxy中添加下面两行到#!/bin/bash之后
# vi /etc/rc.d/init.d/haproxy
#!/bin/bash  
#chkconfig: 2345 10 90
#description:haproxy
 


----其中2345是默认启动级别,级别有0-6共7个级别。----等级0表示:表示关机----等级1表示:单用户模式----等级2表示:无网络连接的多用户命令行模式----等级3表示:有网络连接的多用户命令行模式----等级4表示:不可用----等级5表示:带图形界面的多用户模式----等级6表示:重新启动----10是启动优先级,90是停机优先级,优先级范围是0-100,数字越大,优先级越低。

    3、启动与停止haproxy                                                                                                            

# service haproxy stop
STOP HAPoxy Listen
STOP HAPoxy process
# ps -ef |grep haproxy |grep -v grep
# service haproxy start
START HAPoxy SERVERS
# ps -ef |grep haproxy |grep -v grep
root     11259     1  0 15:33 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg