DRBDとは何ですか?
DRBD(Distributed Replicated Block Device)は、Linuxベースのシステム用のソフトウェアパッケージです。これは、ネットワークを介してストレージデバイスをあるノードから別のノードに複製するために使用されます。
ディザスタリカバリとフェイルオーバーに対処するための支援を提供できます。 DRBDは、ハードウェアの高可用性と見なすことができ、ネットワーク共有ストレージの代替と見なすことができます。
DRBDはどのように機能しますか?

2つのCentOSシステムでストレージパーティションをクラスター化する場合、両方のシステムにブロックデバイス(/ dev / sdb1など)が必要です。これらのシステムは、プライマリノードとセカンダリノードとして定義されます(プライマリノードとセカンダリノードを切り替えることができます)。
DRBDは、仮想ブロックデバイス(drbd0など)を使用して、両方のシステムの/ dev/sdb1ブロックデバイスを共有します。プライマリノードは、仮想ドライブdrbd0が読み取り/書き込み目的でマウントされているノードです。
まず、仮想ディスクdrbd0の作成に使用されるDRBDパッケージをインストールする必要があります。 / dev / drbd0デバイスを使用するために、xfsまたはext3ファイルシステムとしてフォーマットできます。 drbd0デバイスは、両方のシステムで/ dev/sdb1ブロックデバイスを使用するように構成されています。現在、drbd0デバイスでのみ動作します。
drbd0はプライマリノードにのみマウントできるため、コンテンツには一度にプライマリノードからのみアクセスできます。とにかく、プライマリシステムがクラッシュした場合、システムファイルが失われる可能性がありますが、仮想デバイスdrbd0は使用可能になります。最初のセカンダリノードをプライマリとして切り替えて、そのコンテンツに再度アクセスできます。
CentOSでのDRBDの使用
このチュートリアルはCentOS7で実行されましたが、他のCentOSバージョンでも機能するはずです。 CentOSのバージョンを確認する方法については、こちらをお読みください。
- 2つのCentOSがインストールされたシステム
- 両方のシステムの/dev/ sdb1のような無料のブロックデバイス(同じサイズが望ましい)
- Selinux許容または無効
- ファイアウォールで許可されているポート7788
- ノードは同じネットワーク内にある必要があります。
ここでは、CentOSディストリビューションではdrbdパッケージを利用できないため、epelリポジトリを追加してインストールを実行します。
$ rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
また、両方のノードにGPGキーを追加します。 GPGキーは、ノード間の通信を暗号化するために使用される公開キーです。
$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
これで、yumを使用してdrbdパッケージをインストールできます。カーネルでサポートされているdrbdバージョンを特定する必要があります。カーネルで使用可能なdrbdバージョンを確認してください:
$ yum info *drbd* | grep Name
出力は次のようになります:

次に、必要なバージョンのdrbdと必要なカーネルモジュールをインストールします。
$ yum -y install drbd84-utils kmod-drbd84
カーネルモジュールがロードされているかどうかを確認します。
$ lsmod | grep -i drbd
上記のコマンドの応答で空の出力が得られた場合、カーネルモジュールはロードされません。システムを再起動して、次のことを試す必要があります:
$ modprobe drbd
modprobeは、Linuxカーネルにモジュールをインテリジェントに追加または削除するコマンドです。起動のたびにモジュールをロードするには、 systemd-modules-load サービスが使用されます。そのため、/ etc/modulesload.d内にdrbd.confというファイルを作成します。
$ echo drbd > /etc/modules-load.d/drbd.conf
DRBDの構成
DRBD構成ファイルは/etc/drbd.d/にあります
デフォルトでは、/ etc / drbd.d / global_common.confはグローバルで利用可能であり、グローバル構成またはメイン構成が含まれています。その他の構成ファイルは、拡張子が*.resのリソースファイルと呼ばれます。
次に、指定したブロックデバイスにdrbdを使用するために、両方のノードにリソース構成ファイルを作成します。
linuxhandbook.resという名前のリソースファイルを作成しましょう
$ vi /etc/drbd.d/linuxhandbook.res
以下のコンテンツをコピーしてリソースファイルに貼り付けます
resource linuxhandbook {
protocol C;
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.20.222.14:7788;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.20.222.15:7788;
meta-disk internal;
}
}
ここで
- linuxhandbookはリソース名です。リソース名は常に一意である必要があります。
- プロトコルCは同期通信に使用されます。これは完全に同期したレプリケーションプロトコルです。利用可能な他のプロトコルは、プロトコルAとプロトコルBです。
- プロトコルA :非同期レプリケーションプロトコル。一般に、長距離ネットワークのノードに適しています。
- プロトコルB :準同期レプリケーションプロトコル。メモリ同期プロトコルとも呼ばれます。
- プロトコルC :短距離ネットワークのノードに適しています。
- node 1とnode2は、個々のノードのホスト名です。ブロックを識別するためにのみ使用してください。
- device / dev / drbd0は、デバイスとして使用するために作成された論理デバイスです。
- disk / dev / sdb1は、drbd0が占有する物理ブロックデバイスです。
- アドレス10.20.222.14:7788とアドレス10.20.222.15:7788は、tcpポート7788が開いている2つのそれぞれのノードのIPアドレスです。
- メタ内部ディスクは、ディスクの内部メタデータを使用するように定義するために使用されます。
構成は両方のノードで同じである必要があります。
次に、各ノードのメタデータストレージを初期化する必要があります。
$ drbdadm create-md linuxhandbook
これでエラーメッセージが表示される場合は、ダミーのデータファイルを手動で作成し、後で上記のコマンドを試してください。
$ dd if=/dev/zero of=/dev/sdb1 bs=1024k count=1024
ddコマンドは、指定されたメモリのランダムファイルを作成するために使用されます。 create-mdコマンドは、その後成功する必要があります。
論理デバイスが使用可能になったら、drbd0デバイスを両方のノードのsdb1ディスクに接続します。 lsblkの出力を参照してください
$ lsblk
出力は次のようになります

