Peer to Peer Netzwerk

Domsdagr

New Member
Aug 18, 2022
21
0
1
Hallo zusammen,

wir haben bei einem Kunden ein Cluster bestehend aus 3 Servern. Diese Server sind mit jeweils einer 10 GBit/s Netzwerkkarte ausgestattet, welche für ein Ceph Netzwerk genutzt werden sollen. Die 3 Server sind über die 10 GBit/s Karten direkt miteinander verbunden (da kein 10 GBit/s Switch angeschafft werden soll) und ich habe jedem Port eine dedizierte IP vergeben.

Server 1 IPs: 10.10.10.10/24 |10.10.10.11/24 |10.10.10.12/24 | 10.10.10.13/24
Server 2 IPs: 10.10.10.20/24 |10.10.10.21/24 |10.10.10.22/24 | 10.10.10.23/24
Server 3 IPs: 10.10.10.30/24 |10.10.10.31/24 |10.10.10.32/24 | 10.10.10.33/24

Nach meinem Verständnis sollten die Server mit dieser Konfiguration in der Lage sein sich gegenseitig zu pingen. Dies können sie jedoch nicht. Ich bekomme die Meldung "destination Host unreachable". Sich selbst pingen (also von Server 1 auf z.B. die 10.10.10.10) funktioniert einwandfrei.

Was mache ich hier falsch?

Screenshot vom Server 1:
proxmox-ceph-netzwerk.PNG
 
Hallo,

ein CEPH-Netzwerk mit direkt verbundenen Ports wird auch 'Full Mesh Network' genannt, hier sind Infos dazu:
https://pve.proxmox.com/wiki/Full_Mesh_Network_for_Ceph_Server

Hier wird mehreren Ports also die gleiche IP-Adresse gegeben und bei ifup wird eine entsprechende Route gesetzt, und diese Route bei ifdown wieder entfernt.

Viele Grüße,
Benedikt
 
  • Like
Reactions: aaron
Hier wird mehreren Ports also die gleiche IP-Adresse gegeben und bei ifup wird eine entsprechende Route gesetzt, und diese Route bei ifdown wieder entfernt.
Du beziehst dich also auf das "Routed Setup" aus dem Wiki, richtig?
 
Du beziehst dich also auf das "Routed Setup" aus dem Wiki, richtig?
Genau.

Ich hab in einer Installation eine ähnliche Konstellation genutzt (3 Server, 4x 10Gbit pro Server für CEPH). Im Gegensatz zu dem Beispiel oben sind Ports noch gebondet:

Code:
Server 1  |||  Server 2
  bond1   <->    bond2

Server 2  |||  Server 3
  bond1   <->    bond2

Server 3  |||  Server 1
  bond1   <->    bond2


Das sieht dann folgendermaßen in der /etc/interfaces aus (hier für Server 1):

Code:
auto bond1
iface bond1 inet static
        address 10.26.10.11/24
        bond-slaves enp134s0f0 enp216s0f0
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer3+4
        up ip route add 10.26.10.12/32 dev bond1
        down ip route del 10.26.10.12/32
#CEPH > pvekr02 bond2

auto bond2
iface bond2 inet static
        address 10.26.10.11/24
        bond-slaves enp134s0f1 enp216s0f1
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer3+4
        up ip route add 10.26.10.13/32 dev bond2
        down ip route del 10.26.10.13/32
#CEPH > pvekr03 bond1
 
Genau.

Ich hab in einer Installation eine ähnliche Konstellation genutzt (3 Server, 4x 10Gbit pro Server für CEPH). Im Gegensatz zu dem Beispiel oben sind Ports noch gebondet:

Code:
Server 1  |||  Server 2
  bond1   <->    bond2

Server 2  |||  Server 3
  bond1   <->    bond2

Server 3  |||  Server 1
  bond1   <->    bond2


Das sieht dann folgendermaßen in der /etc/interfaces aus (hier für Server 1):

Code:
auto bond1
iface bond1 inet static
        address 10.26.10.11/24
        bond-slaves enp134s0f0 enp216s0f0
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer3+4
        up ip route add 10.26.10.12/32 dev bond1
        down ip route del 10.26.10.12/32
#CEPH > pvekr02 bond2

auto bond2
iface bond2 inet static
        address 10.26.10.11/24
        bond-slaves enp134s0f1 enp216s0f1
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer3+4
        up ip route add 10.26.10.13/32 dev bond2
        down ip route del 10.26.10.13/32
#CEPH > pvekr03 bond1
Ich habe jetzt jegliche Kombination ausgetestet und bekomme es einfach nicht ans laufen. Aktuell sieht meine /etc/network/interfaces Datei so aus:

