Page MenuHomePhabricator

Network unavailable on a few VMs
Open, Needs TriagePublic

Description

Earlier today, @bd808 reported that he had to reboot a couple of VMs to restore ssh. They were logging-logstash-04.logging and toolhub-demo02.toolhub.

Further investigation revealed several other VMs which have no network access internally; typically they report "Network is unreachable" in syslog. They are:

asbestos-puppetdb-01.puppet-dev.eqiad1.wikimedia.cloud: cloudvirt1045, network unreachable, first at 2026-06-24T19:00, not during migr
ation
demo-patrollers.wmf-research-tools.eqiad1.wikimedia.cloud: cloudvirt1042, network unreachable as far back as syslog goes
logging-logstash-03.logging.eqiad1.wikimedia.cloud: cloudvirt1056, network unreachable, first at 2026-07-15T14:20:34.559213+00:00, doe
s not correspond
logging-logstash-04.logging.eqiad1.wikimedia.cloud: cloudvirt1056, network unreachable
reader-embedding.wmf-research-tools.eqiad1.wikimedia.cloud: cloudvirt1068, network unreachable
wsexport-calibre01.wikisource.eqiad1.wikimedia.cloud: cloudvirt1051, network unreachable, rebooted since last migration

For investigation purposes, I'm looking at logging-logstash-03.logging, instance ID 14abc0a9-ef08-4e73-a54b-8d91c1bbc752

It is bound to port 10a12575-5ae1-43b5-ac3e-d831370b6271, 172.16.1.52

That port reports as ACTIVE. There's no activity associated with that port in neutron-openvswitch-agent.log leading up to the disconnect, nor any mention of the host in nova-compute.log. The downtime does not correspond to a live migration.

Stopping and starting the nic on the VM does not seem to change anything.

The port and the VM are associated with the same hypervisor, cloudvirt1056.

The nic is mentioned in nova-compute.log a couple of days before the failure, acting correctly:

nova-compute.log.4:2026-07-13 20:00:08.119 964917 INFO os_vif [None req-977d3ad8-a609-49cb-8c7e-c28334100194 - - - - - -] Successfully plugged vif VIFOpenVSwitch(active=False,address=fa:16:3e:8f:81:c4,bridge_name='br-int',has_traffic_filtering=True,id=10a12575-5ae1-43b5-ac3e-d831370b6271,network=Network(7425e328-560c-4f00-8e99-706f3fb90bb4),plugin='ovs',port_profile=VIFPortProfileOpenVSwitch,preserve_on_delete=False,vif_name='tap10a12575-5a')

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript
Bugreporter2 renamed this task from Network unavailable on a few VMs. to Network unavailable on a few VMs.Fri, Jul 17, 4:23 AM

