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




wKioL1Ngc4yxoU56AAITF_G_9b8106.jpg

一、准备三台主机(配置好网关及ip地址)

第一台主机

外网地址         172.16.24.100

内网地址         192.168.24.1

第二台主机

                 192.168.24.11  

第三台主机    

                 192.168.24.22

第二台,第三台的主机的网关指向第一台主机的内网地址。

route add default gw 192.168.24.1

二、配置过程

1)配置第二台主机

  1、安装上phpphp-mysql、并给web提供一个页面。

     #yum -y install php php-mysql

     #vim /var/www/html/text.html

     <h1>node1.edu.com</h1>

 第三台主机的配置和第二台一样

2)安装配置haproxy

  [root@contron ~]# yum install haproxy

  [root@contron ~]# cd /etc/haproxy

  [root@contron haproxy]# cp haproxy.cfg haproxy.cfg.back

  [root@contron haproxy]# vim haproxy.cfg

global                        #全局配置段

  log         127.0.0.1 local2

chroot      /var/lib/haproxy       #修改haproxy的工作目录至指定的目录。可以提升haproxy的安全级别。

   pidfile     /var/run/haproxy.pid   #定义pid言文件所放位置。

   maxconn     4000                   #性能调整参数,设定每个haproxy进程所接受的最大并发连接数

   user        haproxy                #以指定的用户运行haproxy

   group       haproxy                #以指定的组过行haproxy

   daemon                             #让haproxy以守护进程的方式工作于后台。

   stats socket /var/lib/haproxy/stats

defaults                                    #代理相关的配置段,为所有其它的配置段提供默认参数。

   mode                    http            #设定运行模式或协议(通常有{tcp|http|health})

   log                     global          #启动事件和流量日志(定义为global表示没有额外的参数)

   option                  httplog         #启用记录HTTP请求、会话状态和计时器的功能。

   option                  dontlognull     #不记录健康检查的日志信息。

   option http-server-close                #让服务器端想启用保持连接时的必须选项

   option forwardfor       except 127.0.0.0/8  #

   option                  redispatch      #severID对应的服务器挂掉后,强制定向到其它的健康的服务器

   retries                 3                   #尝试3次连接失败就认为服务器不可用,主要通过后面的check检查。

   timeout http-request    10s             #客户端如果10钟没有发请求就段开连接

   timeout queue           1m              #在对列钟等待的超时时长

   timeout connect         10s             #haproxy将客户端请求发往后端服务器后所等待的超时时长。

   timeout client          1m              #客户端一次的最大一次非活动连接时长

   timeout server          1m              #服务器端非活动状态的超时时长

   timeout http-keep-alive 10s             #保持连接的超时时长

   timeout check           10s             #实现健康检测时的超时时长

   maxconn                 30000           #每个sever默认的最大并发连接数

listen starts

   mode http              # http的七层模式

   bind 0.0.0.0:1080      #监听端口

   stats enable           #启用基于程序编译时默认设置的统计报告。

   log global

   option httpclose

   option logasap

   option dontlognull

   capture request  header Host len 20    #指定捕获的请求主机报文首部

   capture request  header Referer len 60 # header的Referer属性里面获取上次提交的URL信息

   default_backend servers                #指定认使用的默认后端服务器组。


frontend websrv *:80


  default_backend   webserver

backend   webserver


  balance roundrobin

  server   node1  192.168.24.11:80  check

  server   node2  192.168.24.22:80  check


 [root@contron haproxy]# service haproxy start

Starting haproxy:                                          [  OK  ]

[root@contron haproxy]# ss -tnl  #查看80端口是否启动

State      Recv-Q Send-Q                     Local Address:Port                       Peer Address:Port

LISTEN     0      128                                   :::111                                  :::*  LISTEN     0      128                                    *:111                                   *:*  LISTEN     0      128                                    *:80                                    *:*  LISTEN     0      128                                    *:42578                                 *:*  LISTEN     0      128                                   :::22                                   :::*      

验证

wKioL1NgdGfAF8H8AACsH66Ysj0402.jpg

三、使用haproxy配置上游服务器动静分离

1)为每台服务器提供一个php测试页面(192.168.24.11、192.168.24.12)

#vim /var/www/html/index.php

<?php

 phpinfo();

?>

2)修改haproxy的配置文件

[root@contron ~]# vim /etc/haproxy/haproxy.cfg


frontend http-in

   bind *:80

   mode http

   log global

   option httpclose

   option logasap

   option dontlognull

   capture request  header Host len 20

   capture request  header Referer len 60

   acl url_static       path_beg       -i /static /p_w_picpaths /javascript /stylesheets

   acl url_static       path_end       -i .jpg .jpeg .gif .png .css .js .html

   acl url_php          path_end       -i .php


   use_backend static_servers          if url_static

   use_backend dynamic_servers         if url_php

   default_backend dynamic_servers


backend static_servers

   balance roundrobin

   server node1 192.168.24.11:80 check maxconn 6000


backend dynamic_servers

   balance roundrobin

   server node2 192.168.24.22:80 check maxconn 1000

3)重启haproxy服务,并验证结果

[root@contron ~]# service haproxy reload


实验结果

wKioL1NgpJTgHvZxAAC8dhU-L6w142.jpg

wKiom1NgpNuiWVDFAAD9LJW3eLI984.jpg

四、配置shaproxy统计页面的输出机制;

1)编辑haproxy配置文件添加如下内容:

[root@contron ~]# vim /etc/haproxy/haproxy.conf

listen stats

   mode http

   bind 0.0.0.0:1080

   stats enable

   stats hide-version

   stats uri     /haproxyadmin?stats

   stats realm   Haproxy\ Statistics

   stats auth    admin:admin

   stats admin if TRUE

2)实验结果

wKiom1NgpUSxVhanAAnaj05oHFw870.jpg