it你好linux学习文档之haproxy架构指南(中文翻译版)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

It你好linux学习文档之----haproxy架构指南(中文翻译版)QQ972322817itnihao@qq.com本文档更新博客地址架构指南(中文翻译版)版本V1.0时间2012-07-18版权GPL作者itnihao邮箱itnihao@qq.com本文档来自haproxy1.4.21官方文档的翻译,如有不妥之处,请邮件联系我,谢谢!注意:本文档1-3.1为此博客翻译章节以后为itnihao翻译===================================================1.基于cookie插入的简单HTTP负载均衡===================================================由于包含脚本的原因,1个webapp经常可以使得前段server有很高的CPUloads。同样,webapp也依赖于没有太多负载性能的后端数据库。用户的上下文存放在server上,而不是在数据库中。因此,采用TCP/IP负载均衡的方简单增加另外的server并不能很好的工作。+-------+|clients|clientsand/orreverse-proxy+---+---+|-+-----+--------+----|_|_db+--+--+(___)|web|(___)+-----+(___)192.168.1.1192.168.1.2采用大型的SMP系统来替换普通server则会比增加低成本的server开销大很多。一个解决方案就是购买低成本的server,并在其上安装app。在其中1个旧的server上安装haproxy,会把负载分散到新的server上。192.168.1.1192.168.1.11-192.168.1.14192.168.1.2-------+-----------+-----+-----+-----+--------+----|||||_|_db+--+--++-+-++-+-++-+-++-+-+(___)|LB1||A||B||C||D|(___)+-----++---++---++---++---+(___)haproxy4cheapwebserversConfigonhaproxy(LB1):-------------------------listenwebfarm192.168.1.1:80modehttpbalanceroundrobincookieSERVERIDinsertindirectIt你好linux学习文档之----haproxy架构指南(中文翻译版)QQ972322817itnihao@qq.com本文档更新博客地址:80cookieAcheckserverwebB192.168.1.12:80cookieBcheckserverwebC192.168.1.13:80cookieCcheckserverwebD192.168.1.14:80cookieDcheck描述:--------------LB1接收clients的requests-如果1个request不包含cookie,则把这个request前传到分配的一个有效的server-作为回报,1个拥有server名称的cookieSERVERID会被插入到response中-当client带有cookieSERVERID=A再此访问时,LB1就会知道这个request必须被前传到serverA.同时删除这个cookie是的server不会看到它-当serverwebA宕机时,request会被前传至另外一个有效的server,并且重新分配cookie2带cookie前缀的HTTP负载均衡和高可用性2.1带cookie前缀的HTTP负载均衡和高可用性现在你可以不用添加更多的cookie,而是使用已有的cookie。如果应用已经生成J足够跟踪session的SESSIONIDcookie,我们会在看到该cookie时,在它前面加上servername前缀。由于load-balancer变得关键,因此,可以通过利用keepalived使得运行在VRRP模式下的第二台热备它。从网站上下载最新版本的keepalived,并且安装在load-balancerLB1和LB2上。在两个load-balancer(我们仍然使用原始IP)之间,我们使用一个共享IP。在任何时刻只有1个load-balancers处于活跃状态。为了允许proxy在Linux2.4下绑定一个共享IP,需要在/proc中启用如下配置:#echo1/proc/sys/net/ipv4/ip_nonlocal_bindConfigonbothproxies(LB1andLB2):listenwebfarm192.168.1.1:80modehttpbalanceroundrobincookieJSESSIONIDprefixoptionhttpcloseoptionforwardforoptionhttpchkHEAD/index.htmlHTTP/1.0serverwebA192.168.1.11:80cookieAcheckserverwebB192.168.1.12:80cookieBcheckserverwebC192.168.1.13:80cookieCcheckIt你好linux学习文档之----haproxy架构指南(中文翻译版)QQ972322817itnihao@qq.com本文档更新博客地址提示:proxy会修改client和server发出的每个cookie,因此proxy能够访问每个session中的所有request的所有cookie是非常重要的。这意味着不是keepalive(HTTP/1.1),需要使用'httpclose'选项。只有你能确认clients不会使用keepalive,才能删除这个选项。ConfigurationforkeepalivedonLB1/LB2:vrrp_scriptchk_haproxy{#Requireskeepalived-1.1.13scriptkillall-0haproxy#cheaperthanpidofinterval2#checkevery2secondsweight2#add2pointsofprioifOK}vrrp_instanceVI_1{interfaceeth0stateMASTERvirtual_router_id51priority101#101onmaster,100onbackupvirtual_ipaddress{192.168.1.1}track_script{chk_haproxy}}描述:—LB1是VRRP的主(keepalived),LB2是备。他们都监控haproxy进程,并且如果haproxyfailed则降低他们的权重,迁移至另外的节点;—LB1将在IP:192.168.1.1上接收clientrequest—两个LB用他们的内部IP发送健康检测—如果request不包含cookie,request会被前传至1个有效的server—在回复时,如果看到JESSIONIDcookie,proxy会在cookie加上以('~')为分隔符的servername前缀;—如果client再次访问时带着JSESSIONID=A~xxxcookie,LB1会知道这个request必须前传至serverA。在把cookie发送给server之前,cookie中的servername会先被剔除出来。—如果serverwebA宕机,requests会被前传到另外的有效服务器,并且会重新分配cookie;数据流:It你好linux学习文档之----haproxy架构指南(中文翻译版)QQ972322817itnihao@qq.com本文档更新博客地址提示:有时,在一个集群中有一些性能强劲的server,也有一些性能差一些的server。在这种情况下,很有必要告诉haproxy这些server在性能上的差异。假设WebA和WebB是两台老的P3-1.2GHz,WebC和WebD是最新的Opteron-2.6GHz。如果你的application关注CPU,则你可以假设这两台服务器之间的性能比为2.6/1.2。你可以通过使用1-256之间数值标记的weight关键字,告诉haproxy这些性能差异。它可以用这些比例来平滑load:serverwebA192.168.1.11:80cookieAweight12checkserverwebB192.168.1.12:80cookieBweight12checkserverwebC192.168.1.13:80cookieCweight26checkserverwebD192.168.1.14:80cookieDweight26check2.1包含外部L4load-balancers的变化作为基于VRRP主备方案的替代方案,他们也可以使用L4load-balancer(如:Alteon)进行负载,这些L4load-balancer也可以检查这些运行在proxy上的服务:Configonbothproxies(LB1andLB2):listenwebfarm0.0.0.0:80modehttpbalanceroundrobincookieJSESSIONIDprefixIt你好linux学习文档之----haproxy架构指南(中文翻译版)QQ972322817itnihao@qq.com本文档更新博客地址:80cookieAcheckserverwebB192.168.1.12:80cookieBcheckserverwebC192.168.1.13:80cookieCcheckserverwebD192.168.1.14:80cookieDcheckdontlognull选项用来防止记录Alteon发出的健康检测。如果一个session交互没有数据,这个session就不会被记录。ConfigontheAlteon:/c/slb/real11enanameLB1rip192.168.1.3/c/slb/real12enanameLB2rip192.168.1.4/c/slb/group10nameLB1-2metricroundrobinhealthtcpadd11add12/c/slb/virt10enavip192.168.1.1/c/slb/virt10/servicehttpgroup10提示:Alteon上的健康检测被设置为'tcp',用来防止proxy把连接前传。Alteon也可以设置为'http',但是这样proxy必须把配置Alteon的地址为monitor-net,那样Alteon可以真实的以http会话的方式检测proxy而不会把连接前传到后端的servers。检查下一

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功