Mentioned in SAL (#wikimedia-cloud) [2026-07-17T19:53:18Z] <andrewbogott> hard rebooted logging-logstash-03 and logging-logstash-04 for T432426

Mentioned in SAL (#wikimedia-cloud) [2026-07-17T19:54:56Z] <andrewbogott> hard rebooting demo-patrollers and reader-embedding, reporting as down. Cleanup for T432426

Mentioned in SAL (#wikimedia-cloud) [2026-07-17T19:56:00Z] <andrewbogott> hard rebooting wsexport-calibre01, T432426

There are lots of reasons for a host to become unreachable, but falling off the network is one of them. This dashboard is a good place to start:

https://prometheus-alerts.wmcloud.org/?q=alertname%3DInstanceDown

Let's keep an eye on that and see if we detect more 'fell of network' examples. I acked all the false positives currently on that dash, and will continue to do so for hosts that are showing as down but still have network connectivity.

This just happened again for gitlab-1002.devtools.eqiad1.wikimedia.cloud

first sign of 'network unreachable' is at 2026-07-21T08:12:50.345128+00:00

It seems to have no ipv4 assigned currently:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:08:7d:8a brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet6 2a02:ec80:a000:1::285/64 scope global deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fe80::f816:3eff:fe08:7d8a/64 scope link 
       valid_lft forever preferred_lft forever

dhclient was not running, no evidence of a crash or other things in syslog. this is normal, dhclient is not supposed to run on bookworm or trixie

Starting dhclient caused a full recovery on the host.

This may be recurring on logging-logstash-04. Taavi (and now I) suspect that the issue is with systemd-networkd being unable to reach the dhcp server when renewing leases.

Now running in debug mode (systemctl edit systemd-networkd.service; add a 'Environment=SYSTEMD_LOG_LEVEL=debug' in the [Service] block)

This is a close fit for what we're seeing: https://github.com/systemd/systemd/issues/25441 (h/t to @taavi who found that)

I asked @Jelto about one of his affected hosts and he says "But occasionally some of our WMCS instance lose network connectivity and I just "soft reboot" them from the horizon menu. This fixes the issue most of the time"

So this may have been happening for a while :(

Change #1314020 had a related patch set uploaded (by Andrew Bogott; author: Andrew Bogott):

[operations/puppet@production] cloud-vps: override SYSTEMD_NETLINK_DEFAULT_TIMEOUT on all instances

https://gerrit.wikimedia.org/r/1314020

This may be recurring on logging-logstash-04. Taavi (and now I) suspect that the issue is with systemd-networkd being unable to reach the dhcp server when renewing leases.

Now running in debug mode (systemctl edit systemd-networkd.service; add a 'Environment=SYSTEMD_LOG_LEVEL=debug' in the [Service] block)

Related:

Mentioned in SAL (#wikimedia-cloud) [2026-07-22T22:24:24Z] <bd808> logging-logstash-04 hard reboot via Horizon (T432254)

Change #1314020 merged by Andrew Bogott:

[operations/puppet@production] cloud-vps: override SYSTEMD_NETLINK_DEFAULT_TIMEOUT on all instances

https://gerrit.wikimedia.org/r/1314020

Change #1318256 had a related patch set uploaded (by Andrew Bogott; author: Andrew Bogott):

[operations/puppet@production] cloud-vps: add OS version guard around systemd-networkd override

https://gerrit.wikimedia.org/r/1318256

Change #1318256 merged by Andrew Bogott:

[operations/puppet@production] cloud-vps: add OS version guard around systemd-networkd override

https://gerrit.wikimedia.org/r/1318256

Change #1318779 had a related patch set uploaded (by Andrew Bogott; author: Andrew Bogott):

[operations/puppet@production] cloud-vps: kick networkd if network breaks

https://gerrit.wikimedia.org/r/1318779

@Andrew has logging-logstash-04 remained stable or do we have logging data of a new failure?

additionally were there any more instances of this happening on Trixie hosts after the patch you pushed?

The latest:

  • I just now found a Trixie host without an IP. I don't know for certain that it broke post-patch but I fear the worst. We should keep an eye out for more examples.
  • T433173 makes it very annoying to watch for broken VMs. I've spent some time fixing things there but there are still a bunch of false positives -- I've at least ack'd all the false positives for the moment.
  • Both logging-logstash-04 and logging-logstash-05 have been up for > 5 days but they are Bookworm so they aren't especially useful datapoints about the mitigation attempts.

Reading through the task it strikes me that this might be an issue with DHCP lease renewal. A set of operations which could lead to this scenario is:

  1. Host comes online, the usual DHCP DISCOVER / OFFER / REQUEST / ACK packets flow between VM and server, and it gets an IP
  2. At the end of the VMs allocated DHCP lease time the renewal process fails
  3. Restarting systemd-networkd kicks off a new exchange as per step 1 which fixes it
    1. Or indeed manually running dhclient does

So I'd focus on trying to confirm if this is the case or not, and if it does appear to be right try to work out why the DHCP renewal fails. As a start check if systemd-networkd is logging anything to the journal relating to DHCP

journalctl -u systemd-networkd -g DHCP
sudo networkctl status <interface>

The lease time is only shown in the above on newer systemd release, if it's not there we can check here:

grep . /run/systemd/netif/leases/*

The "LIFETIME" there will tell you how often the host has to renew. systemd should try to rewnew half way through that ('t1' time). What we can do is run a tcpdump on a host we might expect this in the background and try to see if its sending the renewal requests:

sudo tcpdump -i <int> -l -s0 -w /tmp/dhcp_capture.pcap udp port 67 or udp port 68

There won't be any other traffic on those ports so we can leave it running for an extended period and review. It might also help to increase the systemd log level for systemd-networkd to debug as by default it doesn't log renewals. But I'd say start with the tcpdump.

What is acting as the DHCP server here, is there anything in its logs that might point to a reason?

This morning there are no new Trixie hosts down. Three new bookworm hosts show as down -- two of them have fallen off the network and one of them is frozen.

Trixie host f78be803-6d05-43cc-9b40-a8748ff56204 statanalyser.statanalyser.eqiad1.wikimedia.cloud just fell off the network.

This does not seem to be the same issue; it's an old bullseye server that was recently upgraded in place.

Trixie host f78be803-6d05-43cc-9b40-a8748ff56204 statanalyser.statanalyser.eqiad1.wikimedia.cloud just fell off the network.

Further digging reveals this to be an in-place upgrade from Bullseye still relying on dhclient. So... this host should not be taken as an example for anyone.

Bookworm example today: demo-patrollers.wmf-research-tools.eqiad1.wikimedia.cloud