设为首页 收藏本站
查看: 1209|回复: 0

[经验分享] 2015-07-22-24Haproxy学习

[复制链接]

尚未签到

发表于 2015-9-4 14:27:26 | 显示全部楼层 |阅读模式
  
一、HAProxy简介:
    HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理。
     HAProxy适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。
     HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
(我的理解:作为一个代理,根据一定的规则,将请求分发到不同的服务器上)
二、特点:
(1)它可以代理任何基于TCP的东西--而不仅仅是HTTP。
(2)拥有多种负载均衡算法,包括“最少连接数(least connections)”策略,将后端服务器和最少连接数关联起来;
(3)提供专用的状态页来告诉你后端服务器的状态、运行时间以及很多齐全的指标。
(4)请求可以通过各种各样的东西发送:cookies、URL字符串、客户端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:(默认参数)配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
    frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
    backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;
    listen:Frontend和Backend的组合体。
  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                      #代表用户id为99的nobody用户执行
        gid 99                      #代表群组id为99的nobody群组
        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层,及应用层,原理分别如下:
    Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
    Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
    Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
2.Varnish一款高性能的开源HTTP加速器
3.Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
4.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
5.Engine Yard是全球领先的Rubyon Rails和PHP云计算平台,可为用户托管、运行自己的应用程序。
6.Mongrel是一种快速的针对Ruby的Http 服务器,专门为部署发布rails应用而产生的。
  7.NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109463-1-1.html 上篇帖子: OpenFire源码学习之三十:haproxy负载均衡 下篇帖子: HAProxy+apache实现web服务动静分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表