Истек срок аренды DHCP на восстановленном снимке виртуальной машины, мешающем активному соединению gRPC?

Я использую gRPC для связи между Java (работающей на хосте) и Python (работающей на моих гостевых виртуальных машинах). Мое программное обеспечение устанавливает некоторые виртуальные машины при запуске с libvirt. Я указываю свою сеть с диапазоном DHCP следующим образом:

<network>
  ...
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.128' end='192.168.122.254'/>
      <host mac="00:16:3e:77:e2:ed" ip="192.168.122.128"/>
      <host mac="00:16:3e:3e:a9:1a" ip="192.168.122.129"/>
      ...
    </dhcp>
  </ip>
  ...
</network>

Когда все настроено и мои виртуальные машины запущены, я создаю снимок каждой виртуальной машины. Теперь рабочий процесс программного обеспечения выглядит следующим образом: откройте интерфейс gRPC для гостевой виртуальной машины с указанным выше IP-адресом для mac-адреса, установите правильное время (время сейчас отличается из-за моментального снимка и отсутствия доступа к Интернету), выполните некоторую работу, затем восстановить снимок и повторить.

В коде Python на виртуальной машине я посылаю ping-сообщение каждые 5 секунд на хост (что-то вроде пульса). В большинстве случаев это работает просто отлично, и я получаю сообщение на хосте в коде Java. Тем не менее, время от времени я не получаю сообщения больше на хосте в течение 3 минут (после чего я выбрасываю исключение тайм-аута). В коде Python нет ошибки или бесконечного цикла, и на стороне Java также не получено никаких исключений. Так что проблема должна быть в другом месте.

Исследуя причину этого странного поведения, я сталкивался со временем аренды DHCP. Мои виртуальные машины получают свои IP-адреса из диапазона DHCP, настроенного через libvirt (см. Выше). Срок аренды DHCP истекает через 1 час. Интересно, что этот тайм-аут из сообщений сердцебиения часто происходит (если это происходит, а не всегда) примерно через 1 час после того, как я сделал свои начальные снимки, из которых я восстанавливаю. Может ли моя проблема быть связана с процедурой обновления аренды DHCP, когда виртуальная машина внезапно находится в состоянии, в котором у нее больше нет первоначального IP-адреса? Так, например, что я открываю свое соединение gRPC с 192.168.122.128, получаю сообщения пульса, и внезапно из-за истечения срока аренды DHCP IP-адрес изменяется, и gRPC не может доставить какие-либо дополнительные сообщения? Если это может быть проблемой, что я могу сделать против этого?

Кроме того, я запустил пользовательский тест, в котором я открываю соединение gRPC с виртуальной машиной, а затем вручную изменяю IP-адрес на виртуальной машине, а затем возвращаю его к исходному IP-адресу. Затем я наблюдал точно такое же поведение: я получил исключение тайм-аута через 3 минуты, так как после смены вручную больше не поступало сообщений пульса. Поэтому у меня есть сильное чувство, что каким-то образом IP-адрес на виртуальной машине изменяется, что может быть связано с истекающим сроком аренды DHCP, и это мешает соединению gRPC.

Может ли это быть проблемой, или это может быть что-то совершенно другое, что вызывает проблемы с соединением gRPC? Что я мог сделать против этой проблемы? Любая помощь или дальнейшая разработка приветствуется.

1 ответ

Решение

Я почти уверен, что большинство случаев, когда gRPC завис, может быть связано с продлением срока аренды DHCP. Я также подозреваю, что в целом, когда DHCP-сервер не может быть достигнут в любой момент времени, тогда соединение gRPC застревает (я проверял это, вручную устанавливая системное время и вызывая ipconfig /renew из командной строки. Затем я сначала получил таймаут DHCP, но потом он заработал. Но в результате gRPC застрял, хотя я снова получил тот же IP). Поскольку я до сих пор не до конца понимаю поведение продления аренды DHCP и общие сведения о запросах к серверу DHCP и его тайм-аутам, я решил больше не возиться с ним. Я решил использовать статические IP-адреса для своих снимков виртуальной машины (отключенный DHCP). Если кто-то сталкивается с той же проблемой, вы можете попробовать это. Надеюсь, поможет.

Другие вопросы по тегам