AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Arquivo de configuração de ligação 802.3ad em um servidor Ubuntu 16.04 LTS

  • 772

Se eu usar uma configuração manual na linha de comando (seguindo as instruções do kernel ), posso configurar corretamente minha conexão de rede:

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

Só para constar, o switch utilizado é um Cisco Nexus 2248, e não especifico um endereço IP porque há uma camada 802.1q adicional (cuja presença ou ausência no arquivo de configuração não tem impacto no problema).

O problema é que não consigo criar um /etc/network/interfacesarquivo correto para que isso seja feito automaticamente no momento da inicialização. Há muita confusão online entre as diferentes versões do pacote ifenslave, principalmente sua documentação e sobre como evitar condições de corrida ao usar o ifup. O que funcionou com as versões anteriores do Ubuntu não funciona mais. E eu não ficaria surpreso se o systemd estivesse tornando as coisas ainda mais confusas. Basicamente, não importa o que eu tente, meus scripts travam no momento da inicialização e tenho que esperar um ou cinco minutos antes que o processo de inicialização seja concluído.

Isso é o melhor que consegui:

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

No momento da inicialização, a inicialização do bond0 trava por um minuto (porque o bond0 está esperando que pelo menos um de seus escravos seja ativado, isso nunca acontece, então ele atinge o tempo limite), mas depois que o sistema é inicializado, o uso ifup eno1funciona e o bond0 é iniciado trabalhando corretamente.

Se eu especificar auto eno1, o processo de inicialização para por cinco minutos, o bond0 nunca é ativado corretamente e tentar usá ifdown eno1-lo ficará preso porque está aguardando algum bloqueio /run/network/wherever(não consigo lembrar o arquivo exato e reiniciei esta máquina com frequência suficiente já), o que parece indicar que sim, entrei em uma condição de corrida e ifup está preso para sempre com eno1.

Alguém tem uma solução funcional no Ubuntu mais recente?

ubuntu networking bonding
  • 4 4 respostas
  • 25175 Views

4 respostas

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

    Eu tenho uma configuração de trabalho em execução no 16.04 (linux 4.4.0-22) que é muito semelhante.

    Além da taxa LACP e 1G (eno1+) vs 10G SFP+ (eno49+), a maior diferença parece ser o uso de auto bond0.

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

    Algumas dessas opções podem ser redundantes.

    # /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
    

    Não vendo nenhuma parada durante a inicialização. Fazer um systemctl restart networkinggera uma pequena espera de alguns segundos, mas nada mais.

    $ 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

    Você deve permitir que o sistema abra a interface de ligação mesmo quando as portas escravas não estiverem prontas para configurá-la o tempo todo, "escravos de ligação nenhum" faz isso. Então, exemplo de configuração certa:

    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

    Eu também tenho uma configuração de vínculo funcional em 16.04, e minha configuração funciona bem no Ubuntu desde 12.04, inalterada.

    Minha solução é praticamente a mesma do @timss, mas nunca precisei mexer em /etc/modprobe.d/bonding.conf e há alguns detalhes que achei necessários ao longo do tempo que incluí abaixo e comentarei em o fim.

    Abaixo, tenho interfaces eth2-eth5 ligadas em bond0

    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
    

    Comentários:

    1. "hwaddress ether": notei que quando você vincula suas interfaces, o endereço MAC da interface vinculada será igual ao endereço MAC de uma das interfaces sendo vinculadas, mas pode mudar toda vez que o sistema for reiniciado. Acho útil que os servidores tenham um endereço MAC conhecido, então aqui eu configurei para o MAC de uma das interfaces de forma que seja permanente.
    2. "xmit_hash_policy": leia os documentos sobre esta opção, ela pode ter um impacto muito significativo no desempenho de sua interface vinculada.
    • 1
  4. To마SE
    2016-05-17T09:13:37+08:002016-05-17T09:13:37+08:00

    Eu criei um hack feio pelo qual prefiro não receber nenhum crédito, mas espero que ajude as pessoas a começar e fazer coisas mais importantes enquanto esperam por uma resposta/correção adequada:

    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
    

    Basicamente, consiste em sobrecarregar todos os scripts ifup. Há mensagens de erro exibidas ao fazer ifdown bond0, mas por design, ifdown continua executando os scripts restantes e o sistema acaba limpo (é possível alternar entre ifup/ifdown), então não me sinto compelido a consertar isso.

    Além disso, uma vez que os escravos são tratados no script do mestre, não há necessidade de declará-los no arquivo de configuração.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve