http://thinkbase.net/w/main/Wiki?action=action_search&text=%22%E4%BD%BF%E7%94%A8+Apache+%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%AE%9E%E7%8E%B0%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%8F%8A%E7%83%AD%E5%A4%87%22
初步设想
- 早些时候在 JavaEye 上看到过一些使用 lighttpd 或者 apache 作前端, 通过负载均衡, 实现高性能的 Web 系统的讨论, 于是留意了一下这方面的技术;
- 考虑到对不同的 App Server 而言, 实现 Session 复制的配置各不相同(通常是需要配置集群), 因此从通用的角度, 觉得使用 session sticky 方式实现的负载均衡比较方便;
- 由于没有看到有资料说 lighttpd 能够实现 session sticky, 所以决定先使用 Apache 试试.
参考资料:
环境准备
- 下载安装 Apache, 测试时使用的是 XAMPP ( http://www.apachefriends.org/en/xampp.html ) 的 Linux 版本 (xampp-linux-1.5.4.tar.gz), 按照安装说明, 解压到 /opt/lampp 目录下就可以使用了;
- 启动 Apache:
sudo /opt/lampp/lampp startapache
- 重新加载 Apache:
sudo /opt/lampp/lampp reloadapache
(在 httpd.conf 文件被修改后可以不重启, 而是直接 reload 就可以了)
- 停止服务:
sudo /opt/lampp/lampp stop
- 准备两个运行同样程序的 Web 服务器, 这里使用的是 Tomcat 5.5, 并使用一个 jsp 文件作为测试文件(相关源代码参见文章最后的附件);
- 这两个 Tomcat 服务器需要将 HTTP 服务配置在不同的端口上, 同时由于测试时运行在同一台机器上, 其它端口也需要避免冲突;
- 下载安装 JMeter ( jakarta-jmeter-2.2), 用于压力测试, 验证负载均衡的效果;
测试 jsp 文件的说明
测试用的 jsp 文件 (test.jsp) 具有如下功能:
- 显示当前运行的服务器的 IP 地址及端口号, 这样从返回的页面就能够知道是运行在哪一个 Web 服务器上的了;
- 统计每个客户端(不同的 session)向同一台服务器发出请求的次数, 通过这个计数可以验证是否实现了 session sticky;
- 通过 clear 请求参数(即 .../test.jsp?clear=1)清除请求次数的计数结果, 以便进行下一次测试;
- 模拟 JSESSIONID +jvmRoute 的机制, 自行实现了一个 STICK_PORT_TOKEN 的 Cookie, 直接使用不同服务器的 HTTP 端口号作为 route;
- 说明1: 考虑到方案的通用性, 这里没有直接使用 JSESSIONID +jvmRoute 的机制;
- 说明2: 虽然作为一个例子, 相关代码是写死在 jsp 文件中的, 但是这个机制可以很方便的用一个 Filter 统一实现;
Apache 的配置
编辑 Apache 的 httpd.conf 文件(如果使用 xampp-linux 的话, 应该在 /opt/lampp/etc 目录下), 在文件的最后加上如下内容:
###############################################################################
# Reverse Proxy and Load Balance ##############################################
###############################################################################
# 1)简单的反向代理
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /1 http://localhost:8080/test
#ProxyPassReverse /1 http://localhost:8080/test
ProxyPass /2 http://localhost:18080/test
#ProxyPassReverse /2 http://localhost:18080/test
# 2)非 stickysession 的 balance
ProxyPass /3 balancer://non-sticky-cluster nofailover=On
<Proxy balancer://non-sticky-cluster>
BalancerMember http://localhost:8080/test
BalancerMember http://localhost:18080/test smax=10
</Proxy>
# 3)stickysession 的 balance
ProxyPass /4 balancer://sticky-cluster stickysession=STICK_PORT_TOKEN nofailover=On
<Proxy balancer://sticky-cluster>
BalancerMember http://localhost:8080/test route=8080
BalancerMember http://localhost:18080/test route=18080 loadfactor=2
</Proxy>
这个配置分为3个部分, 包括了 1)简单的反向代理, 2)非 session sticky 的 load balance, 以及 3)session sticky 的 load balance 三种方式的配置(这里假设两个 Tomcat 服务器的 HTTP 服务被配置在 8080 和 18080 端口), 其中第 2) 和 3) 的配置中 "nofailover=On" 适合于没有 session 复制的情况下, 这种情况下, 如果其中一台 HTTP 服务器出错, 那么原来分配在这个出错机器上的浏览器客户端不会被自动转移到另外的服务器上, 必须重新启动浏览器才能将请求分配到另外一台服务器上去.
使用 JMeter 测试结果
使用 JMeter 对 "3)session sticky 的 load balance" 的效果进行测试, 通过压力测试的方式, 检查两台 Tomcat 服务器被分配到的请求数量, 相关的测试脚本参见文章最后的附件.
注意如果重复测试, 在下一次测试开始之前请对每个 Tomcat 服务器执行 .../test.jsp?clear=1 的请求, 清除上一次的计数结果.
从下图的测试结果可见: 50个线程中有21个被分配在 8080 端口的服务器上, 29个则被分配到 18080 端口的服务器; 另外, 所有的 session 请求次数都是 20 次, 说明 session sticky 达到了预期的效果.
附件
后记
如何禁用 XAMPP 自带的内容, 使之成为一个单纯的转发服务器:
- 1)注释掉 /opt/lampp/etc/httpd.conf 中 "Include etc/extra/httpd-xampp.conf" 这一行;
- 2)删除或者移走 /opt/lampp/htdocs 目录下的内容(但是此目录需要保留).
分享到:
相关推荐
在构建高性能、高可用性的Web服务时,使用Nginx+keepalived+tomcat的组合可以实现强大的负载均衡和故障转移功能。这个方案的核心思想是利用Nginx作为前端反向代理服务器,通过keepalived来确保服务的高可用性,并将...
测试包括Apache与PHP-FPM的动态处理能力,Varnish与Apache的静态内容服务,Nginx的反向代理功能,以及LVS的负载均衡效果。这有助于发现并解决潜在问题,确保系统的稳定性和高性能。 4. **Varnish的优势与不足** ...
Nginx则以其高效的反向代理、负载均衡和静态资源处理能力而闻名。它的事件驱动模型和非阻塞I/O机制使其在处理大量并发连接时表现出色。Nginx通常被用作前端服务器,负责接收客户端请求,并根据配置将请求转发到后端...
在双机热备环境下,Apache可以通过负载均衡或反向代理的方式,确保用户可以通过单一入口访问NameNode的服务,无论哪个节点是活动的。 5. 部署步骤: - 安装和配置DRBD,确保两台服务器之间的数据同步。 - 设置...
1. **Nginx简介**:Nginx的起源、设计理念及主要特点,包括其反向代理、负载均衡和静态文件处理等能力。 2. **安装与配置**:介绍在各种操作系统(如Linux、Windows)上安装Nginx的过程,以及基础的配置文件结构和...
Tomcat集群的配置有多种方法,包括DNS轮询、Apache反向代理和Apache mod_jk模块。每种方法都有其优缺点: - **DNS轮询**:简单配置,但服务器故障时用户可能因DNS缓存无法访问,且需暴露所有服务器端口,安全性较低...
Nginx以其高并发处理能力和低资源消耗闻名,通常用于处理静态内容、反向代理、负载均衡等。Nginx支持select/poll模型,处理数以万计的并发连接,且在保持低延迟的同时提供了良好的性能。 #### PHP与MySQL的关联 PHP...
这种功能使得网站可以实现负载均衡,提高可用性和响应速度。 2. **负载均衡器**:作为标签所示,Nginx具有内置的负载均衡算法,如轮询、权重轮询、最少连接数和IP哈希等,可以根据不同的策略将请求分发到后端服务器...
1. **反向代理层**:此层为核心层,通过部署两台高性能服务器并安装Nginx反向代理服务,再配合Keepalived实现双机热备。该层负责数据转发和负载均衡,以确保服务的高可用性和稳定性。 2. **业务层**:此层主要负责...
1. 使用Linux作为基础操作系统,结合成熟软件,如MySQL数据库(提供数据存储和双机热备)、Apache+PHP(提供稳定且高性能的Web服务)和Nginx(作为反向代理服务器,实现负载均衡)。 2. 系统设计强调可扩展性,初期...
2. Nginx:以其反向代理和负载均衡能力著名,适合高并发场景。 3. Microsoft IIS:Windows环境下的商业服务器,与.NET框架紧密集成。 4. Lighttpd:轻量级,速度快,适合小型站点。 5. Tomcat:主要用于Java Web应用...
缓存策略包括本地缓存、分布式缓存和反向代理缓存等。 8. **独立的图片服务器**: 图片、视频等静态资源通常放在独立的服务器或CDN上,以减轻主服务器的压力,加快内容加载速度。 9. **其他技术**: 还包括使用...
2. **负载均衡**:Nginx不仅可以直接支持Rails和PHP程序,还可以作为HTTP代理服务器,对后端服务器进行负载均衡,确保流量均匀分布,提高网站的稳定性和响应速度。 3. **邮件代理服务器**:Nginx最初的设计目标之一...
3. Nginx:作为反向代理服务器,实现负载均衡,尤其适用于处理静态内容。 系统设计特点包括: 1. 可扩展性:功能模块化设计,便于后期扩展。 2. 稳定性:选用经过验证的技术和方案,确保系统稳定运行。 3. 安全性...
4. **Web服务器配置**:对于Web服务器,Apache、Nginx或IIS的配置方法是核心内容,包括站点创建、虚拟主机设置、SSL证书配置、负载均衡与反向代理等。 5. **数据库服务器配置**:MySQL、PostgreSQL、SQL Server等...
- **负载均衡**:通过中间件如ProxySQL或MySQL Router来实现请求的分发,减轻单台服务器的压力。 4. **数据表类型** - **MyISAM**:适合读多写少的应用场景,不支持事务处理。 - **InnoDB**:支持事务处理、行级...
18. **集群和高可用性**:双机热备、Memcached(缓存服务)、Squid(代理服务器)、F5负载均衡器以及集群配置确保服务的高可用性。 19. **客户端和浏览器**:包括IE、Firefox、Chrome、Opera等桌面浏览器,以及iOS...
2. **请求分发**:代理服务器根据用户平台将请求转发到对应的负载均衡器,后者再将请求轮询至后端的Web服务器集群(如Nginx Web服务器A1和A2)。 3. **内容部署**:Web服务器上部署了相应的虚拟主机网站内容。 4. **...