我正在对不同的负载平衡选项进行负载测试,但从 Nginx、haproxy 和 varnish 得到的结果很差。我在 Rackspace 有一个 4GB 的负载均衡器,可以运行 4x1GB 的应用服务器。
我正在访问一个名为“/slow”的 url,它在响应之前故意等待 500 毫秒。如果我直接访问应用程序服务器,它可以处理每秒 1600-1800 的连接速率。
如果我打 Nginx 负载均衡器,它只能处理大约 2000 个连接。我希望有更接近 4x1600 = 6000 的东西。下面是我用来测试它的命令。这是在 40 256 MB 实例上并行运行的。我特意将 num_call 设置为 1,因为我想看看连接性能。任何高于此值,我就会开始出现很多错误。
httperf --server 50.56.80.227 --port 1555 --uri /slow --rate 50 --num-call 1 --num-conn 100 --timeout 5
Run Code Online (Sandbox Code Playgroud)
这是我的 nginx 配置:https : //gist.github.com/1299501
所以,奇怪的是,无论我使用 nginx、haproxy 还是 varnish,我都会得到大致相同的结果。然而,我测试了 Rackspace 的新云平衡器,它们获得了更好的性能(在 7000/s 时表现良好)。由于 nginx 和其他都在我设置的实例上运行,而机架空间平衡器不是,我猜系统有问题。我宁愿使用我控制的平衡器,这样我就可以向其中添加缓存、gzip、ssl 和其他内容。
我怎样才能找出瓶颈是什么?有什么我应该在系统上调整以获得更好的性能吗?我需要超过 4GB 的内存吗?(测试过程中Ram使用率不高)。还有其他随意的想法吗?
更新:我只是将平衡器调整为 8GB,它的性能要好得多,高达 6000-7000,或者与机架空间平衡器相当。这没有任何意义,因为它之前没有耗尽 RAM。
更新:这是我重载平衡器时 httperf 的输出示例(在 8GB 版本上,比我之前能够运行的要高,但错误类似):https …
使用 HAProxy,我想创建以下设置:
我无法弄清楚如何在不依赖于设置默认服务器的情况下匹配 root,然后否定所有请求转到 server1 规则。
如何使用 HAProxy 表达上述内容?
正则表达式可能是解决此问题的方法,但我对正则表达式并不擅长,因此很难提出基于它的解决方案。
我使用 nginx 作为后端的反向代理。配置非常基本,例如核心只是:
upstream myservice {
server 127.0.0.1:80;
server 123.123.123.123:80;
}
location / {
proxy_pass http://myservice;
proxy_set_header Host myservice;
}
Run Code Online (Sandbox Code Playgroud)
现在我的服务在计算上非常繁重,我希望 nginx 将活动并行(同时)请求的数量限制为单个上游后端,例如 10。
我查看了limit_req模块,但是这个模块似乎只关注每分钟传入的请求。我特别想限制活动后端连接的数量;即考虑请求是否已经返回。这可能吗?
在清漆中,这可以使用例如
backend cpu1 {
.host = "127.0.0.1";
.port = "80";
.max_connections = 20;
}
Run Code Online (Sandbox Code Playgroud)
但是我需要为此使用nginx。
我的设置是单个接口和单个网络上的两个 ISP。我可以将我的默认网关设置为192.168.0.1或192.168.1.250并且要么工作。
编辑:网络掩码(如评论中所见)is 255.255.254.0-正如我所说,它们位于同一个子网上。
我的愿望是通过一些负载平衡来利用它们。我试图遵循这里给出的建议 https://serverfault.com/a/96586
#!/bin/sh
ip route show table main | grep -Ev '^default' \
| while read ROUTE ; do
ip route add table ISP1 $ROUTE
done
ip route add default via 192.168.1.250 table ISP1
ip route add default via 192.168.0.1 table ISP2
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
iptables -t mangle -A PREROUTING -j MARK …Run Code Online (Sandbox Code Playgroud) 帮助我理解一些东西。我查看了几个企业应用程序架构,我注意到其中几个使用 Message Queue 服务,例如 ActiveMQ 或 RabbitMQ。我对消息队列服务器的作用有表面上的了解,但我真的不明白为什么我会选择构建一个使用它的应用程序基础设施,而不是标准的负载平衡技术,如 HAProxy 等。
两者之间的真正区别是什么?两者似乎都将流量和/或消息路由到订阅队列或池的节点。这些都有优点/缺点吗?
基本上,我需要 DNS 以不同的 CNAMES 响应,具体取决于请求是针对 HTTPS 还是 HTTP 对象发出的。
s.test.com -> IF(https) RESPONSE special.domain.com ELSE simple.domain.com
Run Code Online (Sandbox Code Playgroud)
是否可以?还有什么其他可能的方法来做到这一点?
我们在许多应用程序服务器上安装了 3 个 Ruby on Rails 应用程序(A、B 和 C)。我们的前端是 HAProxy,后端是 Apache + Phusion Passenger。最初我们在每个应用程序服务器上都安装了所有 3 个 Rails 应用程序,但是这个设置很慢,因为 HAProxy“不知道”给定的 Rails 应用程序在给定的支持服务器上是否“热”。

