テクノロジーガイド

DRBD を CentOS 6 系でインストールして設定する方法

3 min read システム管理 更新されました 19 Oct 2025
CentOS 6 での DRBD インストールと設定ガイド
CentOS 6 での DRBD インストールと設定ガイド

概要(1行定義)

DRBD: ネットワーク経由でブロックデバイスをレプリケーションするソフトウェア(共有ディスク不要のミラーリング)。

重要: 本手順は CentOS/Red Hat/Oracle Linux 6 系向けです。DRBD のバージョンやカーネルに依存するため、別バージョンでは一部コマンドやパッケージ名が異なる場合があります。

目的と前提

  • 目的: サーバ A(OEL641)上で作成したファイルをサーバ B(OEL642)へ DRBD でミラーする。最終的に片方を Primary、もう片方を Secondary に切り替えてマウントして動作確認する。
  • 前提: 各サーバに空きのブロックデバイス(例: /dev/sdb)があること。root 権限で操作できること。両ノード間で TCP 接続(ポート 7799 を使用)が可能であること。

目次

  • 1 事前メモ
  • 2 インストール手順
  • 3 検証(モジュールの読み込み、ホスト名確認)
  • 4 パーティション作成
  • 5 DRBD 設定ファイル作成と初期化
  • 6 テスト(フォーマット・同期・切替)
  • トラブルシュートと注意点
  • 代替アプローチと運用ヒント
  • ロール別チェックリスト、簡易ランブック
  • 用語集(1行)
  • 要約

1 事前メモ

  • 本チュートリアルの実行環境は CentOS 6.4(32ビット)を例にしていますが、基本概念は同系 OS 全般に適用できます。
  • DRBD の公式サイト: http://www.linbit.com/ (参照用)
  • ネットワークアドレス例: OEL641 = 192.168.43.101、OEL642 = 192.168.43.102
  • 使用ブロックデバイス: /dev/sdb → /dev/sdb1 を DRBD 用に使用

2 インストールフェーズ

まずはシステムを更新し、ビルドに必要な依存パッケージを両方のサーバでインストールします。ここでは yum を使用しています。

yum -y update   
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel

出力例(パッケージが既に最新の場合):

Setting up Install Process  
Package gcc-4.4.7-3.el6.i686 already installed and latest version  
Package 1:make-3.81-20.el6.i686 already installed and latest version  
Package automake-1.11.1-4.el6.noarch already installed and latest version  
Package autoconf-2.63-5.1.el6.noarch already installed and latest version  
Package libxslt-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package libxslt-devel-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package flex-2.5.35-8.el6.i686 already installed and latest version  
Package rpm-build-4.8.0-32.el6.i686 already installed and latest version  
Package kernel-devel-2.6.32-358.el6.i686 already installed and latest version

このステップは両ノードで実行します。

次に DRBD をソースからビルドします。ビルド用の RPM ディレクトリを作成します。

mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

DRBD のソースパッケージをダウンロードします(例: drbd-8.4.7 と drbd-utils)。

wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz

展開してビルドします(例示はバージョン番号に依存します)。

tar -zxvf drbd-8.4.7-1.tar.gz  
tar -zxvf drbd-utils-latest.tar.gz

cd drbd-8.4.7-1   
# カーネルモジュールの RPM を作成
make km-rpm

出力により /root/rpmbuild/RPMS/i686 以下に drbd-km 系の RPM が生成されます。

続いて drbd-utils 側をビルドします。

cd ..  
cd drbd-utils-8.9.6   
./configure   
make rpm

ビルド完了後、生成された RPM をまとめてインストールします。

cd /root/rpmbuild/RPMS/i686  
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*

出力例:

Preparing... ########################################### [100%]  
1:drbd-utils ########################################### [ 13%]  
2:drbd-xen ########################################### [ 25%]  
3:drbd-udev ########################################### [ 38%]  
4:drbd-pacemaker ########################################### [ 50%]  
5:drbd-bash-completion ########################################### [ 63%]  
6:drbd ########################################### [ 75%]  
7:drbd-km-2.6.32_358.el6.########################################### [ 88%]  
8:drbd-km-debuginfo ########################################### [100%]

この一連の手順を両方のサーバで行ってください。まずは OEL641 にて実施し、その後 OEL642 に対して同様に準備します。

3 検証フェーズ

まずはホスト名を確認します。DRBD の設定ファイルではホスト名が使われます。

uname -n

期待値(例):

OEL641

DRBD カーネルモジュールを読み込み、lsmod で確認します。

modprobe drbd  
lsmod | grep drbd

出力例:

drbd 341783 0  
libcrc32c 841 1 drbd

4 パーティション作成

ここでは /dev/sdb をパーティション化して /dev/sdb1 を作ります(両ノードで同様の構成である必要があります)。

