目前,我一直在使用(D)DoS-Deflate来管理大量远程服务器上的此类情况,并使用Apache JMeter进行负载测试。
总的来说,它运行得相当好,尽管我想听听在这种情况下工作时间比我长的大师们的一些建议。我相信那些在网络托管业务中工作的人在处理这些情况方面有相当的份额。所以我想知道在企业环境中处理这类问题的最佳实践是什么?
我有一堆关于 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 … 我的 ELB 不断使我的实例停止服务,因为 HTTP 运行状况检查失败。
我们有一个 DNS 通配符,并将所有内容重定向到 www:
虚拟主机.conf:
ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
这适用于实际浏览器,但对 / 的 HTTP 健康检查失败,大概是因为它得到了 302。
是使用 TCP 健康检查的最佳选择,还是有办法让 HTTP 工作?
我是这种负载平衡方案的新手,我的任务是弄清楚如何使这种负载平衡起作用。
我的环境:
Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
尝试在使用 HAproxy 和 keepalived 生产之前在实验室中运行测试。这是我的 keepalived 设置:
!keepalived的配置文件
global_defs {
notification_email {
myemail@gmail.com
}
notification_email_from keepalived@domain.local
smtp_server 192.168.1.4
smtp_connect_timeout 30
router_id 192.168.1.1
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1 # check every second
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface …Run Code Online (Sandbox Code Playgroud) 我们正在尝试设计一种能够处理超过 64k 个 websocket 的架构。
我们首先尝试使用 Amazon ELB,但它的设计不允许意外的流量激增或 websocket。(TCP 模式意外超时 websockets)
使用 HAProxy,这些限制不适用,但我们将被限制在 HA 和后端服务器之间维护的 ~64k websockets。
想到的多种解决方案:
有一个更好的方法吗 ?
domain-name-system scalability load-balancing haproxy websocket
检查A记录youtube.com(例如),我只看到一个 IP 地址。
考虑到他们处理的流量,这怎么可能?
他们是否使用带有负载均衡器的任播?
我正在尝试在我的网络中实现 BGP 不等成本负载平衡功能。根据思科手册(长:http : //www.cisco.com/c/en/us/td/docs/ios/12_2s/feature/guide/fsbgplb.html,短:https : //ccieblog.co.uk /bgp/bgp-unequal-load-cost-sharing)我已经建立了这样的网络拓扑:
R1 - 我试图为传出流量实现负载平衡的路由器。nat使用带有名称的 VRF 表。
R2-R4 - 运行 quagga 的 NAT 服务器,通过 eBGP与R1共享到R5 的默认路由。
R1 IOS版本: 12.2(33)SXJ4 (s72033-adventerprisek9_wan-mz.122-33.SXJ4.bin)
R2 配置(R3 R4仅 router-id 和 vlan 不同)
结果我在R1上有 3 个不同的默认路由,它们具有相同的共享数 - 1/1 (1:1:1)。但比例1:2:3 expexted:
R1# sh ip bgp vpnv4 vrf nat 0.0.0.0
Paths: (6 available, best #5, table nat)
Multipath: eiBGP
Advertised to update-groups:
2
65000
10.30.227.227 from …Run Code Online (Sandbox Code Playgroud) 我们有一个网络服务器场,目前托管 2 个应用程序——这两个应用程序都在所有服务器上运行。我们想拆分它,以便为每个应用程序提供一个专用的服务器群(我们有充分的理由这样做)。
我们希望在所有服务器前有一个单一的负载平衡器,它会根据主机名将流量路由到正确的服务器场,但我们希望维护到网络服务器的 SSL。
我们提供的路由器似乎没有这样做。我明白没有 SNI 这是不可能的,但我们希望几乎所有流量都有 SNI 指标。
现在我是程序员,不是网络人员,但是当一个新的 SSL 连接请求进来时,路由器不能检查 SNI 标头,并路由到正确的农场。我假设传入的 SSL 连接由 {source IP:source port} 标识,所以它不能为后续传入的数据包记住这一点(如果 SNI 仅出现在第一个数据包中)?
据我所知 Haproxy 是这样做的,但硬件负载平衡器似乎没有。这有什么原因吗,或者这是我们应该推动的吗?
(对于最后一个在 XP 上使用不包含 SNI 的 IE 的守卫,我们希望将流量发送到旧场,并在必要时管理到新场的代理)。
在 Google Container Engine 上设置 Kubernetes 入口时,您可以选择入口类(gce或nginx)。我意识到 GCE 类在 Google 的云平台上提供了一个负载均衡器,每个成本约为 20 美元/月。
经过一些研究,我找不到 Google 的负载均衡器比使用 NGINX 入口类更好的任何普遍原因——至少在达到非常大的规模之前不会。
事实上,似乎 GCE 类不支持:
ingress.kubernetes.io/auth-url我不知道使用 GCE 类与 NGINX 类进行入口有什么好处吗?
nginx load-balancing kubernetes google-cloud-platform google-kubernetes-engine
我现在设置了一个可扩展的负载均衡器,主要遵循这个模板:
https://github.com/satterly/AWSCloudFormation-samples/blob/master/LAMP_Multi_AZ.template
将AWS::AutoScaling::AutoScalingGroup.CreationPolicy.ResourceSignal.Count键调整为0(基本上允许在未收到成功信号的情况下加载堆栈)后,我能够加载堆栈,并且可以看到所有可用资源。
我可以看到正在创建的密钥的公共 DNS,但我无法通过 SSH 连接到实例。
我对实例规则中的每个人都有开放的 SSH 访问权限,我可以在 AWS 控制台中确认这一点。
我还按照官方 AWS 文档中的建议为我的 VPC 配置了一条路由:https : //aws.amazon.com/premiumsupport/knowledge-center/ec2-linux-ssh-troubleshooting/
我可以看到实例存在,但似乎我限制了自己在某处的访问。但是,在 AWS EC2 控制台中,设置看起来与我能够通过 SSH 连接到实例时相同。
这是我正在使用的 JSON 模板,您可以在其中查看我的所有设置,包括我的 VPC、子网、安全组等:https : //gist.github.com/dambrogia/e4cd93a64ae6f3a79d4a58d466f144f8
我从以下命令收到超时错误:(我的id_rsa密钥在 ec2 内有效)
ssh -i ~/.ssh/id_rsa ec2-user@<ec2_instance>
Run Code Online (Sandbox Code Playgroud)
load-balancing amazon-ec2 amazon-web-services amazon-cloudformation
load-balancing ×10
haproxy ×3
nginx ×2
ssl ×2
amazon-ec2 ×1
anycast ×1
apache-2.2 ×1
bgp ×1
centos6.4 ×1
cisco ×1
healthcheck ×1
jmeter ×1
keepalived ×1
kubernetes ×1
lighttpd ×1
scalability ×1
sni ×1
websocket ×1