每个乘客实例配置为最多运行 8 个 Rails 应用程序实例。
考虑以下场景(简化):
在每分钟有大量请求的大计划中,所有 3 个 Rails 应用程序经常在每个应用程序服务器上启动和停止,这很慢。
在完美世界中,应用程序启动一次并处理大量请求,而无需关闭和重新启动。这就是为什么我们必须在 3 个 Rails 应用程序之间划分我们的应用程序服务器:
问题:是否有一个负载均衡器软件可以“感知”后端并且知道并使用以下信息来平衡负载:
load-balancing haproxy ruby-on-rails phusion-passenger high-load
我正在尝试mod_jk用于负载平衡。
负载均衡器:172.17.8.189(HTTPD + mod_jk的)
节点1:172.17.8.193(的Apache Tomcat实例1)
节点2:172.17.8.196(的Apache Tomcat实例2)
我检查了我的 tomcat 实例,它们都在 8009 监听。但是,我不断收到这些错误。
[Tue Jun 18 17:49:14 2013][18057:47118810657648] [error] init_jk::mod_jk.c (3348): Initializing shm:/etc/httpd/logs/jk.shm.18057 errno=13. Load balancing workers will not function properly.
[Tue Jun 18 17:49:14 2013][18057:47118810657648] [info] init_jk::mod_jk.c (3365): mod_jk/1.2.37 initialized
Run Code Online (Sandbox Code Playgroud)
调试日志是
[Tue Jun 18 18:14:00 2013][18778:47687756850032] [debug] jk_set_time_fmt::jk_util.c (461): Pre-processed log time stamp format is '[%a %b %d %H:%M:%S %Y]'
[Tue Jun 18 18:14:00 2013][18778:47687756850032] [debug] uri_worker_map_open::jk_uri_worker_map.c (865): rule map size is 2
[Tue …Run Code Online (Sandbox Code Playgroud) 我让AWS iam 在我的服务器上工作,并尝试上传一些证书:
aws iam upload-server-certificate --server-certificate-name domain2014
--certificate-body file:///var/www/html/certificate.pem
--private-key file:///var/www/html/private-key.pem
--certificate-chain file:///var/www/html/ca.pem
Run Code Online (Sandbox Code Playgroud)
我得到:
Error parsing parameter '--certificate-body': file does not exist: /var/www/html/certificate.pem
Run Code Online (Sandbox Code Playgroud)
我尝试从我的 MAC 上传文件,我得到了相同的答案。
已经检查了这个问题,但是file://没有丢失,并且路由是可以的。
我确实有凭据,例如:
AWSAccessKeyId=BKIAJQ1111111111111
AWSSecretKey=H+2+2mko11111111111111cv+UFuA6
Run Code Online (Sandbox Code Playgroud)
还有一个配置文件。但老实说,我不明白在哪里或如何使用它来上传证书(使用aws configure 后我完成了信息,然后我不知道下一步该怎么做)。
所有这些过程都是昨天开始的,当时我没有问题地完成了上传负载均衡器的过程,但后来我意识到实际工作的证书是我之前在服务器上的自签名证书(这是我昨天发布的问题)
编辑:
如果我从终端尝试:
aws iam list-server-certificates
Run Code Online (Sandbox Code Playgroud)
我得到:
A client error (AccessDenied) occurred when calling the ListServerCertificates operation: User: arn:aws:iam::999990212999:user/admin is not authorized to perform: iam:ListServerCertificates on resource: arn:aws:iam:: 999990212999:server-certificate/
Run Code Online (Sandbox Code Playgroud)
编辑2 …
load-balancing ssl-certificate amazon-ec2 amazon-iam aws-cli
我有一个关于 SSL 证书和多个服务器的问题。
题:
我有一个证书,一个域名,我有很多服务器保存我的网站代码。
Example.com 可以指向 IP 192.168.1.1、192.168.1.2、192.168.1.3 和 192.168.1.4。一个用于美国北部、美国南部、美国东部、美国西部。