一、四层和七层负载均衡的区别

所谓的四层就是ISO参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是 通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。常见的基于四层的负 载均衡器有LVS、F5等。

以常见的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN请求时,会通 过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标IP地址修改为后端 服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由 器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。

同理,七层负载均衡器也称为七层交换机,位于 OSI 的最高层,即应用层,此时负载均衡器支持多种应用协议,常见的有 HTTP、FTP、SMTP 等。七层负载均衡器可以根据报文内 容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。比如,对于 Web 服务器的负载均衡,七层负载均衡器不但可以根据“IP+端口”的方式进行负载分流,还可以根据网站的 URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台 Web 服务器分别对应中英文两个网站,两个域名分别是 A、B,要实现访问 A 域名时进入中 文网站,访问 B 域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负 载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有 HAproxy、Nginx 等。

这里仍以常见的TCP应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过来的报文内容,然后再根据该 报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观 整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。

对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下,

负载均衡器与客户端及后端的服务器会分别建立一次TCP连接,而在四层负载均衡模式下, 仅建立一次TCP连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均 衡的处理能力也必然低于四层模式的负载均衡。

二、ALVS的异同

下面就这两种负载均衡软件的异同做一个简单总结:

1)两者都是软件负载均衡产品,但是LVS是基于Linux操作系统实现的一种软负载均衡,而HAProxy是基于第三应用实现的软负载均衡。

2)LVS是基于四层的IP负载均衡技术,而HAProxy是基于四层和七层技术、可提供TCP和HTTP应用的负载均衡综合解决方案。

3)LVS工作在ISO模型的第四层,因此其状态监测功能单一,而HAProxy在状态监测 方面功能强大,可支持端口、URL、脚本等多种状态检测方式。

4)HAProxy虽然功能强大,但是整体处理性能低于四层模式的LVS负载均衡,而LVS拥有接近硬件设备的网络吞吐和连接负载能力。

综上所述,HAProxy和LVS各有优缺点,没有好坏之分,要选择哪个作为负载均衡器,要以实际的应用环境来决定。

三、快速安装A集群软件

可以在HAProxy的官网http://www.haproxy.org/下载HAProxy的源码包,这里以操作系统Centos6.6 X64版本为例,下载的HAProxy是haproxy-1.6.7.tar.gz,安装过程如 下:

#tar -zxvf haproxy-1.6.7.tar.gz

#cd haproxy-1.6.7

#make TARGET=linux26 PREFIX=/usr/local/haproxy

注:此处TARGET=linux26是填写系统内核版本 ,内核版本怎么看. uname -r 。如我的版本是2.6.32-504.el6.x86_64, 直接填写26即可。

#make install PREFIX=/usr/local/haproxy

将haproxy安装到/usr/local/haproxy下

#mkdir  /usr/local/haproxy/conf

haproxy默认不创建配置文件目录,这里是创建haproxy配置文件目录

# cp examples/option-http_proxy.cfg  /usr/local/haproxy/conf/haproxy.cfg

#haproxy安装完成后,默认安装目录中没有配置文件,这里是将源码包里面的示例配置文件拷贝到配置文件目录

这样,HAProxy就安装完成了。

四、A基础配置文件详解

HAProxy配置文件根据功能和用途,主要有5个部分组成,但有些部分并不是必须的, 可以根据需要选择相应的部分进行配置。

1)   global部分 用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。

2)   defaults部分 默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的frontend、

backend和listen部分中,因此,如果某些参数属于公用的配置,只需在defaults部分添加 一次即可。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么defaults部分参数对应的值自动被覆盖。

3)   ronte部分

此部分用于设置接收用户请求的前端虚拟节点。frontend是在HAProxy1.3版本之后才引 入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了 HAProxy配置文件的复杂性。frontend可以根据ACL规则直接指定要使用的后端backend。

4)   backend部分 此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前

端用户的请求。添加的真实服务器类似于LVS中的real server节点。

