一、haproxy介绍

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。

二、安装haproxy

去haproxy下载源码包上传到服务器或者wget

然后解压

[root@mymaster yasuobao]# tar -zxvf haproxy-2.0.1.tar.gz
[root@mymaster yasuobao]# cd haproxy-2.0.1

编译
[root@mymaster yasuobao]# make TARGET=linux31

这里TARGET参数视centos版本而定,uname -r查看系统版本centos6.X需要使用TARGET=linux26 centos7.x使用linux31
安装

[root@mymaster yasuobao]# make install PREFIX=/usr/local/haproxy

创建conf目录
[root@mymaster yasuobao]# mkdir /usr/local/haproxy/conf

复制文件

[root@mymaster yasuobao]#  cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
[root@mymaster yasuobao]#  cd /usr/local/haproxy/conf

编辑配置文件

[root@mymaster conf]# vim haproxy.cfg

配置HAProxy实现负载均衡

字段含义如下

global                      # 全局参数的设置
    log 127.0.0.1 local0 info         # log语法:log <address_1>[max_level_1] # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志

    maxconn 4096          #最大连接数
    user nobody               #所属用户
    group nobody               #所属组
    daemon                        #以守护进程方式运行haproxy
    nbproc 1                      #指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy,默认为1
    pidfile /usr/local/haproxy/logs/haproxy.pid                 #指定pid文件生成目录
defaults
    mode http      #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    retries 3        # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端 
    timeout connect 10s        #连接超时
    timeout client 20s          #客户端超时
    timeout server 30s         #服务器端超时
    timeout check 5s           #检测超时
frontend www
    bind *:80           #监听地址为80
  mode http
    option      httplog   #启用记录HTTP请求、会话状态和计时器的功能
    option      forwardfor   #允许在发往服务器的请求首部中插入“X-Forwarded-For”首部。
    option      httpclose   #每次请求完毕后主动关闭http通道
    log global    #启用事件和流量日志 
    default_backend     htmpool   #默认后端
backend htmpool
mode http
    option      redispatch    # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服 务器宕掉了, 但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
    option      abortonclose    #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求
            balance     static-rr        #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
    cookie      SERVERID      #允许插入serverid到cookie中,serverid后面可以定义
    option      httpchk GET /index.html
    server      myslave02 172.18.74.87:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3      #cookie 1表示serverid     为1,check inter 1500 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
    server      myslave 172.18.74.119:80 cookie 1 weight 3 check inter 2000 rise 2 fall 3

listen admin_stats
    bind  0.0.0.0:9188   #监听端口
    mode  http
    log   127.0.0.1 local0 err     #全局的日志配置,local0 是日志设备,err 表示日志级别。其中日志级别有err、 warning、info、debug 四种可选。这个配置表示使用 127.0.0.1 上的 rsyslog 服务中的local0 日志设备,记录日志等级为err。
    stats refresh 30s    #统计页面自动刷新时间
    stats uri /haproxy-status      #统计页面url
    stats realm welcome login\ Haproxy       #统计页面密码框上提示文本
    stats auth admin:admin123      #统计页面用户名和密码设置
    stats hide-version       #隐藏统计页面上HAProxy的版本信息
    stats admin if TRUE      #通过设置此选项,可以在监控页面上手工启用或禁用后端真实服务器,仅在haproxy1.4.9 以后版本有效

启动haproxy

[root@mymaster conf]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

然后在后端服务器编辑index.html

[root@myslave html]# cat index.html
this is 119 html

[root@myslave02 html]# cat index.html
this is 87 html

curl检查haproxy是否正常工作
配置HAProxy实现负载均衡

浏览器访问172.18.74.59:9188/haproxy-status,用户名admin,密码admin123,登陆。可以看到haproxy的工作状态
配置HAProxy实现负载均衡