質問があります。
現在、この OS は Windows Server 2019 です。ボリューム構成は Raid-5 です。2 つのサーバーはハートビート ネットワークで接続されています。両方のノードは 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
ご協力をよろしくお願いいたします。
答え1
WinDRBD がハートビートを失うと、問題が発生します。h/b の配線を切断すると、問題が簡単に再現します。結論は明らかです。少なくとも今のところは、WinDRBD を本番環境で使用しないでください。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 できないため、何か問題が発生していると想定し、ストレージ プールを起動して保存し、データの破損を回避しません。
この問題を解決する方法はいくつかあります。
- WinDRBD によって使用される NIC を制御する NDIS ミニポートに windrbd ドライバーの開始依存関係を設定します。
https://docs.microsoft.com/en-us/windows-hardware/drivers/install/ドライバーのロード順序の指定
これは実際には不安定な方法であり、ネットワーク アダプターを変更すると構成が台無しになります。+ NDIS ミニポートの上には、NDIS フィルター (ファイアウォール?)、NDIS プロトコル ドライバー (TCP/IP?) など、よくわからないドライバーが多数あり、使い慣れていない特別なツールを使用して戻る必要があります。
https://docs.microsoft.com/en-us/windows-hardware/drivers/network/ndis-driver-stack
- WinDRBD の自動起動を避け、ログオンに依存するスクリプトを使用して擬似的に起動します。ログオン プロセス中はすべてのカーネル コンポーネントが準備されており、最悪の場合、失敗したドライバーの起動の問題をログ ファイルに記録し、分析してスクリプトを再試行するなどできます。
もちろん、これは実行可能ですが、PowerShell を少しいじる必要があります。以下のディスカッション スレッドから、いくつかの良い出発点を得ることができます。
https://stackoverflow.com/questions/27599287/powershell-disable-and-enable-a-driver
- StarWind vSAN Free や、AzS HCI に組み込まれた Microsoft 独自の SDS など、Windows 用に最初から設計されたものを使用します。
答え3
WinDRBD のバージョンをアップグレードすることをお勧めします。現在使用しているバージョンはまだリリース候補版です (投稿の日付から推測すると 1.0.0-rc14 程度)。新しい WinDRBD にアップグレードしてください。コンパイル済みのインストーラは次の場所にあります。
https://linbit.com/linbit-software-download-page-for-linstor-and-drbd-linux-driver/
この記事の執筆時点での最新バージョンは 1.1.10 です。
G: ドライブがバックアップデバイスである場合、この設定は正しいです。
問題が解決しない場合はお知らせください。