そうでない場合は、リソースファイルを介してdrbd0デバイスをsdb1ディスクに接続します。
$ drbdadm attach linuxhandbook
or
$ drbdadm up linuxhandbook
Once again try,
$ lsblk
両方のノードでdrbdサービスを開始して有効にします。
$ systemctl start drbd
$ systemctl enable drbd
drbdの開始が、あるノードでは速く、別のノードでは時間がかかる場合があります。
DRDBは、読み取りと書き込みを実行できるプライマリノードとして一度に1つのノードのみを使用します。
まず、ノード1をプライマリノードとして指定します。
$ drbdadm primary linuxhandbook --force
drbdプロセスのステータスを確認します:
$ cat /proc/drbd
or
$ drbd-overview
出力は次のようになります:

ここで取得できる情報は次のとおりです:
- 現在、どのノードがプライマリで、どのノードがセカンダリです。
- データ同期プロセス。
- drbdデバイスのステータス:一貫性がない、最新、ディスクレス。
別のノードであるnode2は、自動的にセカンダリノードとして設定されます。 drbdの概要プロセスのステータスを参照してください。
まだ実行していない主な手順は、drbd0デバイスをフォーマットすることです。これは、ノードの1つでのみ実行できます。
ここでは、mkfsコマンドを使用してdrbd0をext3としてフォーマットします。 xfsファイルシステムも機能します。 / dev/sdb1と同じディスクタイプを使用することをお勧めします。
$ mkfs -t ext3 /dev/drbd0
ここでも、プライマリノード(たとえば、このチュートリアルではnode1)で、drbd0デバイスをマウントして作業できるようにする必要があります。
$ mount /dev/drbd0 /mnt
you can select your required mount point instead of /mnt. for example, I can mount the /dev/drbd0 device to /var/lib/mysql to use it for mysql database drbd.
注 :常にプロセスを覚えておいてください。まず、ノードをDRBDのプライマリとして作成する必要があります。次に、drbd0デバイスをシステムにマウントすると、デバイスでアクションを実行できるようになります。ノードをプライマリにしないと、drb0デバイスをマウントできず、そのデバイスのコンテンツを使用できません。
drbdが両方のノードでセットアップされ、1つのノードがプライマリにされた後。デバイスを/mntの場所にマウントしました。次に、drbdノードの同期をテストするファイルを作成します。
$ touch /mnt/drbdtest.txt
$ ll /mnt/
この後、node1をセカンダリとして、node2をプライマリとして設定します。プロセスは同様にミラーリングされます。ノード1(インスタンスプライマリノード)で、/ dev / drbd0デバイスをアンマウントし、セカンダリにします。 node2(インスタンスのセカンダリノード)で、それをプライマリノードにして、必要な場所にマウントします。
ノード1:
$ umount /mnt
$ drbdadm secondary linuxhandbook
ノード2:
$ drbdadm primary linuxhandbook
$ mount /dev/drbd0 /mnt
node2でのマウントが成功したら、/mntフォルダーにあるファイルを確認します。 drbdtest.txtファイル(node1で作成)を確認する必要があります。
$ ll /mnt/
drbdクラスターノードを管理および視覚化するためのGUIインターフェイスが必要な場合は、LCMC(Linuxクラスター管理コンソール)を使用できます。
それでおしまい!これで、システムにDRBDが正常に実装されました。質問が残っている場合は、コメントセクションでコメントアウトできます。
作成者 :Rishi Raj Gautamは、Linux愛好家であり、オープンソースの活動家です。