CentOS 6.5 HAProxy+apache实现web服务动静分离

简介:

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

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

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

实现过程图:

wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg


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

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

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

wKiom1NpycrTigk9AAFTVY806zA030.jpg

[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    # 如果登录成功就可以管理在线服务器

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

wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg

wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg

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

wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg

wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg

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

wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg

wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg


总结:

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










本文转自 wei0164 51CTO博客,原文链接:http://blog.51cto.com/tanxw/1407694,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
92 3
|
2月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
305 1
|
2月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
71 3
|
1月前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
51 0
|
2月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
59 1
|
3月前
|
监控 Apache
HAProxy的高级配置选项-Web服务器状态监测
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行Web服务器状态监测,包括基于四层传输端口监测、基于指定URI监测和基于指定URI的request请求头部内容监测三种方式,并通过实战案例展示了配置过程和效果。
103 8
HAProxy的高级配置选项-Web服务器状态监测
|
3月前
|
缓存 前端开发 Java
打造未来兼容的Web应用:Apache Wicket引领响应式设计的热潮
【9月更文挑战第4天】在软件开发领域,构建响应式Web应用至关重要。Apache Wicket作为一个强大的Java框架,支持响应式设计,确保应用在不同设备上均有出色体验。本文通过示例代码介绍使用Wicket的最佳实践,涵盖页面与组件模型、CSS媒体查询及自定义标记处理器的应用。同时,文章强调了优化加载时间、增强交互性和提升可访问性的重要性,帮助开发者打造高性能且美观的Web应用。
62 3
|
3月前
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
97 1
|
4月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
135 0
|
4月前
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
61 0