5)   ste部分

此部分是frontend部分和backend部分的结合体。在HAProxy1.3版本之前,HAProxy的 所有配置选项都在这个部分中设置。为了保持兼容性,HAProxy新的版本仍然保留了listen 组件的配置方式。目前在HAProxy中,两种配置方式任选其一即可。

下面是一个完整的HAProxy配置文件

Global

log127.0.0.1 local0 info

maxconn4096

usernobody

groupnobody

daemon

nbproc 1

pidfile/usr/local/haproxy/logs/haproxy.pid

defaults

mode http

retries 3

timeoutconnect 10s

timeoutclient 20s

timeoutserver 30s

timeoutcheck 5s

frontend www

bind *:80

mode    http

option httplog

option forwardfor

option httpclose

log    global

#acl host_wwwhdr_dom(host)   -i  www.zb.com

#acl host_imghdr_dom(host)   -i  img.zb.com

#use_backendhtmpool   if  host_www

#use_backendimgpool   if  host_img

default_backend     htmpool

backend htmpool

mode http

optionredispatch

optionabortonclose

balance    static-rr

cookieSERVERID

optionhttpchk GET /index.jsp

server237server 192.168.81.237:8080 cookie server1weight 6 check inter 2000 rise2 fall 3

serveriivey234 192.168.81.234:8080 cookie server2weight 3 check inter 2000 rise 2 fall 3

backend imgpool

mode   http

optionredispatch

optionabortonclose

balance    static-rr

cookieSERVERID

optionhttpchk GET /index.jsp

serverhost236 192.168.81.236:8080 cookie server1 weight 6 check inter 2000rise 2fall 3

listen admin_stats

bind0.0.0.0:9188

mode http

log127.0.0.1 local0 err

statsrefresh 30s

stats uri/haproxy-status

statsrealm welcome login\ Haproxy

stats authadmin:admin~!@

statshide-version

statsadmin if TRUE

五、启动与测试hprox的负载均衡功能

1、启动与管理haproxy

启动服务:

# /usr/local/haproxy/sbin/haproxy -f      /usr/local/haproxy/conf/haproxy.cfg

重启服务:

# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg \

-st `cat/usr/local/haproxy/logs/haproxy.pid`

停止服务:

# killall haproxy

六、ro负载均衡器算法与使用技巧

1、HAProxy支持的负载均衡算法

(1)、roundrobin,表示简单的轮询,负载均衡基础算法

(2)、static-rr,表示根据权重

(3)、leastconn,表示最少连接者先处理

(4)、source,表示根据请求源IP

(5)、uri,表示根据请求的URI;

(6)、url_param,表示根据请求的URl参数来进行调度

(7)、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8)、rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

2、常用的负载均衡算法

(1)轮询算法:roundrobin

(2)根据请求源IP算法:source

(3)最少连接者先处理算法:lestconn

七、通过AACL规则实现智能负载均衡

由于HAProxy可以工作在七层模型下,因此,要实现HAProxy的强大功能,一定要使用强大灵活的ACL规则,通过ACL规则可以实现基于HAProxy的智能负载均衡系统。HAProxy 通过ACL规则完成两种主要的功能,分别是:

1)通过设置的ACL规则检查客户端请求是否合法。如果符合ACL规则要求,那么就将

放行,反正,如果不符合规则,则直接中断请求.

2)符合ACL规则要求的请求将被提交到后端的backend服务器集群,进而实现基于

ACL规则的负载均衡。

HAProxy中的ACL规则经常使用在frontend段中,使用方法如下:

acl     自定义的acl名称  acl方法  [匹配的路径或文件]

其中:

acl:是一个关键字,表示定义ACL规则的开始。后面需要跟上自定义的ACL名称。

acl方法:这个字段用来定义实现ACL的方法,HAProxy定义了很多ACL方法,经常使用的方法有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、 path_beg、path_end等。

-i:表示忽略大小写,后面需要跟上匹配的路径或文件或正则表达式。

