高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)

第一章:HAproxy简介及安装配置


对Linux有兴趣的朋友加入QQ群:476794643 在线交流

本文防盗链:http://zhang789.blog.51cto.com

目录

  1. HAproxy简介
  2. 为什么要使用HAproxy
  3. haproxy 性能特点
  4. 负载均衡器的性能评估因素
  5. 安装HAproxy
  6. haproxy案例4:实现web负载

由于字体过多分开写的,全系列文章链接

第一章:HAproxy简介及安装配置 http://zhang789.blog.51cto.com/11045979/1873432
第二章:HAproxy配置文件详解以及HAproxy的ACL详解 http://zhang789.blog.51cto.com/11045979/1873435
第三章:HAproxy实例

http://zhang789.blog.51cto.com/11045979/1873436

HAproxy简介

1、HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 
2、HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。(为了解决上下文切换,可以像nginx一样绑定cpu上面)

为什么要使用HAproxy

1.免费开源,稳定性也是非常好,这个可通过一些项目可以看出来,单Haproxy也跑得不错,稳定性可以与硬件级的F5相媲美; 
2. 根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps usingMyricom’s 10GbE NICs (Myri-10G PCI-Express),这个数值作为软件级负载均衡器是相当惊人的。 
3. HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。 
4.HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用,这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。 
5. HAProxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。 
6. 自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。 
7. HAProxy支持虚拟主机。 
8. HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

注,在功能上,能以proxy反向代理方式实现Web均衡负载,这样的产品有很多。包括lvs,Nginx,ApacheProxy,lighttpd等。国内生产环境上使用Haproxy的公司很多,例如淘宝的CDN系统,

haproxy 性能特点

HAProxy借助于OS上几种常见的技术来实现性能的最大化。

1、单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。 
2、O(1)事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。 
3、在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽; 
4、借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting); 
5、MRU内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长; 
6、树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列; 
7、优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域; 
8、精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;


所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。


在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。

负载均衡器的性能评估因素

三个重要因素:

1、会话率 :单位时间内的处理的请求数2、会话并发能力:并发处理能力3、数据率:处理数据能力

经过官方测试统计,haproxy 单位时间处理的最大请求数为20000个,可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。综合上述,haproxy是性能优越的负载均衡、反向代理服务器。

安装HAproxy

1、安装haproxy

[root@localhost ~]# yum -y groupinstall "Development Tools"[root@localhost ~]# yum -y install haproxy

2、配置文件

[root@localhost ~]# rpm -ql haproxy/etc/haproxy   #配置文件目录 /etc/haproxy/haproxy.cfg   #配置文件 /usr/lib/systemd/system/haproxy.service    #启动脚本/usr/sbin/haproxy    #haproxy 命令 /usr/share/man/man1/haproxy.1.gz #man 文档 

3、默认配置文件

