【问题标题】:docker & Quagga BGP码头工人和 Quagga BGP
【发布时间】:2014-10-19 00:25:42
【问题描述】:

我将 Qugaa bgpd 和 nsm 二进制文件捆绑到一个基于 Ubuntu 3.13.0-36-generic 内核的 docker 中。现在我在 linux 服务器上运行多个这些 docker。这些 docker 使用 docker-py 实例化。

我使用管道并在每个 docker 上创建了一个以太网接口,并分配了一个 172.17.xx.xx 类型的地址。我的 BGP 配置是这样的,所有 docker 都与 BGP 完全啮合。即 docker 上的每个 BGP 都连接到其他 docker 上运行的所有其他 BGP。

BGP 会话建立,BGP 路由等绝对没问题。现在,当 docker 的数量超过 30 时,我永远无法连接到 bgp。 “top”命令没有显示太多 cpu 使用情况,内存受到限制,网络活动不多,我也不希望在 BGP 进程中进行太多处理。

当我在容器上使用 tcpdump 时,它是这个样子的。

9 2014-09-26 18:17:54.997861 0a:60:4a:3b:56:31 ARP 44 谁有 172.17.1.32?告诉 172.17.1.6

当我运行 40 个 docker 时,我看到 40 个这样的 ARP 请求,如上所示,然后是一个 ARP 回复。

但是这种情况会持续发生,并且在短时间内大约会产生 1600 (40*40) 条此类消息。我相信这是不允许我使用“telnet localhost bgpd”命令连接到本地 bgp 模块的原因。

我不认为这是 Quagga 或 BGP 特有的任何东西。我怀疑与 docker 网络有关。有没有人遇到过这样的问题,或者知道如何解决这个问题,或者这个问题的根本原因是什么?

【问题讨论】:

    标签: docker arp quagga


    【解决方案1】:

    我终于找到了这背后的根本原因并解决了这个问题。这是由于 docker 实例的数量、我在每个 docker 上创建的 MAC 条目的数量以及我的 linux 服务器上指定的默认 ARP 缓存大小为 1024 的组合。

    在我的情况下,我最终将 MAC 条目创建为(docker 数量 * 我通过管道创建的以太网接口数量)。所以当每个 DOCKER 上的 MAC 条目数量超过默认大小 1024 时,就会出现问题。

    在 /etc/sysctl.conf 文件末尾添加以下行或修改如下(如果 /etc/sysctl.conf 中已有这些条目)解决了问题。

    net.ipv4.neigh.default.gc_thresh1 = 8192
    net.ipv4.neigh.default.gc_thresh2 = 12288
    net.ipv4.neigh.default.gc_thresh3 = 16384
    

    修改后,执行“sysctl -p”命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2017-02-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多