我们在几个 tomcat 前面运行一个 apache 反向代理。有时我们想知道请求被转发到哪个服务器。因为我们使用 mod_proxy_balancer。
我试过
\"%{X-Forwarded-Server}i\"
Run Code Online (Sandbox Code Playgroud)
但这不起作用。它显示了我的负载均衡器 (apache) 的名称
我如何记录选择了哪个工人?
假设我有一个完全工作的、负载平衡的应用服务器环境。
所有服务器都必须优雅地进行故障转移。使用应用程序服务器相对容易,但如何使用前端负载平衡器实现故障转移?
我可以让多个负载均衡器监听同一个 IP 和端口吗?我一发现旧的死了就必须运行新的吗?
我对在下面引用的文章中构建架构很感兴趣。
我目前有一个价格适中的第 4 层负载平衡器,我的应用程序服务器是 SSL 端点。我想在我的负载平衡器和我的应用程序服务器之间放置一个 SSL 服务器群。然后我将在 SSL 场和我的应用服务器之间放置另一个廉价的负载平衡器,以进行第 7 层路由。

我的 Web 应用程序具有相当高的消费者流量,6 个服务器可以处理大约 50% 的容量。此外,我的基础设施流量比我的消费者流量大几个数量级。这是来自世界各地的数据,必须与我的 Web 应用程序实时集成。我总共有 18 个应用服务器来处理所有流量,另外还有 6 个数据库服务器。我将在接下来的 2 周内再添加 6 个应用服务器,并在之后的 2 周内再添加 6 个。保守地说,我估计到今年年底我需要扩展到 120 台服务器。
我现在的动机是将消费者流量与基础设施流量分开。消费者流量的优先级高于基础设施流量,我不能允许基础设施方面的踩踏事件关闭我面向消费者的服务器。拥有一个永远在线的网站是重中之重。但是,如果其中一个消费者应用服务器出现故障,我想将该流量路由到为基础架构流量指定的服务器。
复杂的是,所有流量都使用相同的主机名寻址,并且几乎 100% 是 https。在我的例子中,区分基础设施和消费者流量的唯一方法是通过 URL(我继承的糟糕的架构),所以我需要一个第 7 层负载均衡器来进行路由。然而,为了让它工作,我需要一个基于硬件的 SSL 终止器或一个如上所述的 SSL 服务器群。因为我的用户群正在迅速扩展,我担心如果我沿着硬件路径走下去,它会很快变得非常昂贵,特别是因为我需要 4 个所有东西来实现高可用性(2 个设施中的 2 个相同设置)。同时,上图似乎非常灵活,并且更具水平可扩展性。
以前有人建过这个吗?是否有预先构建的配置?我应该考虑什么以及我应该使用什么软件(我听说有人使用带有 mod-ssl、nginx 和 stunnel 的 apache)?另外,购买昂贵的负载平衡器与构建 SSL 服务器群什么时候有意义?
我正在测试运行 HAProxy 作为 Apache 2.2 后面的专用负载均衡器,替换我们当前使用 Apache 负载均衡器的配置。在我们当前的 Apache 设置中,如果所有后端(源)服务器都关闭,Apache 将提供 503 服务不可用消息。使用 HAProxy,我得到 502 错误的网关响应。
我在 Apache 中使用了一个简单的反向代理重写规则
RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
Run Code Online (Sandbox Code Playgroud)
在 HAProxy 我有以下(在默认 tcp 模式下运行)
defaults
log global
option tcp-smart-accept
timeout connect 7s
timeout client 60s
timeout queue 120s
timeout server 60s
listen my_server 127.0.0.1:8000
balance leastconn
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
Run Code Online (Sandbox Code Playgroud)
在后端服务器关闭时测试直接连接到负载均衡器:
[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28-- http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP …Run Code Online (Sandbox Code Playgroud) 如果我们有 3 个具有相同域名且每个具有不同公共 IP 的网络服务器。此设置是否会带来最小的负载平衡。
当我们查找 google.com 时,它被解析为 10+ ip。这个设置可以带来类似的设置。
我想通过多个 IP 对出站电子邮件进行负载均衡,是否有任何内置工具或一些简单的方法可以使用 postfix、sendmail 或 exim 来实现?例如,如果我为电子邮件服务器分配了三个 IP,并且电子邮件是通过所有 ip 一一发送的。
弹性负载均衡器的粘性可以设置为三个选项之一
2) 和 3) 之间有什么区别?
在这个世界上有可能实现 DNS 级别的负载均衡吗?例如,我有一个服务器 A(111.222.333.444)和服务器 B(555.666.777.888),并且有一些第三方 DNS 托管(如 CloudFlare)可以决定服务器 A 是否关闭(或没有响应)然后转移所有到服务器 B 的流量。这不是真正的负载平衡,而是流量分流,我不知道。但有可能吗?
我知道 DNS 传播需要时间,但像 CloudFlare 这样的服务几乎不需要几分钟就可以转移到其他服务器。
有任何想法吗?谢谢。
例如,对于haproxy(第7层)负载均衡,只需要配置VIP(即集群IP)后面的“真实服务器”或“后端”即可。例如:
listen smtp 192.168.3.10:25
mode tcp
balance roundrobin
server smtp1 192.168.3.1:25 check
server smtp1 192.168.3.2:25 check
Run Code Online (Sandbox Code Playgroud)
但是,对于lvs(第 4 层),我需要:
lvs机设置为路由器,实现“NAT路由”lvs机和后端都配置有与后端的一些ARP MODS的VIP如果没有更复杂的配置,第 7 层负载平衡如何设法做到这一点?我在这里误解或遗漏了一些基本的东西吗?
我有一个运行 Nginx 的 EC2 实例,其中包含多个域。我的配置是这样开始的:
server {
listen 80;
#disable_symlinks off;
server_name _; #allow few domains
#Adding 'www.' to url in case it doesen't
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
index index.html index.php;
}
Run Code Online (Sandbox Code Playgroud)
我不确定在 ELB(亚马逊)上使用哪个 ping 路径,因为如果我尝试 HTTP,实例总是失败。如果我尝试 TCP(端口 80),则 ping 成功。我必须使用 HTTP,因为我想使用粘性。
有什么建议吗?谢谢,丹尼
nginx load-balancing amazon-ec2 amazon-web-services amazon-elb
load-balancing ×10
amazon-ec2 ×2
apache-2.2 ×2
haproxy ×2
linux ×2
nginx ×2
amazon-elb ×1
cluster ×1
dns-hosting ×1
email ×1
failover ×1
ip ×1
logging ×1
lvs ×1
mod-proxy ×1
mod-ssl ×1
postfix ×1
ssl ×1
tcp ×1
web-server ×1
zimbra ×1