fdisk -l

fdisk を使って /dev/sdb にパーティションを作成します。

fdisk /dev/sdb
# 対話で: n -> p -> 1 -> デフォルト開始 -> デフォルト終了 -> w

出力例:

Device Boot Start End Blocks Id System  
/dev/sdb1 1 130 1044193+ 83 Linux

パーティションテーブルをリロードし、/dev/sdb1 が存在することを確認します。

これを OEL642 側でも繰り返してください。

5 DRBD 設定

DRBD のリソース定義ファイルを /etc/drbd.d/ に作成します。両ノードで同一の s1.res を持つようにします。

cd /etc/drbd.d/  
vi s1.res

s1.res の中身(例):

resource s1 {  
  on OEL641 {  
    device /dev/drbd1;  
    disk /dev/sdb1;  
    address 192.168.43.101:7799;  
    meta-disk internal;  
  }  
  on OEL642 {  
    device /dev/drbd1;  
    disk /dev/sdb1;  
    address 192.168.43.102:7799;  
    meta-disk internal;  
  }  
}

作成した s1.res を第二ノードへ転送します:

scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res

次にメタデータを作成します(両ノードで実行)。

drbdadm create-md s1

出力例:

initializing activity log  
NOT initializing bitmap  
Writing meta data...  
New drbd meta data block successfully created.  
success

どちらのノードでも上記が正常に出れば OK です。

6 DRBD 起動と初期同期

まず一方(OEL641)で DRBD を起動してみます。起動スクリプトはリモートノードの応答を待つ設定になっていることがあります。

/etc/init.d/drbd status
/etc/init.d/drbd start

出力には「待機(wait for connection)」やリソース作成メッセージが表示されます。もし待機状態で止まる場合は、もう一方のノード(OEL642)でも同様に /etc/init.d/drbd start を実行してください。両方起動すると接続が確立します。

DRBD の状態確認:

/etc/init.d/drbd status

接続状態の例:

1:s1 Connected Secondary/Secondary Inconsistent/Inconsistent C

次に初期プライマリを OEL641 にして同期を開始します(すべてのデータを OEL641 のものに上書きする意図)。

drbdadm -- --overwrite-data-of-peer primary s1
/etc/init.d/drbd status

状態表示例(同期中):

... sync'ed: 0.8% (1037872/1044124)K  
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C

OEL642 側を確認すると SyncTarget(受信側)になっているはずです。

7 テストフェーズ(フォーマット、マウント、データ同期確認)

以降の手順はまず OEL641(Primary)で実施します。

  1. DRBD デバイスをファイルシステムでフォーマット
mkfs.ext3 /dev/drbd1
  1. マウントポイントを作成してマウント
mkdir /folderA  
mount /dev/drbd1 /folderA  
df -h
  1. フォルダ内に 30MB のテストファイルを作成
cd /folderA/  
dd if=/dev/zero of=/folderA/testfile bs=1M count=30
ls -lh
  1. /folderA を umount して OEL641 を Secondary に切替
umount /folderA  
drbdadm secondary s1
/etc/init.d/drbd status
  1. OEL642 を Primary にしてマウント
# OEL642 で実行
mkdir /folderB  
drbdadm primary s1
mount /dev/drbd1 /folderB  
df -h
ls -lh /folderB/

期待結果: /folderB に OEL641 で作成した testfile が存在すること。

成功すれば、DRBD によるブロックレベルの複製が動作していることを確認できます。


トラブルシュート(よくある問題と確認手順)

重要: 操作は必ず双方向で行ったこと、またバックアップがない場合は –overwrite-data-of-peer を軽率に使わないでください。

  • 接続が確立しない(Connected にならない)
    • ネットワーク疎通を確認: ping、telnet 192.168.43.102 7799(ポート到達性)
    • ファイアウォール: iptables や firewalld がポート 7799 を遮断していないか
    • s1.res のホスト名と uname -n の一致を確認
  • drbdadm create-md が失敗する
    • 指定した disk (/dev/sdb1) が存在するか、パーティションが正しいか
    • 既存のメタデータやパーティションスキームが残っていないか(必要なら wipe)
  • 起動時に “wait for connection” で永遠に待つ
    • 片方が既に degraded(切断)状態ではないか。双方で /etc/init.d/drbd status を確認
    • タイムアウト設定(degr-wfc-timeout, wfc-timeout)を確認・調整
  • 同期が非常に遅い
    • ネットワーク帯域、MTU、NIC エラーを確認
    • disk IO がボトルネックか確認(iostat, vmstat)

