通过多个链路对多个连接进行负载平衡

通过多个链路对多个连接进行负载平衡

据我了解(基于内核文档),“arp_filter=1”的设置需要使用基于源的路由策略允许多个接口在断开连接的网段之间路由流量(可能(但不一定))。

问题1) “arp_filter=1”是利用多条链路带宽的必要条件吗?

无论如何,为了实现负载平衡,我所做的就是使用具有多个下一跳的默认路由此时,如果我使用“ip route get [addr]”(对于本地子网之外的地址),似乎表明使用多个 nexthops 进行负载平衡是可行的……

[root@localhost ~]# ip route get 10.20.44.100
10.20.44.100 via 10.20.30.1 dev eth2  src 10.20.30.42
    cache
[root@localhost ~]# ip route get 10.20.44.100
10.20.44.100 via 10.20.30.1 dev eth3  src 10.20.30.43
    cache
[root@localhost ~]# ip route get 10.20.44.100
10.20.44.100 via 10.20.30.1 dev eth2  src 10.20.30.42
    cache
[root@localhost ~]# ip route get 10.20.44.100
10.20.44.100 via 10.20.30.1 dev eth0  src 10.20.30.40
    cache

但是,如果我用相同的子网,则仅使用默认接口进行传出流量。

[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 dev eth0  src 10.20.30.40
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 dev eth0  src 10.20.30.40
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 dev eth0  src 10.20.30.40
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 dev eth0  src 10.20.30.40
    cache

问题2) 有没有办法获取有关此路由来自哪个路由表的更多信息?以及使用什么规则到达那里?

现在,我猜测负载平衡失败是由于主路由表中存在在默认路由可用之前匹配的链路范围路由造成的...我通过将相同的多下一跳默认路由插入到比主路由表更早匹配的表中来测试这一理论

[root@localhost ~]# ip rule
0:      from all lookup local
32761:  from all to 10.20.30.0/24 lookup 100
...
32766:  from all lookup main
32767:  from all lookup default
[root@localhost ~]# ip route show table 100
default
        nexthop via 10.20.30.1  dev eth0 weight 1
        nexthop via 10.20.30.1  dev eth1 weight 1
        nexthop via 10.20.30.1  dev eth2 weight 1
        nexthop via 10.20.30.1  dev eth3 weight 1

不管对错,它都产生了正确的结果:我的流量现在在所有接口上实现了“负载平衡”(虽然不完美,但仍然):

[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 via 10.20.30.1 dev eth0  src 10.20.30.40
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 via 10.20.30.1 dev eth3  src 10.20.30.43
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 via 10.20.30.1 dev eth2  src 10.20.30.42
    cache
[root@localhost ~]# ip route get 10.20.30.100
10.20.30.100 via 10.20.30.1 dev eth0  src 10.20.30.40
    cache

我在这里看到的最大问题是,据我所知,我刚刚做了这样的事情,否则本来永远不会经过我的本地交换机的流量现在无论如何都会被路由(可能多次跳转到我的默认路由)。

问题 3) 除了使用额外的默认路由表之外,还有其他更简单/更好的方法来管理子网间和子网内负载平衡吗?

答案1

我只能对问题 3 进行评论。您应该查看以太网绑定 (802.3ad)。这应该比基于 IP 的负载平衡简单得多。

相关内容