[[email protected] haproxy]# cat haproxy.cfg#--------------------------------------------------------------------- # Example configuration for a possible web application.  See the # full configuration options online. # #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt  #官方配置文档,很详细,英文没问题的博友,可以看看# #---------------------------------------------------------------------#---------------------------------------------------------------------# Global settings #全局配置文件#--------------------------------------------------------------------- global     # to have these messages end up in /var/log/haproxy.log you will     # need to:  #配置日志    #     # 1) configure syslog to accept network log events.  This is done     #    by adding the ‘-r‘ option to the SYSLOGD_OPTIONS in     #    /etc/sysconfig/syslog #修改syslog配置文件    #     # 2) configure local2 events to go to the /var/log/haproxy.log     #   file. A line like the following can be added to     #   /etc/sysconfig/syslog  #定义日志设备    #     #    local2.*                       /var/log/haproxy.log     #     log         127.0.0.1 local2 ##全局的日志配置 其中日志级别是[err warning info debug]#local0 是日志设备,必须为如下24种标准syslog设备的一种:#kern user mail daemon auth syslog lpr news#uucp cron auth2 ftp ntp audit alert cron2#local0 local1 local2 local3 local4 local5 local6 local7    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid #将所有进程的pid写入文件启动进程的用户必须有权限访问此文件。    maxconn     4000 #最大连接数,默认4000    user        haproxy #用户    group       haproxy #组    daemon ##创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"    # turn on stats unix socket  #unix socket 文件    stats socket /var/lib/haproxy/stats#---------------------------------------------------------------------# common defaults that all the ‘listen‘ and ‘backend‘ sections will # use if not designated in their block  #默认的全局设置,这些参数可以被利用配置到frontend,backend,listen组件#--------------------------------------------------------------------- defaults    mode                    http  #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK    log                     global #采用全局定义的日志    option                  httplog #日志类别http日志格式    option                  dontlognull #不记录健康检查的日志信息    option http-server-close #每次请求完毕后主动关闭http通道    option forwardfor       except 127.0.0.0/8 #不记录本机转发的日志    option                  redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器    retries                 3 #3次连接失败就认为服务不可用,也可以通过后面设置    timeout http-request    10s  #请求超时    timeout queue           1m #队列超时    timeout connect         10s #连接超时    timeout client          1m #客户端连接超时    timeout server          1m #服务器连接超时    timeout http-keep-alive 10s #长连接超时    timeout check           10s  #检查超时    maxconn                 3000 #最大连接数#---------------------------------------------------------------------# main frontend which proxys to the backends #frontend 与backends  代理配置#--------------------------------------------------------------------- frontend  main *:5000#acl策略配置    acl url_static       path_beg       -i /static /images /javascript /stylesheets     acl url_static       path_end       -i .jpg .gif .png .css .js    use_backend static          if url_static  #满足策略要求,则响应策略定义的backend页面    default_backend             app #不满足则响应backend的默认页面#---------------------------------------------------------------------# static backend for serving up images, stylesheets and such #定义使用静态后端图像,样式表等#--------------------------------------------------------------------- backend static     balance     roundrobin #负载均衡模式轮询    server      static 127.0.0.1:4331 check #服务器定义#---------------------------------------------------------------------# round robin balancing between the various backends #--------------------------------------------------------------------- backend app     balance     roundrobin #负载均衡模式轮询    server  app1 127.0.0.1:5001 check #服务器定义,check进行健康检查    server  app2 127.0.0.1:5002 check     server  app3 127.0.0.1:5003 check     server  app4 127.0.0.1:5004 check

案例:实现web负载

1、node1安装http和测试页面

[root@web1 ~]# yum -y install httpd[root@web1 ~]# cd /var/www/html/[root@web1 html]# echo "<h1>Server WWW node1</h1>" > index.html

2、node2安装http和测试页面

[root@web2 ~]# yum -y install httpd[root@web2 ~]# cd /var/www/html/[root@web2 html]# echo "<h1>Server WWW node2</h1>" > index.html

3、haproxy安装配置

[root@HAproxy ~]# yum -y groupinstall "Development Tools"[root@HAproxy ~]# yum -y install haproxy

4、配置文件

[[email protected] ~]# cat /etc/haproxy/haproxy.cfg ......主要配置函数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 TRUEfrontend main  #定义服务器组    bind *:80    default_backend serverbackend server  #定义服务器    mode http    balance roundrobin    option httpchk HEAD /index.html HTTP/1.0    server node1 192.168.211.140:80 cookie 1 weight 5 check inter 2000 rise 1 fall 1    server node2 192.168.211.128:80 cookie 1 weight 5 check inter 2000 rise 1 fall 1

5、查看监控页面

6、测试

下篇文章:HAproxy配置文件详解以及HAproxy的ACL详解

时间: 2024-10-02 01:06:03

高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)的相关文章

高可用高性能负载均衡软件HAproxy详解指南-第二章(配置文件、关键字、ACL)

第二章:HAproxy配置文件详解以及HAproxy的ACL详解 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 上一篇:第一章:HAproxy简介及安装配置 目录 haproxy 配置文件详解 haproxy 配置文件中的关键字参考 haproxy的ACL 附:一份完整的HAproxy的配置文件 由于字体过多分开写的,全系列文章链接 第一章:HAproxy简介及安装配置 http://zhang789.

高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例

