NFSサーバー · 2 min read · Jan 30, 2026

DRBDとHeartbeatを使用したDebian 5.0 (Lenny)の高可用性NFSサーバー

DRBDとHeartbeatを使用したDebian 5.0 (Lenny)の高可用性NFSサーバー

このHowToでは、Debian 5 (Lenny)とdrbd8を使用して高可用性NFSサーバーを設定する方法を説明します。

私は数日前にこのセットアップを行いました。楽しみのために。だから、これを文書化するのは良いアイデアだと思いました。

著者 - ヴィシャール・シャルマ
作成日 - 2010年3月9日
バージョン - 1.0

免責事項 - このHowToは現状のままで提供されており、いかなる種類の保証もありません。自己責任で使用してください。これらの手順は私にはうまくいきました。おそらく、あなたにも効果があるでしょう。問題が発生した場合は、下にコメントを残してください。できるだけ早く対処します。

以下は、実行する必要があることの概要です:

ステップ1. システムの準備を行います。これには、基本的なハードウェアとソフトウェアの設定が含まれます。(これはこのHowToの一部としてはカバーされていません。)

ステップ2. 必要なIPアドレスを設定します。

ステップ3. 必要なパッケージをインストールします。

ステップ4. 関連する設定ファイルを編集します。

ステップ5. システムを起動します。

ステップ6. 実際に動作することを確認するためにテストします。

ステップ1. システムの準備を行う

私はこれに3つのDebianシステムを使用しています。すべて標準のデフォルトインストールです。ただし、システムをテキストモードでブートするように変更しました。私のマシンにはそれほど優れたハードウェアがないので、コマンドラインで遊ぶ方が好ましいです。

各システムにはオンボードネットワークがあります。通常、プロダクションシステムではそうではないかもしれません。しかし、私のはただの遊び用インストールなので、パフォーマンスを向上させるためのものを追加することは気にしませんでした。

ボックスを専用にしたくない場合は、Sun VirtualBoxを使用してセットアップできます。これにより、重要な設定変更を行う前にシステムスナップショットを取得する利点があります。

私のテストセットアップは、2つのサーバーと1つのクライアントに基づいています。このシナリオでは、このクライアントシステムはNFSサーバーから共有をマウントする通常のNFSクライアントです。私のセットアップはアクティブ/パッシブであり、アクティブ/アクティブではありません。したがって、いつでもアクティブシステムが故障すると、パッシブシステムが引き継ぎます。

server01とserver02には、次の2つのパーティションがあります。

/dev/hdb1 - 500GB - これは/dataとしてNFSマウントされます。

/dev/hdc1 - 500MB - これはdrbdメタデータを保存します。最小128MBが必要です。

これらのパーティションをマウントしないようにしてください。これはdrbdによって処理されます。パーティションを作成してそのままにしておいてください。今のところフォーマットやマウントは不要です。

ステップ2. 必要なIPアドレスを設定する

私のシステムの名前は次のようになっています:

server01 - 192.168.1.2/24 (eth0)

server02 - 192.168.1.3/24 (eth0)

client01 - 192.168.1.4/24 (eth0)

上記のエントリが/etc/hostsファイルにあることを確認してください。そうすれば、名前解決に問題はありません。これはおそらく最良のオプションであり、これのためにDNSサーバーを設定する手間を避けたいでしょう。

192.168.1.5/24は私の仮想浮動IPアドレスです。これは外部の世界に見えるアドレスであり、システムの状態が変わるとともにシステム間を浮遊します。

私のデフォルトゲートウェイは192.168.1.1/24で、これは私のルーターです。パッケージのインストールにはインターネットアクセスが必要です。

ステップ3. 必要なパッケージをインストールする

HAクラスタがうまく機能するために最も重要なことは - 時間です。システムの時間は同じである必要があります。それを確保するために、ntpパッケージが必要です。

server01# apt-get install ntp ntpdate

server01とserver02で上記を実行します。

サーバー、つまりserver01とserver02では、稼働を開始するために次のパッケージをインストールする必要があります。

drbd8、カーネルヘッダーファイル、nfs-serverインストール、およびheartbeat。私が行ったことは次のとおりです。

server01# apt-get update
server01# apt-get install linux-headers-`uname -r` drbd8-utils drbd8-source heartbeat nfs-kernel-server

(上記は完了するまでにしばらく時間がかかるはずです。)

インストールが完了したら、次のコマンドを使用してカーネルdrbdモジュールを作成します:

server01# m-a a-i drbd8-source

これにより、コンパイルが行われ、drbdカーネルモジュールが作成されます。

server01# modprobe drbd
server01# lsmod | grep drbd