Code:
root@pve1:~# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface eno8303 inet manual

auto enp138s0f2
iface enp138s0f2 inet static
        address 10.10.10.12/24
        up ip route add 10.10.10.20/24 dev enp138s0f2
        down ip route del 10.10.10.20/24
#10 Gbit/s Ceph

auto enp138s0f3
iface enp138s0f3 inet static
        address 10.10.10.13/24
        up ip route add 10.10.10.21/24 dev enp138s0f3
        down ip route del 10.10.10.21/24
#10 Gbit/s Ceph

iface eno8403 inet manual

auto eno12399
iface eno12399 inet manual

auto eno12409
iface eno12409 inet manual

auto eno12419
iface eno12419 inet manual

auto eno12429
iface eno12429 inet manual

auto enp138s0f0
iface enp138s0f0 inet static
        address 10.10.10.10/24
#10 Gbit/s Ceph

auto enp138s0f1
iface enp138s0f1 inet static
        address 10.10.10.11/24
#10 Gbit/s Ceph

auto vmbr0
iface vmbr0 inet static
        address 192.168.7.32/24
        gateway 192.168.7.254
        bridge-ports eno8303
        bridge-stp off
        bridge-fd 0
Was ich auch sehr merkwürdig finde ist, dass der Befehl "ip route" die eingestellte route gar nicht erst anzeigt:

Code:
root@pve1:~# ip route
default via 192.168.7.254 dev vmbr0 proto kernel onlink
10.10.10.0/24 dev enp138s0f2 proto kernel scope link src 10.10.10.12 linkdown
10.10.10.0/24 dev enp138s0f3 proto kernel scope link src 10.10.10.13 linkdown
10.10.10.0/24 dev enp138s0f0 proto kernel scope link src 10.10.10.10 linkdown
10.10.10.0/24 dev enp138s0f1 proto kernel scope link src 10.10.10.11 linkdown
192.168.7.0/24 dev vmbr0 proto kernel scope link src 192.168.7.32

Was mache ich falsch? Ich verzweifle hier langsam :D

Edit: Hier auch nochmal eine Ausgabe von "ethtool enp138s0f0". Auffällig finde ich das "Link detected: no". Wie gesagt sind die Server peer-to-peer über diese Interfaces verbunden.

Code:
root@pve1:~# ethtool enp138s0f0
Settings for enp138s0f0:
        Supported ports: [ TP    FIBRE ]
        Supported link modes:   1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseT/Full
                                10000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  Not reported
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: No
        Link partner advertised FEC modes: Not reported
        Speed: Unknown!
        Duplex: Unknown! (255)
        Auto-negotiation: on
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000000 (0)
                              
        Link detected: no
 
Last edited:
Hallo,

folgende Punkte fallen mir spontan auf:
  • die beiden Interfaces benötigen die gleiche IP-Adresse, das ist kein Schreibfehler!
  • bei den ifup- und ifdown-Befehlen muss die Subnetzmaske /32 benutzt werden.
Ich nehme mal an er postet die Routen nicht, weil z.B. 10.10.10.21/24 kein richtiges Subnetz beschreibt.

Folgendes würde ich bei dir machen: Zuerst bekommt jeder Server eine Ceph IP-Adresse (ich orientiere mich mal an den in deinen Beispielen):
  • Server 1: 10.10.10.10
  • Server 2: 10.10.10.20
  • Server 3: 10.10.10.30
Dann verbindest du je zwei Interfaces eines Servers zusammen:

Code:
Server 1  |||  Server 2
  eno1      <->    eno2

Server 2  |||  Server 3
  eno1      <->    eno2

Server 3  |||  Server 1
  eno1      <->    eno2

(hier müssen statt eno1/eno2 die Namen der richtigen Interfaces eingesetzt werden - wie enp138s0f2)

Jetzt sind folgende Routen erforderlich:
  • Server 1: (10.10.10.10)
    • Pakete zu 10.10.10.20 (Server 2) müssen über eno1 versendet werden
    • Pakete zu 10.10.10.30 (Server 3) müssen über eno2 versendet werden
  • Server 2: (10.10.10.20)
    • Pakete zu 10.10.10.10 (Server 1) müssen über eno2 versendet werden
    • Pakete zu 10.10.10.30 (Server 3) müssen über eno1 versendet werden
  • Server 3: (10.10.10.30)
    • Pakete zu 10.10.10.10 (Server 1) müssen über eno1 versendet werden
    • Pakete zu 10.10.10.20 (Server 2) müssen über eno2 versendet werden
