AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 776057
Accepted
To마SE
To마SE
Asked: 2016-05-12 00:28:49 +0800 CST2016-05-12 00:28:49 +0800 CST 2016-05-12 00:28:49 +0800 CST

Ubuntu 16.04 LTS 服务器上的 802.3ad 绑定配置文件

  • 772

如果我在命令行上使用手动设置(按照内核说明),我可以正确设置我的网络连接:

# modprobe bonding mode=4 miimon=100
# ifconfig bond0 up
# ip link set eno1 master bond0
# ip link set eno2 master bond0

作为记录,使用的交换机是 Cisco Nexus 2248,我没有指定 IP 地址,因为还有一个额外的 802.1q 层(配置文件中存在或不存在对问题没有影响)。

问题是我无法创建正确的/etc/network/interfaces文件以在启动时自动完成此操作。网上有很多关于 ifenslave 包的不同版本之间的混淆,尤其是它的文档,以及如何在使用 ifup 时避免竞争条件。任何适用于以前版本的 Ubuntu 的东西都不再适用了。如果 systemd 让事情变得更加混乱,我也不会感到惊讶。基本上,无论我尝试什么,我的脚本都会在启动时卡住,我必须等待一到五分钟才能完成启动过程。

这是我能做到的最好的:

auto lo
iface lo inet loopback

allow-bond0 eno1
iface eno1 inet manual
       bond-master bond0

allow-bond0 eno2
iface eno2 inet manual
       bond-master bond0

auto bond0
iface bond0 inet manual
       bond-mode 4
       bond-slaves eno1 eno2
       bond-miimon 100

在启动时,bond0 停顿一分钟(因为 bond0 正在等待至少一个从属设备被启动,这永远不会发生,所以它超时),但是一旦系统启动,使用ifup eno1works 和 bond0 启动好好工作。

如果我指定auto eno1,那么启动过程会停止五分钟,bond0 永远不会正确启动,尝试使用ifdown eno1会卡住,因为它正在等待一些锁定/run/network/wherever(不记得确切的文件,并且经常重启这台机器已经),这似乎表明是的,我遇到了竞争条件,ifup 永远卡在 eno1 上。

有没有人在最新的 Ubuntu 上有一个可行的解决方案?

ubuntu networking bonding
  • 4 4 个回答
  • 25175 Views

4 个回答

  • Voted
  1. Best Answer
    timss
    2016-05-19T23:42:45+08:002016-05-19T23:42:45+08:00

    我有一个在 16.04 (linux 4.4.0-22) 上运行的工作设置,非常相似。

    除了 LACP 速率和 1G (eno1+) vs 10G SFP+ (eno49+) 最大的区别似乎是使用auto bond0.

    # /etc/modprobe.d/bonding.conf
    alias bond0 bonding
        options bonding mode=4 miimon=100 lacp_rate=1
    

    其中一些选项可能是多余的。

    # /etc/network/interfaces
    auto eno49
    iface eno49 inet manual
        bond-master bond0
    
    auto eno50
    iface eno50 inet manual
        bond-master bond0
    
    auto bond0
    iface bond0 inet static
        address 10.0.0.1
        netmask 255.255.255.0
        bond-slaves eno49 eno50
        bond-mode 4
        bond-miimon 100
        bond-lacp-rate 1
    

    在启动过程中看不到任何停顿。执行 asystemctl restart networking会产生几秒钟的短暂等待,但仅此而已。

    $ systemd-analyze
    Startup finished in 2.344s (kernel) + 1.658s (userspace) = 4.002s
    
    • 2
  2. ryci.us
    2017-01-20T01:31:15+08:002017-01-20T01:31:15+08:00

    您必须允许系统启动绑定接口,即使从端口还没有准备好一直配置它,“bond-slaves none”会这样做。所以正确的配置示例:

    allow-hotplug eno1
    iface eno1 inet manual
        bond-master bond0
    
    allow-hotplug eno2
    iface eno2 inet manual
        bond-master bond0
    
    auto bond0
    iface bond0 inet manual
        bond-mode 802.3ad
        bond-miimon 100
        bond-lacp-rate fast
        bond-slaves none
        bond-xmit_hash_policy layer2+3
    
    • 2
  3. mbello
    2016-09-12T17:50:18+08:002016-09-12T17:50:18+08:00

    我在 16.04 上也有一个有效的绑定设置,我的设置从 12.04 开始在 Ubuntu 上运行良好,没有改变。

    我的解决方案与@timss 的解决方案几乎相同,但我从不需要弄乱 /etc/modprobe.d/bonding.conf 并且随着时间的推移我发现一些必要的细节,我将其包括在下面并将在结束。

    下面,我在bond0上绑定了eth2-eth5接口

    auto eth2
    iface eth2 inet manual
            bond-master bond0
    
    auto eth3
    iface eth3 inet manual
            bond-master bond0
    
    auto eth4
    iface eth4 inet manual
            bond-master bond0
    
    auto eth5
    iface eth5 inet manual
            bond-master bond0
    
    auto bond0
    iface bond0 inet manual
            hwaddress ether 00:00:00:00:00:00 <= ADD MAC of one of the bonded interfaces here
            bond-slaves eth2 eth3 eth4 eth5
            bond-miimon 100
            bond-mode 802.3ad
            bond-lacp-rate 1
            xmit_hash_policy layer3+4
    

    注释:

    1. “hwaddress ether”:我注意到,当您绑定接口时,绑定接口的 MAC 地址将等于被绑定接口之一的 MAC 地址,但每次系统重新启动时它可能会更改。我发现服务器拥有一个已知的 MAC 地址很有用,所以在这里我将其设置为其中一个接口的 MAC,并且这种方式将是永久性的。
    2. “xmit_hash_policy”:阅读有关此选项的文档,它会对绑定接口的性能产生非常显着的影响。
    • 1
  4. To마SE
    2016-05-17T09:13:37+08:002016-05-17T09:13:37+08:00

    我想出了一个丑陋的黑客,我宁愿没有得到任何荣誉,但希望它可以帮助人们开始并在等待正确答案/修复时做更重要的事情:

    auto bond0
    iface bond0 inet manual
            pre-up modprobe bonding mode=4 miimon=100
            pre-up ifconfig bond0 up
            pre-up ip link set eno1 master bond0
            pre-up ip link set eno2 master bond0
            up /bin/true
            down /bin/true
            post-down ip link set eno2 nomaster
            post-down ip link set eno1 nomaster
            post-down ifconfig bond0 down
            post-down rmmod bonding
    

    它几乎包括重载整个 ifup 脚本。执行时会显示错误消息,ifdown bond0但根据设计 ifdown 会继续执行剩余的脚本,并且系统最终会干净(可以循环通过 ifup/ifdown),所以我不觉得有必要修复它。

    另外,由于从属服务器是在主服务器的脚本中处理的,因此无需在配置文件中声明它们。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve