Почему WinDRBD становится бездисковым/автономным (оба узла)

У меня есть вопрос.

В настоящее время эта ОС — Windows Server 2019. Конфигурация тома — Raid-5. Два сервера соединены пульсирующей сетью. Оба узла были зеркалированы с помощью WinDRBD. Оба узла имеют одинаковую конфигурацию. Я оставил неформатированный G: и сделал D: видимым для основного узла.

мой ресурс ниже

      include "global_common.conf";

resource "foo" {
    protocol    A;

    net {
        use-rle no;
    }
    on node1 {
        address     XXX.XXX.XXX.XXX:7600;
        node-id 1;
        volume 1 {
            disk        "G:";
            device      minor 1;
            meta-disk   internal;
        }
    }
    on node2 {
        address     XXX.XXX.XXX.XXX:7600;
        node-id 2;
        volume 1 {
            disk            "G:";
            device      minor 1;
            meta-disk   internal;
        }
    }
}

Оба узла работали нормально. Тесты завершались сменой ролей. (первичный → вторичный / вторичный → первичный)

Однако проблема возникла после загрузки.

После загрузки статус выглядит следующим образом. (оба узла)

      foo role:Secondary
  volume:1 disk:Diskless
  node2 connection:StandAlone

Я много думал и искал, но не нашел ответа.

Было несколько вещей, в которых я сомневался.

Интересно, это потому, что я попробовал до того, как диску была присвоена буква G:. Если мои мысли верны, есть ли обходной путь?

Если теперь я считаю, что вышеуказанная проблема продолжает возникать, в чем причина?

Однажды это решилось следующим образом. Но хочется найти причину и точно ее устранить.

      drbdadm down foo
drbdadm up foo

Заранее спасибо за вашу помощь.

2 ответа

WinDRBD теряет тактовый сигнал, что приводит к наблюдаемой вами проблеме. Отрежьте провода h/b, и вы легко воспроизведете проблему. На стене написано: по крайней мере, пока не используйте WinDRBD в производстве. Это хрупкое.

@BaronSamedi1958 на самом деле прав: WinDRBD не является собственным решением для Windows, он был явно перенесен на Windows из Linux с помощью оболочек, эмулирующих API ядра Linux.

https://linbit.com/windrbd-related-disk-drives-for-windows/

«Технически драйвер WinDRBD для Windows состоит из тонкого уровня совместимости с Linux, который эмулирует API-интерфейсы ядра Linux, используемые драйвером DRBD для платформы Windows. Внутри этого уровня работает оригинальный механизм DRBD (с несколькими исправлениями, специфичными для компилятора). "

В результате WinDRBD не имеет особого представления о том, что он делает и что происходит. При инициализации он пытается установить сетевое соединение с партнерским узлом, но терпит неудачу, потому что... в экосистеме ядра Windows стек хранилища запускается ДО того, как сетевой стек будет полностью запущен и запущен! WinDRBD не может проверить связь с партнерским узлом, поэтому предполагает, что что-то идет не так, и не активирует пул хранения, чтобы сохранить его и избежать повреждения данных.

Есть несколько способов решить эту проблему:

  1. Поместите стартовую зависимость для драйвера Windrbd в минипорт NDIS, управляющий сетевыми адаптерами, используемыми WinDRBD.

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/specifying-driver-load-order

На самом деле это ненадежный способ, поскольку смена сетевого адаптера испортит конфигурацию. + над мини-портом NDIS есть целая куча драйверов, таких как фильтры NDIS (брандмауэр?), драйверы протокола NDIS (TCP/IP?) и т. д., о которых вы мало что знаете, и вам придется вернуться назад с помощью специальных инструментов, которые вам могут понадобиться. не знаком.

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/ndis-driver-stack

  1. Избегайте автоматического запуска WinDRBD и используйте какой-нибудь сценарий, зависящий от входа в систему, для его псевдоавтоматического запуска. Во время процесса входа в систему все компоненты ядра готовы, и в худшем случае вы можете зарегистрировать проблемы с неудачным запуском драйвера в каком-либо файле журнала, проанализировать его, повторить попытки сценария и так далее.

Конечно, это можно сделать, но для этого потребуется немного повозиться с PowerShell. Некоторые хорошие отправные точки вы можете получить из этой ветки обсуждения ниже.

https://stackoverflow.com/questions/27599287/powershell-disable-and-enable-a-driver

  1. Используйте что-то, разработанное для Windows с нуля, например StarWind vSAN Free или собственную встроенную SDS Microsoft, скажем, с AzS HCI.

https://www.starwindsoftware.com/starwind-virtual-san-free

https://docs.microsoft.com/en-us/azure-stack/hci/overview

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