Die Routen sollen jeweils für genau diese einzige Ziel-IP-Adresse eingerichtet werden, also Subnetzmaske /32 (=Subnetz aus 1 IP-Adresse). Ansonsten weiß der Server nicht, welches Interface er nehmen soll.

Das ergibt dann folgende Konfiguration:
Code:
# Server 1:
auto eno1
iface eno1 inet static
        address 10.10.10.10/24
        up ip route add 10.10.10.20/32 dev eno1
        down ip route del 10.10.10.20/32
#10 Gbit/s Ceph > Server 2

auto eno2
iface eno2 inet static
        address 10.10.10.10/24
        up ip route add 10.10.10.30/32 dev eno2
        down ip route del 10.10.10.30/32
#10 Gbit/s Ceph > Server 3

Code:
# Server 2:
auto eno1
iface eno1 inet static
        address 10.10.10.20/24
        up ip route add 10.10.10.30/32 dev eno1
        down ip route del 10.10.10.30/32
#10 Gbit/s Ceph > Server 3

auto eno2
iface eno2 inet static
        address 10.10.10.20/24
        up ip route add 10.10.10.10/32 dev eno2
        down ip route del 10.10.10.10/32
#10 Gbit/s Ceph > Server 1


Code:
# Server 3:
auto eno1
iface eno1 inet static
        address 10.10.10.30/24
        up ip route add 10.10.10.10/32 dev eno1
        down ip route del 10.10.10.10/32
#10 Gbit/s Ceph > Server 1

auto eno2
iface eno2 inet static
        address 10.10.10.30/24
        up ip route add 10.10.10.20/32 dev eno2
        down ip route del 10.10.10.20/32
#10 Gbit/s Ceph > Server 2
 
Last edited:
  • Like
Reactions: Domsdagr
@B.Otto Ich habe die Konfiguration, so wie Du es mir beschrieben hast durchgeführt (vorerst nur für die Verbindung zwischen Server 1 und Server 2), aber leider kann ich immer noch nicht pingen.

Gibt es vielleicht noch weitere Ansätze, welche ich versuchen könnte?
 
Hallo,

da brauche ich mehr Informationen, werden die Routen denn jetzt gepostet wenn die Netzwerkverbindung aufgebaut ist? Wie sieht die Konfig von beiden Servern denn jetzt aus?

Viele Grüße,
Benedikt
 
Hallo,

da brauche ich mehr Informationen, werden die Routen denn jetzt gepostet wenn die Netzwerkverbindung aufgebaut ist? Wie sieht die Konfig von beiden Servern denn jetzt aus?

Viele Grüße,
Benedikt
Hallo Benedikt,
ein "ip route" Befehl auf Server1 liefert mir folgendes:

Code:
10.10.10.20 dev enp138s0f0 scope link linkdown
10.10.10.30 dev enp138s0f1 scope link linkdown

Die Konfigs sehen so aus:


Code:
Server 1:

root@pve1:~# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface eno8303 inet manual

auto enp138s0f2
iface enp138s0f2 inet static
        address 10.10.10.10/24
#10 Gbit/s Ceph

auto enp138s0f3
iface enp138s0f3 inet static
        address 10.10.10.10/24
#10 Gbit/s Ceph

iface eno8403 inet manual

auto eno12399
iface eno12399 inet manual

auto eno12409
iface eno12409 inet manual

auto eno12419
iface eno12419 inet manual

auto eno12429
iface eno12429 inet manual

auto enp138s0f0
iface enp138s0f0 inet static
        address 10.10.10.10/24
        up ip route add 10.10.10.20/32 dev enp138s0f0
        down ip route del 10.10.10.20/32
#10 Gbit/s Ceph

auto enp138s0f1
iface enp138s0f1 inet static
        address 10.10.10.10/24
        up ip route add 10.10.10.30/32 dev enp138s0f1
        down ip route del 10.10.10.30/32
#10 Gbit/s Ceph

auto vmbr0
iface vmbr0 inet static
        address 192.168.7.32/24
        gateway 192.168.7.254
        bridge-ports eno8303
        bridge-stp off
        bridge-fd 0
        
Server 2:

root@pve2:~# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface eno8303 inet manual

auto enp138s0f2
iface enp138s0f2 inet static
        address 10.10.10.20/24
#10 Gbit/s Ceph

auto enp138s0f3
iface enp138s0f3 inet static
        address 10.10.10.20/24
#10 Gbit/s Ceph

iface eno8403 inet manual

iface eno12399 inet manual

iface eno12409 inet manual

iface eno12419 inet manual

iface eno12429 inet manual

auto enp138s0f0
iface enp138s0f0 inet static
        address 10.10.10.20/24
        up ip route add 10.10.10.10/32 dev enp138s0f0
        down ip route del 10.10.10.10/32
