HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

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

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
                                                                         --来自百度百科

实现过程图:

第一步:安装httpd、php以及haproxy,这里我们直接用yum来安装即可,这里我们使用三台虚拟机来做测试,前端一台haproxy做调度,后端两台httpd服务器提供web服务,在做动静分离时时前端haproxy来判断动态和静态内容分别调度到哪台服务器上;

[root@node0 ~]# yum -y install httpd php haproxy

第二步:安装好之后给这三台虚拟配置好相关的网络设备以及提供相关的测试页面等,在eth1这张网卡上选择相同的一个通信通道,node0这台虚拟机上haproxy的主机,node1和node2是不同的两台后端提供web服务器的虚拟主机;

[root@node0 ~]# ifconfig eth1 192.168.27.10/24 up   # 给eth1配置ip地址
[root@node0 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:BA  
         inet addr:172.16.27.88  Bcast:172.16.255.255  Mask:255.255.0.0
         inet6 addr: fe80::20c:29ff:feb2:adba/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:11122303 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1193136 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:697850934 (665.5 MiB)  TX bytes:74549101 (71.0 MiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:C4  
         inet addr:192.168.27.10  Bcast:192.168.27.255  Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:feb2:adc4/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)
[root@node0 ~]# 

在node1和node2上设置好相关配置,选择虚拟机上的VMnet2与haproxy上的eth1的同一通信通道,再配置IP地址和默认网关接口,而后再提供不同的页面以便测试用;

[root@node1 ~]# ifconfig eth0 192.168.27.18/24 up

[root@node1 ~]# route add defaulte gw 192.168.27.18  # 网关指向haproxy主机的eth1地址

[root@node1 ~]# ping 192.168.27.10  # ping一下haproxy的节点看是否ping通

[root@node1 ~]# vim /var/www/html/index.html

<h1>node1.tanxw.com</h1>

[root@node1 ~]# service httpd start # 配置好之后就把web服务启动起来,再访问测试一下,测试的连接改为桥接方式

[root@node2 ~]# ifconfig eth0 192.168.27.19/24 up

[root@node2 ~]# route add defaulte gw 192.168.27.18  # 网关指向haproxy主机的eth1地址

[root@node2 ~]# ping 192.168.27.10  # ping一下haproxy的节点看是否ping通

[root@node2 ~]# vim /var/www/html/index.php

<h1>node2.tanxw.com</h1>

<?php

phpinfo();

?>

[root@node2 ~]# service httpd start # 配置好之后就把web服务启动起来,再访问测试一下,测试的连接改为桥接方式

第三步:配置haproxy的相关配置信息;

############## 以上的使用默认配置就可以了 #######################

frontend web *:80   # *表示haproxy监听所有地址,监听的端口为80
   # 定义访问控制,表示以url以.css .js .html .php结尾的分别调度到哪台服务器上访问
    acl url_static       path_end       -i .css .js .html    
    acl url_dynamic      path_end       -i .php

# usr_backend表示使用backend服务,if表示如果满足url_static这个条件就调度到这台服务器上
    use_backend        static          if url_static    
    default_backend    dynamic

backend static   # 定义调用后端的静态页面的服务器上
    server node1 192.168.27.18:80 check inter 3000 rise 2 fall 2 maxconn 5000
backend dynamic  # 定义调用后端的动态页面的服务器上
    server node2 192.168.27.19:80 check inter 3000 rise 2 fall 2 maxconn 5000   
listen statspage # 定义监控管理接口的界面
    bind *:8888    # 定义访问页面端口
    stats enable    # 启用管理界面
    stats hide-version    # 隐藏版本
    stats uri /admin?stats    # 访问路径
    stats auth xiao:linux    # 访问时需要验证登录
    stats admin if TRUE    # 如果登录成功就可以管理在线服务器

第四步:登录到我们配置好的管理界面:

第五步:配置好相关的配置之后就可以测试一下了,

最后我们再分别对这两个页面的请求做一下压力测试看看:

总结:

HAProxy是一款比较轻量级的负载均衡服务器,特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

本文出自 “温水煮青蛙” 博客,请务必保留此出处http://tanxw.blog.51cto.com/4309543/1407694

HAProxy+apache实现web服务动静分离的更多相关文章

  1. CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  2. Haproxy 基础详解及动静分离配置

    haproxy 介绍 1 工作在ISO 七层 根据http协议(或者工作在ISO四层 根据tcp协议) 提供web服务的负载均衡调度器 负载均衡调度器分类 工作在四层: # lvs 工作在七层: # ...

  3. HAproxy的安装配置及动静分离

    /////////////////////////////目录//////////////////////////////////////////一.安装HAproxy二.编写HAproxy启动脚本三 ...

  4. WEB服务动静结合

    基本介绍 1)WEB服务仅能处理静态请求,如果处理动态请求则需要对应的动态资源服务软件,即:应用程序服务软件 2)常见的应用服务软件有:PHP.Java.Python等 3)问题:WEB服务如何与外部 ...

  5. 【nginx网站性能优化篇(2)】反向代理实现Apache与Nginx的动静分离(LNMPA)

    为什么要使用反向代理 具体请参考这篇博文:[Linux常识篇(1)]所谓的正向代理与反向代理 在虚拟机上配置反向代理的步骤 首先假设你已经假设好了LNMP架构了,这时我们还要安装Apache和php, ...

  6. 【原创】Apache和Tomcat实现动静分离

    集群中每个节点都启用了页面静态化功能,所以,为了防止单个节点刷新造成找不到页面问题,将每个节点刷新的页面都放入apache虚拟目录下,由apache统一来处理.静态页面由apache处理,动态页面仍然 ...

  7. HAproxy+varnish动静分离部署wordpress

    author:JevonWei 版权声明:原创作品 实验背景:将wordpress应用部署在后端服务器上,使用HAProxy做代理服务器,Varnish做缓存服务器,后端有四台web服务器,web1和 ...

  8. HAproxy指南之haproxy实现动静分离(案例篇)

    HAproxy指南之haproxy实现动静分离(案例篇) 转自   https://blog.51cto.com/blief/1751806   实际应用环境中,往往需要根据业务请求将相关不同请求跳转 ...

  9. Nginx之动静分离

    为什么要动静分离呢? 拿Nginx来说,Nginx是Web服务器,仅仅只能处理静态资源(例如js,img,css等等),而Tomcat属于应用服务器既能处理静态资源又能处理动态资源(例如jsp,fre ...

随机推荐

  1. Android GPS获取当前经纬度坐标

    APP中可能会遇到一种需求,就是将当前所在位置的坐标传到server上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过Android API来实现,另外一种通过百度地图API来实现,第三种通过天 ...

  2. Installing IIS 8.5 on Windows Server 2012 R2

    原文 Installing IIS 8.5 on Windows Server 2012 R2 Introduction This document describes how to install ...

  3. Python3.2官方文件翻译-工具列表和十进制浮点计算

    8.7 列表工具 许多数据结构需要通过内置列表类型来满足.但,有时候在不同的性能取舍需要选择一个实现. Array模块能提供一个像列表的array对象,它只能存储同类数据而且更加简洁. 接下来样例展示 ...

  4. SQL Server 备份和还原

    SQL Server 备份和还原   SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...

  5. 仿jQuery之链式调用

    链式调用的形式其实就是对象调用一连串的方法.为什么能连续调用这么多的方法?因为调用方法返回调用的对象,于是乎就可以一如既往,一往无前地调用下去.链式调用的原理就是在方法中返回执行上下文this,每次调 ...

  6. 《CS:APP》 chapter 8 Exceptional Control Flow 注意事项

    Exceptional Control Flow The program counter assumes a sequence of values                            ...

  7. C#从SQL server数据库中读取l图片和存入图片

    原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...

  8. android工程实现换壁纸功能(转)

    最近工作要实现换壁纸小功能,将代码做成demo发出来 没有采用zip格式换肤,因为只是更换一张图片背景 1.将三张图放入drawable-hdpi,我放的是480*800的 2.用sharedPref ...

  9. JS的parent对象

    top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...

  10. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...