DRBD8 с Systemd-Networkd (Netplan)
Это первый раз, когда я настраиваю DRBD(drbd-utils 8.9.10-2) на Ubuntu 18.04 с помощью systemd-networkd (используя netplan).
Как правило, установка кажется успешной. У меня есть один ресурс, который синхронизируется на двух хостах через выделенный интерфейс. Сетевой адаптер узла 1 и узла 2 напрямую связан (без коммутатора). Другой сетевой адаптер используется для ресурса hearbeat и ресурсов, таких как веб-сервер.
Теперь к той части, которая не работает:
Когда я отключаю кабель выделенного сетевого подключения drdb, узлы переходят в режим StandAlone вместо WFConnection. Журналы показывают, что он пытается войти в WFConnection, но терпит неудачу и после этого возвращается в StandAlone:
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: ens192: Flags change: -UP -LOWER_UP -RUNNING
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/network1/link/_33 interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=21 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: LLDP: Stopping LLDP client
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: ens192: Stopped LLDP.
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: ens192: Lost carrier
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: ens192: State is configured, dropping config
Apr 17 09:08:01 gts-test-node2 systemd-networkd[284]: ens192: Removing address: 192.168.0.2/24 (valid forever)
Apr 17 09:08:01 gts-test-node2 systemd-timesyncd[388]: Network configuration changed, trying to establish connection.
Apr 17 09:08:01 gts-test-node2 systemd-timesyncd[388]: Synchronized to time server 91.189.94.4:123 (ntp.ubuntu.com).
Apr 17 09:08:02 gts-test-node2 corosync[480]: Apr 17 09:08:02 warning [TOTEM ] Incrementing problem counter for seqid 7082 iface 192.168.0.2 to [1 of 10]
Apr 17 09:08:02 gts-test-node2 corosync[480]: [TOTEM ] Incrementing problem counter for seqid 7082 iface 192.168.0.2 to [1 of 10]
Apr 17 09:08:02 gts-test-node2 corosync[480]: Apr 17 09:08:02 warning [TOTEM ] Incrementing problem counter for seqid 7084 iface 192.168.0.2 to [2 of 10]
Apr 17 09:08:02 gts-test-node2 corosync[480]: [TOTEM ] Incrementing problem counter for seqid 7084 iface 192.168.0.2 to [2 of 10]
Apr 17 09:08:02 gts-test-node2 kernel: drbd storage1: PingAck did not arrive in time.
Apr 17 09:08:02 gts-test-node2 kernel: drbd storage1: peer( Primary -> Unknown ) conn( Connected -> NetworkFailure ) pdsk( UpToDate -> DUnknown )
Apr 17 09:08:02 gts-test-node2 kernel: drbd storage1: ack_receiver terminated
Apr 17 09:08:02 gts-test-node2 kernel: drbd storage1: Terminating drbd_a_storage1
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: Connection closed
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: conn( NetworkFailure -> Unconnected )
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: receiver terminated
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: Restarting receiver thread
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: receiver (re)started
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: conn( Unconnected -> WFConnection )
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: bind before listen failed, err = -99
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: conn( WFConnection -> Disconnecting )
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: Connection closed
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: conn( Disconnecting -> StandAlone )
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: State change failed: Need a connection to start verify or resync
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: mask = 0x1f0 val = 0x80
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: old_conn:StandAlone wanted_conn:WFConnection
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: receiver terminated
Apr 17 09:08:03 gts-test-node2 kernel: drbd storage1: Terminating drbd_r_storage1
Эта ошибка является новой для меня и никогда не случалась с Ubuntu 16.04, где ifupdown
был использован, а не systemd-networkd
:
сбой связывания перед прослушиванием, err = -99
Если я systemctl stop systemd-networkd
перед отключением кабеля поведение правильное -> оно остается в WFConnection, но я хочу иметь возможность использовать systemd-networkd и не перенастраивать все, чтобы вернуться к "старому способу".
Отсоединение кабеля было смоделировано двумя разными способами с одинаковым результатом:
ip link set ens190 down
или просто физически отключить интерфейс.
Кто-нибудь имеет представление о том, что процесс systemd-networkd
(или возможно networkd-dispatcher
или другое?) вызывает это плохое поведение? Я не смог найти в интернете ничего, связанного с этой темой.
Любая помощь высоко ценится.
0 ответов
Я тоже столкнулся с этой проблемой. Используя networkd-dispatch для регистрации состояния интерфейса, я увидел, что при отсутствии носителя у интерфейса теряется его IP-конфигурация, в результате чего drbd делает все ресурсы автономными. Такое системное поведение, похоже, бесполезно инвертирует всевозможные устоявшиеся представления о том, что должно произойти в этом случае.
https://github.com/systemd/systemd/commit/a9cc0189aa69a5fa1bcbacbdc69740fa3e5353db был добавлен, но он не включен в пакет bionic systemd. Опция, вероятно, также должна быть доступна через netplan, чтобы сгенерированные модули устанавливали желаемое поведение.
Возможные обходные пути:
- Назначьте IP-адрес drbd сетевому мосту и добавьте свой интерфейс репликации к мосту.
- Используйте сетевой диспетчер для
drbdadm connect all
на подходящей стадии
(Я думаю, что поведение systemd совершенно неправильное. Когда возможно связать приложения с определенными адресами, я не хочу, чтобы этот адрес исчезал, потому что одноранговое сетевое устройство перезапускается, кабель отключается и т. Д.)