#10 Gbit/s Ceph

auto enp138s0f1
iface enp138s0f1 inet static
        address 10.10.10.20/24
        up ip route add 10.10.10.30/32 dev enp138s0f1
        down ip route del 10.10.10.30/32
#10 Gbit/s Ceph

auto vmbr0
iface vmbr0 inet static
        address 192.168.7.42/24
        gateway 192.168.7.254
        bridge-ports eno8303
        bridge-stp off
        bridge-fd 0
        
Server 3:

root@pve3:~# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface eno8303 inet manual

auto enp138s0f2
iface enp138s0f2 inet static
        address 10.10.10.30/24
#10 Gbit/s Ceph

auto enp138s0f3
iface enp138s0f3 inet static
        address 10.10.10.30/24
#10 Gbit/s Ceph

iface eno8403 inet manual

iface eno12399 inet manual

iface eno12409 inet manual

iface eno12419 inet manual

iface eno12429 inet manual

auto enp138s0f0
iface enp138s0f0 inet static
        address 10.10.10.30/24
        up ip route add 10.10.10.10/32 dev enp138s0f0
        down ip route del 10.10.10.10/32
#10 Gbit/s Ceph

auto enp138s0f1
iface enp138s0f1 inet static
        address 10.10.10.30/24
        up ip route add 10.10.10.20/32 dev enp138s0f1
        down ip route del 10.10.10.20/32
#10 Gbit/s Ceph

auto vmbr0
iface vmbr0 inet static
        address 192.168.7.52/24
        gateway 192.168.7.254
        bridge-ports eno8303
        bridge-stp off
        bridge-fd 0

Ein "ip link" Befehl auf Server 1 ergibt das:

Code:
root@pve1:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno8303: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP mode DEFAULT group default qlen 1000
    link/ether 90:8d:6e:fd:ac:b8 brd ff:ff:ff:ff:ff:ff
    altname enp4s0f0
3: eno8403: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 90:8d:6e:fd:ac:b9 brd ff:ff:ff:ff:ff:ff
    altname enp4s0f1
4: eno12399: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 84:16:0c:ac:2d:40 brd ff:ff:ff:ff:ff:ff
    altname enp81s0f0
5: enp138s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether f4:c7:aa:52:64:bc brd ff:ff:ff:ff:ff:ff
6: eno12409: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 84:16:0c:ac:2d:41 brd ff:ff:ff:ff:ff:ff
    altname enp81s0f1
7: enp138s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether f4:c7:aa:52:64:bd brd ff:ff:ff:ff:ff:ff
8: eno12419: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 84:16:0c:ac:2d:42 brd ff:ff:ff:ff:ff:ff
    altname enp82s0f0
9: eno12429: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 84:16:0c:ac:2d:43 brd ff:ff:ff:ff:ff:ff
    altname enp82s0f1
10: enp138s0f2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether f4:c7:aa:52:64:be brd ff:ff:ff:ff:ff:ff
11: enp138s0f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether f4:c7:aa:52:64:bf brd ff:ff:ff:ff:ff:ff
12: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 90:8d:6e:fd:ac:b8 brd ff:ff:ff:ff:ff:ff
 
Hmm, die Konfig sollte soweit passen, sofern die Server folgendermaßen verbunden sind:

Server 1: enp138s0f0 -> Server 2: enp138s0f0
Server 2: enp138s0f1 -> Server 3: enp138s0f1
Server 3: enp138s0f0 -> Server 1: enp138s0f1

Komisch ist aber, dass die beiden Ports enp138s0f0 und enp138s0f1 in dem Output von ip link als state DOWN angezeigt werden (bzw. es fehlt das LOWER_UP flag in den brackets). Sind die Kabel richtig verbunden und leuchten bei den Ports auch die Lämpchen?
 
Hmm, die Konfig sollte soweit passen, sofern die Server folgendermaßen verbunden sind:

Server 1: enp138s0f0 -> Server 2: enp138s0f0
Server 2: enp138s0f1 -> Server 3: enp138s0f1
Server 3: enp138s0f0 -> Server 1: enp138s0f1

Komisch ist aber, dass die beiden Ports enp138s0f0 und enp138s0f1 in dem Output von ip link als state DOWN angezeigt werden (bzw. es fehlt das LOWER_UP flag in den brackets). Sind die Kabel richtig verbunden und leuchten bei den Ports auch die Lämpchen?
Die Verkabelung ist genau so, wie du angegeben hast. Die Kabel stecken richtig und die linken LEDs leuchten auch. Nur die rechten LEDs, welche im Regelfall blinken, bleiben aus.