(これに何かが表示されるはずです。何も表示されない場合は、どこかに修正が必要な問題があります。)

nfsがブート時に開始しないように無効にします。これは、nfsの起動とシャットダウンがdrbdによって処理されるため、システムが干渉しないようにするためです。

server01# update-rc.d -f nfs-kernel-server remove
server01# update-rc.d -f nfs-common remove

server02でも同じ手順を実行します。

ステップ4. 関連する設定ファイルを作成/編集する

これらはserver01とserver02で編集する必要があるファイルです。

NFSエクスポートを処理するために - /etc/exports - (server01とserver02で):

/data/export 192.168.1.0/255.255.255.0(rw)

drbd設定のために - /etc/drbd.conf (server01とserver02で):

global {
usage-count yes;
}
common {
  syncer { rate 10M; }
}

resource r0 {
  protocol C;
  handlers {
    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  }

  startup {
    degr-wfc-timeout 120;    # 2 minutes.
  }

  disk {
    on-io-error   detach;
  }

  net {
  }

  syncer {
    rate 10M;
    al-extents 257;
  }

on server01 {
    device /dev/drbd0;
    disk /dev/hdb1;
    address 192.168.1.2:7788;
    meta-disk /dev/hdc1[0];
  }

on server02 {
    device /dev/drbd0;
    disk /dev/hdb1;
    address 192.168.1.3:7788;
    meta-disk /dev/hdc1[0];
  }
}

heartbeatのために - /etc/ha.d/ha.cf - (server01とserver02で):

logfacility local0
keepalive 1
deadtime 10
bcast eth1
auto_failback on
node server01 server02

heartbeat認証を設定するために - /etc/heartbeat/authkeys - (server01とserver02で):

auth 3
3 md5 your_password

md5の代わりにsha1を使用することもできます。このファイルをrootのみに読み書き可能にすることを忘れないでください。

chmod 600 /etc/heartbeat/authkeys 

(server01とserver02で。)

haリソースを利用可能にするために - /etc/ha.d/haresources - (server01とserver02で):

server01 IPaddr::192.168.1.100
server01 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 nfs-kernel-server

(注意:server02のharesourcesファイルでは、同じホスト名、つまりserver01を使用していることに気付いたかもしれません。これは、server01がオンラインのときにserver02が制御を戻すことを確認するためです。これをプライマリとして維持したい場合は、上記のホスト名をserver02に変更してください。)

上記のすべてを行った後、次のコマンドを実行してdrbdメタディスクを初期化します(server01とserver02で):

server01# drbdadm create-md r0 

(r0はリソース名です。)

server01# drbdadm up all

server01とserver02で

cat /proc/drbd 

を実行すると、server01とserver02がセカンダリモードで不整合であることがわかります。これは明らかです。なぜなら、まだnfsシステムを設定しておらず、どのシステムがプライマリサーバーになるかを定義していないからです。私の場合、プライマリはserver01です。したがって、server01で次のコマンドを実行します:

server01# drbdsetup /dev/drbd0 primary -o
server01# mkfs.ext3 /dev/drbd0
server01# mkdir /data
server01# mount -t ext3 /dev/drbd0 /data

デフォルトでは、nfsサーバーはそのマウント状態とロックを/var/lib/nfsに保存し、フェイルオーバーが発生した場合でもこれを保持したいと考えています。したがって、server01で次の操作を行います:

server01# mv /var/lib/nfs/ /data/
server01# ln -s /data/nfs/ /var/lib/nfs
server01# mkdir /data/export
server01# umount /data
server01# cat /proc/drbd  

<— 注意深く見て、server01が現在プライマリシステムであることに気付くでしょう。

server02で次のコマンドを実行して、障害が発生した場合に備えて準備します。

mkdir /data
rm -fr /var/lib/nfs
ln -s /data/nfs /var/lib/nfs

うーん…それがほとんどすべてです。設定の観点からは完了です。さあ、システムを起動しましょう。

ステップ5. システムを起動する

server01とserver02で必要なサービスを起動します:

/etc/init.d/drbd start
/etc/init.d/heartbeat start

上記が正常に完了すると、server01には追加のIP - 192.168.1.100があり、/dataがマウントされていることに気付くでしょう。/proc/drbdファイルでリアルタイムのステータスを確認することもできます。

server02では192.168.1.100と/dataは表示されないはずです。

tail -f /var/log/messages

を実行して、楽しんでください。

ステップ6. 実際に動作することを確認するためにテストする

テストする最良の方法は、実際にハードな方法で行うことです。server01の電源を切って、server02がどのように引き継ぐかを見てください。server02の引き継ぎログを見てください。:)

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。