WinDRBD가 Diskless/StandAlone(두 노드 모두)이 되는 이유는 무엇입니까?

WinDRBD가 Diskless/StandAlone(두 노드 모두)이 되는 이유는 무엇입니까?

질문이 있습니다.

현재 해당 OS는 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;
        }
    }
}

두 노드 모두 정상적으로 작동했습니다. 역할을 전환하여 테스트가 완료되었습니다. ( 1차 → 2차 / 2차 → 1차 )

그런데 문제는 부팅 후 발생했습니다.

부팅 후 상태는 아래와 같습니다. (두 노드 모두)

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

많이 생각하고 찾아봤지만 답을 찾을 수 없었습니다.

제가 의심스러운 점이 몇 가지 있었습니다.

드라이브에 G: 문자가 할당되기 전에 시도했기 때문인지 궁금합니다. 내 생각이 맞다면 해결 방법이 있습니까?

지금 제 생각이지만 위와 같은 문제가 계속 발생한다면 원인은 무엇인가요?

일단 아래와 같은 방법으로 해결했습니다. 하지만 원인을 찾아서 정확하게 고치고 싶습니다.

drbdadm down foo
drbdadm up foo

도움을 주셔서 미리 감사드립니다.

답변1

WinDRBD는 하트비트를 잃어 현재 보고 있는 문제로 이어집니다. H/B의 전선을 자르면 문제를 쉽게 재현할 수 있습니다. 아직은 아직 프로덕션 환경에서는 WinDRBD를 사용하지 마세요. 깨지기 쉽습니다.

답변2

@BaronSamedi1958에는 실제로 요점이 있습니다. WinDRBD는 기본 Windows 솔루션이 아니며 Linux 커널 API를 에뮬레이트하는 래퍼의 도움을 받아 Linux에서 Windows로 노골적으로 포팅되었습니다.

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

"기술적으로 WinDRBD Windows 드라이버는 Windows 플랫폼용 DRBD 드라이버에서 사용하는 Linux 커널 API를 에뮬레이트하는 얇은 Linux 호환성 계층으로 구성됩니다. 이 계층 내부에서는 원래 DRBD 엔진(몇 가지 컴파일러 관련 패치 포함)이 작동합니다. "

결과적으로, WinDRBD는 자신이 무엇을 하고 있는지, 무슨 일이 일어나고 있는지에 대해 많은 단서를 갖고 있지 않습니다. 초기화 시 파트너 노드에 대한 네트워크 연결을 설정하려고 시도하지만 실패합니다... Windows 커널 생태계 내에서 네트워크 스택이 완전히 실행되기 전에 스토리지 스택이 시작되기 때문입니다! WinDRBD는 파트너 노드를 ping할 수 없으므로 문제가 있다고 가정하고 이를 보존하고 데이터 손상을 방지하기 위해 스토리지 풀을 가져오지 않습니다.

이 문제를 해결하는 방법에는 몇 가지가 있습니다.

  1. WinDRBD에서 사용하는 NIC를 제어하는 ​​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. fe StarWind vSAN Free 또는 AzS HCI가 포함된 Microsoft 자체 SDS 내장과 같이 처음부터 Windows용으로 설계된 것을 사용하세요.

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

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

답변3

WinDRBD 버전을 업그레이드할 수 있습니다. 사용 중인 버전은 여전히 ​​릴리스 후보입니다(게시 날짜로 추측하면 1.0.0-rc14 정도). 최신 WinDRBD로 업그레이드하세요. 다음 위치에서 미리 컴파일된 설치 프로그램을 찾을 수 있습니다.

https://linbit.com/linbit-software-download-page-for-linstor-and-drbd-linux-driver/

이 글을 쓰는 시점에서 최신 버전은 1.1.10입니다.

G: 드라이브가 백업 장치인 경우 이 설정이 올바른 것입니다.

문제가 지속되면 알려주시기 바랍니다.

관련 정보