与ACL规则一起使用的HAProxy参数还有use_backend,use_backend后面需要跟上一个backend实例名,表示在满足ACL规则后去请求哪个backend实例,与 use_backend对应的还有default_backend参数,它表示在没有满足ACL条件的时候默认使用哪个后端backend。

下面列举几个常见的ACL规则例子:

acl www_policy        hdr_reg(host)           -i       ^(www.z.cn|z.cn)

acl bbs_policy           hdr_dom(host)         -i       bbs.z.cn

acl url_policy             url_sub    -i     buy_sid=

use_backend    server_www    if  www_policy

use_backend    server_app    if  url_policy

use_backend    server_bbs    if  bbs_policy

default_backend  server_cache

八、使用HAProxy的Web监控平台

HAProxy虽然实现了服务的故障转移,但是在主机或者服务出现故障的时候,并不能发出通知告知运维人员,这对于及时性要求很高的业务系统来说,是非常不便的,不过,HAProxy 似乎也考虑到了这一点,在新的版本中HAProxy推出了一个基于Web的监控平台,通过这 个平台可以查看此集群系统所有后端服务器的运行状态,在后端服务或服务器出现故障时,

监控页面会通过不同的颜色来展示故障信息,这在很大程度上解决了后端服务器故障报警的 问题,运维人员可通过监控这个页面来第一时间发现节点故障,进而修复故障。

登录地址是:http://IP:9188/haproxy-status

用户名和密码:就是在配置文件里设置的 admin、admin~!@

九、pro高可用负载均衡系统

1、高可用HAproxy集群系统的拓扑结构

在备机重新安装haproxy,然后配置haproxy,这个不再介绍,下面直接给出配置好的 keepalived.conf文件内容。在haproxy-server主机上,keepalived.conf的内容如下:

global_defs

{notification_email

{

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id HAProxy_DEVEL

}

vrrp_script check_haproxy {

script "killall -0 haproxy"

#设置探测 haproxy 服务运行状态的方式,这里的“killall -0 haproxy”仅仅是检测 haproxy 服务状态

interval 2

}

vrrp_instance HAProxy_HA {

state BACKUP

#在 haproxy-server 和 backup-haproxy 上均配置为 BACKUP interface eth0

virtual_router_id 80

priority 100

advert_int 2

nopreempt     #不抢占模式,只在优先级高的机器上设置即可,优先级低的机器不设置 authentication {

auth_type PASS

auth_pass 1111

}

track_script

{check_haproxy

}

virtual_ipaddress {

192.168.66.10/24 dev eth0   #HAProxy 的对外服务 IP,即 VIP

}

}

最后,将keepalived.conf文件复制到backup-haproxy服务器上对应的位置,然后将 keepalived.conf文件中priority值修改为90,由于配置的是不抢占模式,因此,还需要在backup-haproxy服务器上去掉nopreempt选项。

完成所有配置后,分别在haproxy-server和backup-haproxy主机上依次启动haproxy服 务和keepalived服务。注意,这里一定要先启动haproxy服务,因为keepalived服务在启动 的时候会自动检测 haproxy服务是否正常,如果发现haproxy服务没有启动,那么主、备keepalived将自动进入fault状态。在依次启动服务后,在正常情况下VIP地址应该运行在 haproxy-server服务器上,通过命令“ipa”可以查看VIP是否已经正常加载。

本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1833986,如需转载请自行联系原作者