失敗時の安全な切り戻し手順(簡易)

  • 片側を誤って primary にした場合: 直ちにマウント解除して secondary に戻す
  • 両ノードで状態が不整合な場合: 片方を –overwrite-data-of-peer オプションで primary にして同期を強制する(データ上書きの危険あり)。運用ガイドラインに基づき実行すること。

代替アプローチと拡張

  • 最新のディストリビューションやカーネルを使う場合: DRBD の配布バージョンが異なるため、公式パッケージ(epel/linbit リポジトリ)やカーネルモジュールの互換性を優先してください。
  • 高可用性クラスタとして使う場合: Pacemaker と組み合わせてフェイルオーバーを自動化する。drbd-pacemaker パッケージを利用する。
  • ブロックデバイスではなくファイル単位でのレプリケーションが目的であれば、rsync や GlusterFS、Ceph など別ソリューションを検討してください。

運用のためのメンタルモデル(ヒューリスティック)

  • DRBD は「ブロックレベルのリアルタイムミラーリング」。アプリケーションレベルの整合性は上位層(ファイルシステム、DB のレプリケーション)で担保する。
  • Primary は I/O を受け付けて変更を発生させるノード。Secondary はあくまで複製受け取り側。
  • ネットワーク切断時は双方が secondary になり得る(split-brain に注意)。

ロール別チェックリスト

管理者(インストール前)

  • OS バージョン、カーネルバージョンを記録
  • 空きブロックデバイスの確保
  • ネットワーク設計(固定 IP、ルーティング、ファイアウォール)確定

運用担当(導入時)

  • s1.res を両ノードに配置し整合性を確認
  • drbdadm create-md を両ノードで実行
  • 起動・同期のログを監視(/var/log/messages 等)

運用担当(フェイルオーバー/スイッチ)

  • 切り替え前は必ず umount してから drbdadm primary/secondary を実行
  • 自動化する場合は Pacemaker 等でフェイルオーバー手順を検証

簡易インシデントランブック(手順)

  1. 発見: DRBD 接続が切れた / I/O エラーを検知
  2. 確認: /etc/init.d/drbd status、dmesg、ネットワーク疎通
  3. 修復: ネットワーク修復、必要なら両ノードで再度 create-md(最終手段)
  4. 同期: 状態が戻ったら同期を確認してサービスを復旧

意思決定フローチャート(簡易)

flowchart TD
  A[DRBD 状態異常を検知] --> B{ネットワーク到達可能か}
  B -- yes --> C{drbd status が Connected か}
  B -- no --> D[ネットワーク設定とファイアウォールを修正]
  C -- yes --> E[ログを確認し I/O エラーを解析]
  C -- no --> F[両ノードで /etc/init.d/drbd start を試す]
  F --> G{still not Connected}
  G -- yes --> H[詳細ログでエラー原因を特定]
  G -- no --> I[同期を監視して運用復旧]

1行用語集

  • DRBD: ネットワーク越しにブロックデバイスを複製するソフトウェア。
  • Primary/Secondary: ブロックデバイスへの書き込みを許可する側が Primary。
  • drbdadm: DRBD の管理コマンド。
  • s1.res: リソース定義ファイルの例名称。

注意点とベストプラクティス

  • 実運用では DRBD のバージョンとカーネルの互換性を事前に検証してください。
  • split-brain を避けるために quorum や fencing(フェンシング)戦略を検討すること。
  • 重要データは常にバックアップを残すこと。DRBD はミラーリングを提供するが代替のバックアップにはならない。

要約

  • 本ガイドは CentOS/Red Hat/Oracle Linux 6 系で DRBD をソースからビルドし、2ノード間でブロックデバイスを複製する手順を示しました。
  • 主な流れ: 依存パッケージのインストール → DRBD のビルドと RPM インストール → パーティション作成 → s1.res の作成 → drbdadm create-md → 起動と同期 → フォーマット、マウント、データ同期の検証。
  • トラブルシュート、代替案、運用チェックリスト、簡易ランブック、意思決定フローを付録として提供しました。

重要: 本手順を本番環境で適用する前に、テスト環境で十分な検証を行ってください。運用ポリシーに従い、バックアップとフェイルオーバー計画を策定してください。


追加参照(公式)

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Netflixでカスタムプロフィール画像を設定する方法
How-to

Netflixでカスタムプロフィール画像を設定する方法

IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合
ネットワーク

IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合

CentOS 7 に OTRS 5 をインストールする
サーバー

CentOS 7 に OTRS 5 をインストールする

Netflixをダウンロードする方法(Windows・Android・iOS)
ストリーミング

Netflixをダウンロードする方法(Windows・Android・iOS)

Amazon Primeの「続けて観る」を削除する方法
ガイド

Amazon Primeの「続けて観る」を削除する方法

Wi‑Fi電波を強化する完全ガイド
ネットワーク

Wi‑Fi電波を強化する完全ガイド