我正在寻找负载平衡和故障转移策略的解决方案,主要用于大型 Web 应用程序。我们有许多服务需要平衡,例如 web、MySQL 和许多其他基于 HTTP 或 TCP 的服务。但我不确定它们的优缺点是什么,我应该选择哪个。
我正在设置一个使用虚拟机(可能是亚马逊,但不是一成不变的)托管的应用程序,这将需要 HTTP 负载平衡和负载平衡大量(如果可能,50k 左右)的持久 TCP 连接。数据量并不高,但更新频繁。
现在我正在评估负载均衡器,并且对 HAProxy 的架构有点困惑。如果我使用 HAProxy 来平衡 TCP 连接,是否所有产生的流量都必须流经负载平衡器?如果是这样,另一种解决方案(例如 LVS 甚至 nginx_tcp_proxy_module)是否更合适?
我无法弄清楚 AWS 如何在 ElasticBeanstalk 上设置他们的 Docker“瘦池”以及它是如何被填满的。我的 docker 精简池不知何故填满并导致我的应用程序在尝试写入磁盘时崩溃。
这是来自容器内部:
>df -h
> /dev/xvda1 25G 1.4G 24G 6%
Run Code Online (Sandbox Code Playgroud)
事实上,EBS 有一个 25GB 的磁盘分配给它;du -sh /返回的是 1.6 GB 。
在 EC2 之外,它开始时足够无害......(通过lvs)
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool docker twi-aot--- 11.86g 37.50 14.65
Run Code Online (Sandbox Code Playgroud)
但是,文件系统很快将重新挂载为只读。通过 dmesg:
[2077620.433382] Buffer I/O error on device dm-4, logical block 2501385
[2077620.437372] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 0 size 8388608 …Run Code Online (Sandbox Code Playgroud) 我被要求在数据中心重建我们的负载平衡基础设施。
最初的请求是对 FTP 服务器进行负载平衡。我尝试使用当前的负载平衡器 ( Piranha / LVS)执行此操作,但没有启动并运行。不仅仅是因为这个软件几乎没有文档。由于Piranha被认为已弃用,我在HAProxy尝试了几天后转而使用它,它在Piranha.
所以我已经有了 FTP 负载平衡(被动模式)。现在,我被要求更换数据中心的整个 Piranha Load Balancer。在当前的 Piranha 配置中,我们有几个 Web 服务器、IIS 服务器....aaa 和DNS。
不,事情是这样的:
HAProxy似乎是一个常用的 LB,但它不能处理UDP load balancing. 这是一个无赖,因为我喜欢如何HAProxy运作。所以我用谷歌搜索了很多,遇到了几件事。大多数人似乎将LVS其用作 DNS (TCP/UDP) 的 LB。有的用dlbDNS,有的用lbnamed,有的用netfilter / iptables。
由于我想坚持使用HAProxyFTP、HTTP、IIS 服务器,因此我对将它与LVS.
要求:
具有故障转移功能的
2个 LB 实例 具有故障转移功能的2 个 DNS 服务器(已经存在)
多个后端服务器(http、应用程序等...)
问题:
这可能吗?DNS 服务器上的 UDP 负载平衡是否有必要?是否有任何类型的资源可以告诉我如何开始使用它?或者有没有既能处理 TCP/HTTP 又能处理 UDP 负载均衡的 …
基于这个问题:广泛使用的负载均衡解决方案?, LVS 可能是我的问题的正确解决方案。
但是当我去它的主页http://www.linuxvirtualserver.org/ 时,我发现LVS 从2008 年11 月开始更新了。世界变化很快,我不知道LVS 是否已经过时了。
LVS 是停滞不前,还是有更好的解决方案来替代它?
非常感谢。
我们运行一个 Web 应用程序,为越来越多的客户端提供 Web API。首先,客户端通常是家庭、办公室或其他无线网络,向我们的 API 提交分块的 http 上传。我们现在已经扩展到处理更多的移动客户端。文件从几千到几场不等,分解成更小的块并在我们的 API 上重新组装。
我们当前的负载均衡是在两层执行的,首先我们使用轮询 DNS 为我们的 api.company.com 地址通告多个 A 记录。在每个 IP 处,我们托管一个 Linux LVS:http : //www.linuxvirtualserver.org/,负载均衡器查看请求的源 IP 地址以确定将连接交给哪个 API 服务器。这个 LVS 盒子配置了 heartbeatd 来相互接管外部 VIP 和内部网关 IP。
最近,我们看到了两个新的错误条件。
第一个错误是客户端在上传中摇摆或从一个 LVS 迁移到另一个。这反过来会导致我们的负载均衡器失去对持久连接的跟踪,并将流量发送到新的 API 服务器,从而破坏跨两个或更多服务器的分块上传。我们的目的是让下游缓存名称服务器、操作系统缓存层和客户端应用程序层遵守 api.company.com 的循环 DNS TTL 值(我们已将其设置为 1 小时)。大约 15% 的上传会出现此错误。
我们看到的第二个错误要少得多。客户端将向 LVS 盒发起流量并路由到它后面的 realserver A。此后,客户端将通过 LVS 框无法识别的新源 IP 地址进入,从而将正在进行的流量路由到也在该 LVS 后面的真实服务器 B。
鉴于我们上面部分描述的架构,我想知道人们对更好的方法有什么经验,这将使我们能够更优雅地处理上述每个错误情况?
2010 年 5 月 3 日编辑:
这看起来是我们需要的。源 IP 地址上的加权 GSLB 哈希。
出于某种原因,当使用 wlc 或 lc 调度程序时,ipvsadm 似乎并没有平等地平衡我的真实服务器之间的连接。一台真正的服务器会收到大量请求,而其他服务器收到的连接相对较少。
我的 ldirectord.cf 文件如下所示:
quiescent = yes
autoreload = yes
checktimeout = 10
checkinterval = 10
# *.example.com http
virtual = 192.0.2.111:http
real = 10.10.10.1:http ipip 10
real = 10.10.10.2:http ipip 10
real = 10.10.10.3:http ipip 10
real = 10.10.10.4:http ipip 10
real = 10.10.10.5:http ipip 10
scheduler = lc
protocol = tcp
service = http
checktype = negotiate
request = "/lb"
receive = "Up and running"
virtualhost = "site.com"
fallback = 127.0.0.1:http
Run Code Online (Sandbox Code Playgroud)
我认为可能导致问题的奇怪事情(但我真的不确定)是 ipvsadm …
我一直在尝试使用 CentOS 6.x 创建 LVS DNS HA:
几天后,我发现我无法弄清楚如何使其工作 - 我希望有人可以使用 lvs.cf 文件以及所有必需的 iptables 规则。或者,如果有人已经使用了其他一些允许进行 DNS LB 的开源和免费软件(不是循环 DNS A 记录 - 这不是本练习的目的)。
如果有人成功地在 LVS 下使用池中的两个或多个真实服务器创建了命名 DNS,则工作,如果可以发布配置,我将不胜感激:
我主要是在寻找直接服务器返回或 NAT - 任何一种解决方案都适合我。
先感谢您。
吉姆。
domain-name-system iptables high-availability load-balancing lvs
我需要在多个“真实服务器”之间对 UDP 流量进行负载平衡,并以真正的循环方式进行。我已经开始使用 keepalived,但意外地发现,LVS 将 UDP 流量视为“连接”(无论 UDP 是什么......)。实际上,这意味着来自特定客户端的所有流量始终都流向同一个“真实服务器”(这是一个大问题,因为某些客户端可能会产生如此大的流量,以至于单个后端将不堪重负) .
显然,这是预期的行为,但是最近的 LVS 版本有一个“--ops”标志,这使 LVS 绕过其上述行为,以便独立处理每个 UDP 数据报(这就是我想要的!)。但是(总是有一个但是……)这个功能没有从 keepalived.conf 中暴露出来。
有什么解决方案可以让我
显然应该是基于 Linux 的。任何形式的 DNS 轮询在这里都不起作用,因为客户端不知道 DNS。
PS我将尝试脉冲/食人鱼,但从阅读我收集的文档来看,它也没有公开“--ops”标志。我还将尝试mon(通过直接调用 ipvsadm使mon检查后端并添加/删除真实服务器)。
我目前正在尝试解决问题的核心,我的 LVS 控制器似乎不时丢弃来自客户端的数据包。我们在我们的生产系统上有这个问题,并且可以在登台时重现这个问题。
我在 lvs-users-mailing-list 上发布了这个问题,但到目前为止没有得到任何回应。
我们在 PV XEN-DomU 中使用 ipvsadm 和 Linux CentOS5 x86_64。
我们在 DR 模式下使用 IPVS,我们使用 lvs-kiss 来管理正在运行的连接。
ipvsadm 在heartbeat-v1-cluster(两个虚拟节点)中运行,主节点和备份节点在两个节点上持续运行。
对于 LVS 服务,我们使用由心跳设置的逻辑 IP(主动/被动集群模式)
真实服务器是物理 Linux 机器。
充当控制器的 VM 在使用桥接网络的 Dom0 上作为 XEN-PV-DomU 运行。
1 GB RAM,2 个 vCPU,系统负载几乎为 0,可用内存 73M,224M 缓冲区,536M 缓存,无交换。
top 显示几乎总是 100% 空闲,0% us/sy/ni/wa/hi/si/st。
ipvsadm …
例如,对于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 层负载平衡如何设法做到这一点?我在这里误解或遗漏了一些基本的东西吗?
我有一个 3 节点(来自提供商的专用服务器)CentOS 7.x 集群。我正在尝试使用此处的链接设置 LVS 。
我的每台机器都已经分配了 3 个额外的别名 IP 地址。我想在其中一台机器上设置 LVS。我的问题是我应该在 Piranha 配置工具中使用什么作为虚拟 IP(VIP)?我可以为我希望 LVS 所在的那台机器选择一个别名 IP 吗?
lvs ×12
haproxy ×4
linux ×3
udp ×2
centos ×1
centos5 ×1
cluster ×1
docker ×1
failover ×1
filesystems ×1
iptables ×1
ipvs ×1
keepalived ×1
ldirectord ×1
piranha ×1
round-robin ×1
ubuntu-10.04 ×1
xen ×1