第三章:HAproxy实例 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 上一篇:第二章:HAproxy配置文件详解以及HAproxy的ACL详解 目录 haproxy案例1:定义独立日志文件 haproxy案例2:haproxy统计页面的输出机制 haproxy案例3:动静分离示例: haproxy案例4:实现web负载 haproxy案例5:负载均衡MySQL服务 由于字体过多分开写的,全系列文章链

高性能负载均衡软件 HAProxy

HAProxy 是一个开源的.高性能的.基于TCP(四层)和 HTTP(七层)应用的负载均衡软件 HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接.它的显著优点如下: 1.可靠性和稳定性好 2.支持多达9种负载均衡算法 3.支持虚拟主机和 ACL规则 4.能生成服务器状态监控页面 HAProxy 原理 环境: 1.HaProxy eth0: 192.168.18.10 eth1: 192.168.1.10 2.WebSrv1 eth1: 192.168.1.11 3.WebSr

负载均衡之haproxy详解

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

Haproxy实现web的高可用及负载均衡群集

一,实验架构 本实验由一台Haproxy及两台web服务器组成,最终实现两台web服务器的高可用及负载均衡. haproxy 172.24.3.10 web1 172.24.3.20 web2 172.24.3.25 二,实验步骤 Haproxy 1,安装支持软件  pcre-devel bzip2-devel 2,编译安装haproxy 3,建立haproxy的配置文件 4,修改haproxy的配置文件 5,建立自启动脚本 6,添加防火墙例外 web     //两台web服务器操作均相同 1

Haproxy+keepalived高可用、负载均衡安装部署方案

1     环境说明 前端两台haproxy+keepalived互为主从,提供高可用:另外基于不同域名访问不同的虚拟ip实现负载均衡 1.1     环境描述 服务器A(主.从):eth0:10.241.51.245   eth1:192.168.1.9 服务器B(从.主):eth2:10.241.51.246   eth1:192.168.1.10 服务器C(web01):eth0:10.241.51.247 服务器D(web02):eth0:10.241.51.248 VIP1:10.24

可扩展、高可用、负载均衡网站架构设计方案

可扩展.高可用.负载均衡网站架构设计方案 基本需求: 1.  高可用性:将停止服务时间降低到最低甚至是不间断服务 2.  可扩展性:随着访问的增加,系统具备良好的伸缩能力 3.  可视性:系统.服务的状态处于一个实时的监控之下 4.  高性能高可靠性:经过优化的体系结构及合理的备份策略 5.  安全性:结构上的安全及主机的安全策略 基 本思路 1.对于访问频繁,用户量 大的对象(bbs,blog)采用某种合理的方式负载到多个服务器上.把数据库独立出来,准备2套mysql数据库,以实现 主从复制,

(tengine+keepalived)+(apache+tomcat)+memcached+mysql实现高可用、负载均衡、可扩展架构

目录 1.高可用.负载均衡.可扩展架构的需要背景 2.系统架构 3.系统规划及说明 4.系统部署及测试 5.总结 1.高可用.负载均衡.可扩展架构的需要背景 从互联网诞生以来,网站架构随着互联网的快速发展发生着巨大的变化,现今,数据每天都在以爆炸式的增长,大数据.云计算等概念被业内炒得沸沸扬扬,这些前沿技术也在各行各业落地开花.每一种新技术的提出几乎都会或多或少影响着IT的基础架构,面对数据的快速增长.我们急需一套高可用.负载均衡.可扩展的架构来作为支撑. 2.系统架构 此次博文介绍一套高可用.

利用lvs keepalived配置redis高可用及负载均衡

需求 我们用ES做日志服务,架构是 上游数据来源=>redis=>logstash=>ES redis目前还是单点, 没有做高可用, 现在数据量越来越多, 如果下游消费不出问题还好, redis里面数据来了就走,但是下游一旦出问题, 分给redis的内存半小时就撑满了. 看到redis3.0 beta版本已经提供了集群功能, 但是需要client以集群模式接入, 我们这么多上游用户, 不太可能统一要求他们改造. 公司也有硬件的LB, 同事在E公司的时候就是用的硬件LB. 但接入还要申请,