2015-07-22-24Haproxy学习

 一、HAProxy简介:

    HAProxy提供高可用性、负载均衡以及基于TCPHTTP应用的代理。

     HAProxy适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。

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

 (我的理解:作为一个代理,根据一定的规则,将请求分发到不同的服务器上)

 二、特点:

 1)它可以代理任何基于TCP的东西--而不仅仅是HTTP

 2)拥有多种负载均衡算法,包括“最少连接数(least connections)”策略,将后端服务器和最少连接数关联起来;

 3)提供专用的状态页来告诉你后端服务器的状态、运行时间以及很多齐全的指标。

 4)请求可以通过各种各样的东西发送:cookiesURL字符串、客户端IP,等等。

 三、安装:

 1)官网下载:haproxy-1.4.8.tar.gz

 (2)解压:tar zxvf haproxy-1.4.8.tar.gz

     cd haproxy-1.4.8

     uname -a    //查看linux内核版本

     Linux web1 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

 (3)安装:make TARGET=linux26  PREFIX=/usr/local/haproxy

     安装到:/usr/local/haproxy

     make install  PREFIX=/usr/local/haproxy

 四、配置:

1)了解配置参数

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

    default:(默认参数)配置默认参数的,这些参数可以被利用配置到frontendbackendlisten组件;

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

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

    listenFrontendBackend的组合体。

OPTION 选项:

  option  httplog         #http日志格式 

  option  httpclose       #HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。如果避免这种情况配置此选项,防止产生多余的cookie信息。

  option  dontlognull     #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。

  option originalto       #如果服务器上的应用程序想记录发起请求的原目的IP地址,需要在HAProxy上配置此选项,这样HAProxy 会添加"X-Original-To"字段。

  option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

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

  option  httpclose       #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现   

  option  forwardfor      #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip 

负载均衡选项:

  1、简单的轮询,balance roundrobin;

  2、根据请求的源IP,balance source;

  3、根据请求的uri,balance uri;

  4、根据请求RUL中的参数,balance url_param。

COOKIE 选项:

  cookie JSESSIONID prefix :如果客户端只支持一个cookie,并且服务器上的应用程序已经对返回设置了cookie,HAProxy设置此选项可以改写应用程序设置的cookie信息,把服务器的信息添加到原cookie中去。

  cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。

  cookie SERVERID rewrite :

  cookie SERVERID insert :

  cookie SERVERID insert nocache :

  cookie SERVERID insert postonly :

(2)编写配置文件

  vim haproxy.cfg

  写入如下内容:(说明:haproxy服务器ip:192.168.0.162,后端服务器:163、167、68)

global

        log 127.0.0.1   local0 info #日志位置 

        maxconn 4096                #最大连接数

        uid 99                      #代表用户id99nobody用户执行

        gid 99                      #代表群组id99nobody群组

        daemon                      #设置成后台运行 

        nbproc 1                    #进程数量 

defaults

        log     global

        #mode   tcp

        mode    http

        retries 3                   #三次失败后认为服务器不可用 

        maxconn         2000        #最大连接数

        contimeout      5000        #连接超时时间单位(毫秒)

        clitimeout      50000       #客服端超时时间单位(毫秒)

        srvtimeout      50000       #服务器超时时间单位(毫秒)

listen  localhost 192.168.0.162:80

        # cookie DYNSRV insert indirect nocache

        #轮询的同时,根据插入的cookie DYNSRV 的值来做会话保持。

        cookie  JSESSIONID prefix

        mode http

        stats   uri  /haproxy           #监控haproxy状态 

        stats refresh 30s               #统计页面自动刷新时间 

        stats uri /stats                #统计页面url 

        stats realm Haproxy Manager     #统计页面密码框上提示文本 

        stats auth admin:admin          #统计页面用户名和密码设置 

        stats   hide-version            #隐藏版本信息

        option httpchk HEAD /check.txt HTTP/1.0  #健康检测

        option  httpclose               #隐藏统计页面上HAProxy的版本信息

        balance roundrobin              #负载均衡算法(roundrobin轮询)

        server app1_1 192.168.0.68:80 cookie app1inst1 check inter 2000 rise 2 fall 5

        server app1_2 192.168.0.163:80 cookie app1inst2 check inter 2000 rise 2 fall 5

        server app1_3 192.168.0.167:80 cookie app1inst3 check inter 2000 rise 2 fall 5

启动服务:(haproxy 默认监听的80端口关闭80端口的程序)

/usr/local/ haproxy/sbin/haproxy –f  haproxy.cfg的绝对路径

后端机配置:

service iptables stop           #防火墙关闭

service httpd/nginx start       #开启后端机web服务开启

配置每个服务器页面不同

五、测试

在浏览器输入192.168.0.162 反复刷新出现按一定的顺序出现三个不同的页面

六、扩展:

1.Keepalived

作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

    Layer3Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

    Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

    Layer7Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

2.Varnish一款高性能的开源HTTP加速器

3.Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。

4.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

5.Engine Yard是全球领先的Ruby on RailsPHP云计算平台,可为用户托管、运行自己的应用程序。

6.Mongrel是一种快速的针对RubyHttp 服务器,专门为部署发布rails应用而产生的。

7.NFSNetwork File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样

posted @ 2015-07-24 17:01  烽°火连山楽  阅读(462)  评论(0编辑  收藏  举报