whe*_*eph 9 ssl nginx load-balancing haproxy
我有一堆关于 ssl、本地会话和负载平衡的问题,它们似乎是相互关联的,所以我提前为这个问题的长度道歉。
我有一个使用基于文件的会话的网站。该站点的性质是大部分是http,但有些部分是ssl。目前,由于基于文件的会话,任何 ssl 请求都需要与以前的任何 http 请求访问相同的服务器。
由于时间限制,我想做最简单的事情来负载平衡增加的 http 和 ssl 流量。
粘性负载平衡算法似乎有两种选择:
基于 ip 的解决方案可能会起作用,但散列算法可能会在服务器关闭或添加时更改用户访问的服务器,这对于当前基于文件的会话设置是不合需要的。我还假设用户在浏览网站时合法地更改 ip 在技术上是可能的。
基于 cookie 的算法似乎更好,但是在通过 ssl 加密时无法检查 cookie 似乎存在其自身的问题。
我一直在搜索有关如何对 ssl 进行负载平衡的示例,但似乎找不到任何明确的设置示例,这些示例可以执行基于 cookie 的负载平衡,并且可以通过添加另一个 ssl 解码器来处理增加的 ssl 负载。
我见过的大多数显式示例都有位于浏览器客户端和负载均衡器之间的 ssl 解码器(通常是硬件、apache_mod_ssl 或 nginx)。这些示例通常看起来像这样(从http://haproxy.1wt.eu/download/1.3/doc/architecture.txt修改):
192.168.1.1 192.168.1.11-192.168.1.14 -------+-----------+-----+-----+-----+ | | | | | +--+--+ +-+-+ +-+-+ +-+-+ +-+-+ | LB1 | | 一个 | | 乙 | | C | | D | +-----+ +---+ +---+ +---+ +---+ apache 4 便宜的网络服务器 mod_ssl 代理
上面例子中的 ssl 解码部分似乎是一个潜在的瓶颈,无法横向扩展。
我看过 haproxy,它似乎有一个“mode tcp”选项,可以允许这样的事情,这将允许您拥有多个 ssl 解码器:
代理 | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | 网络1 网络2 网络3
但是,在这样的设置中,您似乎会丢失客户端 IP,因为 haproxy 没有解码 ssl:https ://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -为了
我也看过 nginx,我也没有看到任何水平可扩展的 ssl 解码器的明确示例。似乎有很多人将 nginx 作为潜在瓶颈的例子。至少这个链接似乎表明 nginx 甚至没有类似 haproxy 的设置的选项,你会说 nginx“不支持透明地将 TCP 连接传递到后端”如何通过 Apache SSL 流量通过 nginx 代理?.
问题:
假设我所说的一切都是真的,这些似乎是我的选择:
严肃地说,“最简单的事情”是转移到集中式会话存储。你必须用负载平衡器、haproxy、SSL 和其他东西来设置所有这些管道,当我见过的每一位会话处理代码都使得插入不同的存储引擎变得几乎是微不足道的时候,所以一个一些代码和非常非常少的额外复杂性可以解决您的所有问题。
womble 是正确的,共享会话存储使周围的事情变得更加容易。除了他的回答之外,我还可以扩展一下问题的负载平衡部分:
为什么似乎没有更多设置示例添加更多 ssl 解码器来处理增加的流量?
现代多核 PC每秒可以执行数千次SSL 事务。如果这成为瓶颈,那么来自F5、Citrix、Cisco 或类似公司的专用设备可能会更快。所以大多数站点永远不会超过一个好的单设备 SSL 和负载平衡解决方案。
假设我所说的一切都是真的,这些似乎是我的选择:
如果您需要,可以选择水平扩展 SSL 解密。
常见的做法是使用DNS Round Robin来实现高可用的SSL加速器对,即为域发布多个IP地址,每个IP地址指向一对SSL加速器。
在这种情况下,您可能会担心 DNS TTL 在用户会话中间超时,从而将用户撞到另一个应用程序服务器。这不应该是一种普遍现象,但它可能会发生。共享会话存储是常见的解决方案,但可以通过其他方式进行处理。
作为一个示例,您可以将 SSL 解密与应用程序服务器平衡分开。SSL 处理比基本负载平衡更占用 CPU,因此单个负载平衡器应该能够使几个 SSL 加速器饱和。像这样:
Internet --> DNS round robin to multiple SSL accelerators --> plain HTTP to a single HTTP load balancer --> plain HTTP to multiple application servers
正如开头提到的,共享会话存储简化了很多事情,并且几乎可以肯定是比将大量复杂性放入 SSL/负载平衡层更好的长期解决方案。
归档时间: |
|
查看次数: |
3524 次 |
最近记录: |