我正在尝试使用 LVS 直接路由方法实现 IP 负载平衡。现在理想情况下有一个分配给负载均衡器服务器的虚拟 IP,但我只有 3 个 IP 地址。
我为负载均衡器节点 10.209.104.5 使用 10.209.104.6,为两个真实服务器使用 10.209.104.7。
我正在尝试使用 LVS 直接路由方法实现 IP 负载平衡。现在理想情况下有一个分配给负载均衡器服务器的虚拟 IP,但我只有 3 个 IP 地址。
我为负载均衡器节点 10.209.104.5 使用 10.209.104.6,为两个真实服务器使用 10.209.104.7。
我已经设置了一个以 LVM 作为后备存储的 LXC 容器。在主机上,命令lvs --units m
输出以下内容:
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
vm dvg -wi-a---- 1000.00m
当我在容器内时,命令会df -h -B M
打印以下内容:
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/dvg/vm 969M 407M 513M 45% /
none 1M 0M 1M 0% /sys/fs/cgroup
none 396M 1M 396M 1% /run
none 5M 1M 5M 1% /run/lock
none 1977M 0M 1977M 0% /run/shm
none 100M 0M 100M 0% /run/user
两个输出都以兆字节 (MiB) 为单位。
现在问题出现了,哪些文件/元数据保留了1000-969=31MiB
?是否可以显示它们?
谢谢!
您能否在连接表中告知这个“过期”时间:
# ipvsadm -lnc | head
IPVS connection entries
pro expire state source virtual destination
TCP 07:17 ESTABLISHED CLIENT_IP:54799 VIP:443 REAL_SERVER_IP:443
我正在使用 Red Hat 负载均衡器(带有防火墙标记的 DR,没有持久性连接),根据文档,TCP、TCP FIN 和 UDP 超时的默认值为 0,但看起来这个到期时间是 15 分钟并且有许多活动连接 - 它与--set
参数有关吗?
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 80 wlc
-> REAL_SERVER_1:80 Route 1 402 0
-> REAL_SERVER_2:80 Route 1 404 1
-> REAL_SERVER_3:80 Route 1 406 0
FWM 443 wlc
-> REAL_SERVER_1:443 Route 1 2214 0
-> REAL_SERVER_2:443 Route 1 2215 3
-> REAL_SERVER_3:443 Route 1 2214 1
我正在使用隧道设置 LVS 集群。目标是拥有两个导向器服务器(在不同的数据中心)和一个真实服务器(目前,稍后将在负载平衡中添加更多)。通过端口 80、443 和 8080 访问真实服务器
我已经成功配置了我的主控制器,它工作得很好,所有端口都打开了,数据流动良好
但是,备份导向器只能连接到端口 443 上的真实服务器。这是我在 /var/log/messages 中得到的输出:
Oct 27 12:25:20 vps4252 pulse[2819]: STARTING PULSE AS MASTER
Oct 27 12:25:38 vps4252 pulse[2819]: partner dead: activating lvs
Oct 27 12:25:38 vps4252 lvsd[2821]: starting virtual service https active: 443
Oct 27 12:25:38 vps4252 lvsd[2821]: create_monitor for https/node1 running as pid 2831
Oct 27 12:25:38 vps4252 lvsd[2821]: starting virtual service http_8080 active: 8080
Oct 27 12:25:38 vps4252 lvsd[2821]: create_monitor for http_8080/node1 running as pid 2833
Oct 27 12:25:38 vps4252 nanny[2831]: starting LVS client monitor for 103.13.xxx.xxx:443 -> 103.29.zzz.zzz:443
Oct 27 12:25:38 vps4252 nanny[2833]: starting LVS client monitor for 103.13.xxx.xxx:8080 -> 103.29.zzz.zzz:8080
Oct 27 12:25:38 vps4252 nanny[2831]: [ active ] making 103.29.zzz.zzz:443 available
Oct 27 12:25:43 vps4252 pulse[2823]: gratuitous lvs arps finished
(忽略缺少的端口 80 线,我当时禁用它进行测试)
似乎 nanny 进程只能连接到端口 443 上的真实服务器。然而,使用 netcat 或 curl,我在其他 2 个端口上得到了正确的响应。
这是我的 lvs.cf(作为单个服务器):
serial_no = 36
primary = 103.13.yyy.yyy
service = lvs
backup = 0.0.0.0
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = tunnel
debug_level = NONE
virtual http {
active = 1
address = 103.13.xxx.xxx eth0:1
vip_nmask = 255.255.255.255
port = 80
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
#Define nodes
server node1 {
address = 103.29.zzz.zzz
active = 1
port = 80
weight = 1
}
}
virtual https {
active = 1
address = 103.13.xxx.xxx eth0:1
vip_nmask = 255.255.255.255
port = 443
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
#Define nodes
server node1 {
address = 103.29.zzz.zzz
active = 1
port = 443
weight = 1
}
}
virtual http_8080 {
active = 1
address = 103.13.xxx.xxx eth0:1
vip_nmask = 255.255.255.255
port = 8080
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
use_regex = 1
protocol = tcp
#Define nodes
server node1 {
address = 103.29.zzz.zzz
active = 1
port = 8080
weight = 1
}
}
真实服务器上的隧道已经设置正确(毕竟443端口是工作的)
所以我被难住了......有没有办法强制节点处于活动状态,即使nanny没有找到它?
我正在设置一个使用 VM(可能是亚马逊,但这不是一成不变的)托管的应用程序,这将需要 HTTP 负载平衡和负载平衡大量(如果可能的话,50k 左右)持久的 TCP 连接。数据量不是很大,但是更新很频繁。
现在我正在评估负载均衡器并且对 HAProxy 的架构有点困惑。如果我使用 HAProxy 来平衡 TCP 连接,所有产生的流量都必须流经负载平衡器吗?如果是这样,另一个解决方案(例如 LVS 甚至 nginx_tcp_proxy_module)是否更合适?
正确的。
我正在研究建立这样的系统:
/ [负载平衡器] \ /\/\/\/\/\/\/\ [LAN1] - ----- | 服务器池 | \ [负载均衡器] / \/\/\/\/\/\/\/ | [多余的 ] [负载均衡器]
在此设置中,将有负载平衡器的主动-主动配置(以确保没有单点故障)和池中可变数量的 Web 服务器。服务器可以随时设置和运行(通过网络启动),因此 Balancer 应该能够将这些服务器添加到后端而无需重新启动服务。如您所知,我很清楚问题出在哪里,但我不确定如何实施。我想知道:
1) 在这种情况下,哪种负载均衡器最适合?到目前为止,我研究过的是 HAProxy、Linux Virtual Server、Ultramonkey 和 XR crossroads。LVS 可以通过 ipvsadm 支持在不重启的情况下添加和删除服务器,而 crossroads 有一种(尽管是 hacky)方法来支持它。我没有在 HAProxy 上找到任何关于此的注释,所以我不知道这是否可能。
1b) 是否有针对特定 LB 的“最佳”操作系统?显然将需要 Linux,但是是否有最适合它的风格?
2) 是否真的可以设置主动-主动配置?我见过很多人说他们已经做到了,但没有说明如何去做。
3) 将每个平衡器连接到自己的服务器池(即不同的接口和物理 LAN)会更好吗?这会有所作为吗?
接受任何想法/技巧/刺激大脑。我读了很多书,很难知道什么是/不值得研究的。
基于这个问题:广泛使用的负载平衡解决方案?, LVS 可能是我的问题的正确解决方案。
但是当我访问它的主页http://www.linuxvirtualserver.org/时,我发现LVS 从2008 年11 月开始更新。世界在快速发展,我不知道LVS 是否已经过时了。
LVS 是停滞不前,还是有更好的解决方案来替代它?
太感谢了。
我听说过一些分布式文件系统,比如 Gluster 和 Moose。有没有我不知道的更好的想法?
我正在使用 keepalived 来平衡多个 TCP 服务器之间的连接。我不认为这很重要,但这种情况下的服务是rabbitmq。我正在使用带有加权循环的 NAT 类型平衡。
客户端连接到服务器,因此:
[client]-----------[lvs]------------[real server]
a b
如果客户端连接到 LVS 并保持空闲,在套接字上不发送任何内容,这最终会超时,根据使用设置的超时ipvsadm --set
。此时,上面标记为“a”的连接正确地从netstat -anp
客户端的输出和ipvsadm -L -n -c
lvs 框的输出中消失了。但是,连接“b”根据netstat -anp
真实服务器盒保持已建立。
为什么是这样?我可以强制lvs正确重置与真实服务器的连接吗?