HAproxy+keepalived安装配置教程相关推荐

  1. haproxy + keepalived 安装配置

    haproxy + keepalived 安装配置 备注: web server:192.168.10.53 web server:192.168.10.81 haproxy + keepalived ...

  2. haproxy安装配置及haproxy+keepalived简单配置

    一.haproxy安装 操作系统:centos6.5 iptables关闭和selinux为disabled haproxy是一个提供高可用.负载均衡的开源的代理服务器,haproxy安装可以源码安装 ...

  3. lvs keepalived 安装配置详解【转】

    lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...

  4. Redhat5下haproxy+keepalived+nginx配置笔记

    Redhat5下haproxy+keepalived+nginx配置笔记 ----by knight HA:高可用性 keepalived个人简单理解就是实现一个虚IP在keepalived主从服务器 ...

  5. centos7 mysql workbench_centOS下mysql workbench安装配置教程

    本文为大家分享了mysql workbench安装配置教程,供大家参考,具体内容如下 step0:安装mysql 在按照workbench之前,先安装mysql.指令是 yum install mys ...

  6. mysql5.7.20非安装版_mysql5.7.20\5.7.21免安装版安装配置教程

    mysql 下载安装配置 5.7.20 / 5.7.21,供大家参考,具体内容如下 1.下载mysql,下载地址 选择操作系统和版本,我是64位win10,点击 Download 后会跳到Oracle ...

  7. mysql5.17免安装教程_详细介绍MySql5.7.17免安装配置教程的示例代码

    这篇文章给大家详细介绍了MySql 5.7.17免安装配置教程,首先大家需要先下载mysql 5.7.17 的安装包,然后解压,具体配置过程大家通过本文一起学习吧 1.下载mysql-5.7.17-w ...

  8. Windows上PostgreSQL安装配置教程

    这篇文章主要为大家详细介绍了Windows上PostgreSQL安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PostgreSQL的扩展PostGIS是最著名的开源GIS数据库.  ...

  9. php5.4 windows2003,PHP实战:Windows2003下php5.4安装配置教程(IIS)

    <PHP实战:Windows2003下php5.4安装配置教程(IIS)>要点: 本文介绍了PHP实战:Windows2003下php5.4安装配置教程(IIS),希望对您有用.如果有疑问 ...

最新文章

  1. Struts2利用iText导出word文档(包含表格)
  2. Tomcat7.0安装配置
  3. OpenCV3编程入门(毛星云)之用滚动条控制两图片的混合
  4. LiveVideoStackCon讲师热身分享 ( 十三 ) —— Intel QSV技术在FFmpeg中的实现与使用
  5. MATLAB的VLFeat工具箱
  6. Galaxy Digital CEO:比特币应能守住4万美元关口
  7. 优先级队列实现php,带优先级的队列 - PHP实现
  8. Java进程中的堆和栈_对于JVM,你就只知道堆和栈吗?
  9. 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
  10. 【axure手机原型】移动应用原型设计新手引导
  11. 用C 语言实现斐波那契数列
  12. 联想e570c固态接口支持协议_thinkpad e570c15.6英寸笔记本电脑支持什么固态硬盘接口...
  13. 易基因项目文章 | 90天见刊,易基因m6A RNA甲基化(MeRIP)+转录组组学研究
  14. 手机开启自动调节亮度,到底是省电还是耗电?为何?
  15. 房价基本上决定于货币政策.----看中国货币发行量增长
  16. 再见华为!一位嵌入式大佬的8年励志总结
  17. 区块链关键技术研究进展
  18. 自制动漫小姐姐图片api
  19. (6CBIR模拟问题)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署...
  20. cell组件适配BCG风格--适配器模式和查表法

热门文章

  1. Spring Boot-yaml格式,eureka客户端配置default-zone报错问题
  2. Nokia S60v5 javaME 禁用 softkeypad
  3. OpenCV3.1 xfeatures2d::SIFT 使用
  4. 锁屏面试题百日百刷-java大厂八股文(day2)
  5. [HDU6757]Hunting Monsters
  6. [Java Path Finder][JPF学习笔记][4]将JPF源码导入Eclipse
  7. 斯伦贝谢宣布2020年第二季度财务业绩
  8. webview开发中使用onShowFileChooser实现web页打开照相机或者图片浏览
  9. 通过交换相邻数来完成排序所需要的最少交换次数
  10. 人工外呼和智能机器人人外呼的优缺点