Smart Communication Design Company
ホーム > ナレッジ > Blog > CMS Blog > 2010年7月 > DRBDとHeartbeat [4] Heartbeatの設定

DRBDとHeartbeat [4] Heartbeatの設定

2010年7月23日
システムエンジニア 野沢

前回でDRBDの基本的な設定を説明させて頂きました。
今回はheartbeatの設定を見ていきます。

heartbeatの設定ファイル

まずはheartbeatで利用する設定ファイルのおさらいです。
heartbeatの設定ファイルは1つではなく、3つのファイルで設定を行います。

ファイルパス用途
/etc/ha.d/ha.cfheartbeatの基本設定ファイル
/etc/ha.d/authkeysノード間の認証用
/etc/ha.d/haresources(※)フェイルオーバ/フェイルダウン時のhearbeatの動作指定

※v1モードのみ

ha.cf

heartbeatの基本的な動作をこのファイルで指定します。最低限の設定として以前の解説では以下の設定を行いました。

crm             off
use_logd       yes
keepalive      1
warntime      10
deadtime      30
initdead        60
udpport        694
auto_failback off
ucast           eth0 192.168.0.20(※standbyサーバは192.168.0.10)
node            active.demo.com
node            standby.demo.com

各項目の意味を解説していきます。
なお、設定内容に秒数を指定するものがありますが、単位は下記表の単位が利用可能です。

msミリ秒
usマイクロ秒
無指定

■crm

heartbeatの設定方法を指定します。「on」ならv2モードになります。「off」ならv1モードとなります。

■use_logd

ログデーモンの利用の可否を設定します。ログデーモンの設定ファイルは「/etc/logd.cf」に記述します。
heartbeatはデフォルトでは「/var/log/mesages」にログが出力されますので、最低限下記の設定を「logd.cf」に記述することを推奨します。

logfile /var/log/ha/ha-log

■keepalive

サーバ間のパケット送受信の時間の間隔を設定します。例では1秒です。

■warntime

相手のサーバからのパケットを受信できなくなってから警告をログに吐き出すまでの時間を設定します。例では10秒です。

■deadtime

相手のサーバが死んだと判断する時間の間隔を設定します。例では30秒です。
この値を小さくするとサーバの障害発生時に短時間でフェイルオーバされますので、素早い復旧が可能となります。ただ、小さすぎると誤認知によって意図しないフェイルオーバを実行してしまう可能性があります。(例えばバッチ処理により一時的にサーバ負荷が高くなってしまいパケットの受信が遅延してしまうなど)

■initdead

heartbeatの初期起動時に、相手のサーバが起動するまでの時間を設定します。例では60秒です。
初期起動は時間がかかりますので、長めにとることを推奨します。

■udpport

UDPのポート番号を指定します。例では694番を利用します。
もし他のアプリケーションで694を利用していた場合、この設定でポート番号を変更をすることが可能です。

■auto_failback

フェイルバックの挙動を設定します。「on」なら自動でフェイルバックを行い、「off」ならばフェイルバックを行いません。

■ucast

ネットワークインターフェイスの監視方式を指定します。例ではucast(ユニキャスト)を設定しています。書式は以下の通りです。

ucast [dev] [peer-ip-addr]

監視方式としてはucastの他にbcast(ブロードキャスト)、mcast(マルチキャスト)があります。

■node

アクティブ機とスタンバイ機のhost名を設定します。「unam-n」の結果と同じ名前にしなければなりません。

authkeys

以前の解説時の設定は以下の通りです。

auth 1
1 crc

サーバ間の認証方式を設定します。これはサーバのなりすましを防止するためです。
heartbeatには「crc方式」「sha1方式」「md5方式」があります。ローカルネットワーク上など、セキュリティに心配がない環境でしたらcrc方式を使い、セキュリティを考慮する環境でしたらsha1方式やmd5方式を使えば良いと思います。
activeサーバ、standbyサーバで同じ設定を行う必要があります。
例ではcrc方式で設定しています。

Haresources

以前の解説時の設定は以下の通りです。

active.demo.comIPaddr::192.168.0.30drbddisk::r0Filesystem::/dev/drbd0::/data::ext3

監視対象リソースを定義します。DRBDのフェイルオーバやVIPの切り替えはここで設定します。左の項目から説明していきます。

■active.demo.com

activeサーバにしたホスト名を指定します。heartbeatの初回起動時にはこのホスト名がactiveサーバとなります。

■IPaddr::192.168.0.30

仮想IPを指定します。

■drbddisk::r0

DRBDをprimaryに昇格、もしくはsecondaryへ降格します。DRBDで設定したリソース名を指定して下さい。

■Filesystem::/dev/drbd0::/data::ext3

ファイルシステムのマウントを行います。例では/data領域のマウントを行います。

その他のサービスと連携を取る場合

例ではDRBDの起動だけを設定していますが、その他のサービスとも連携が取れます。以下、対象にapacheとmysqlを追加した例です。

active.demo.com IPaddr::192.168.0.30 drbddisk::r 0Filesystem::/dev/drbd0::/data::ext3 apache::/etc/httpd/conf/httpd.conf mysql

ここで注意してほしいのは、ここで設定されたサービスはheartbeatが管理するため、OSの自動起動サービスに登録してはいけないということです。
linuxではchkconfigなどで予めOSの自動起動の管理外にしておいて下さい。

サービスの死活監視

heartbeatと他サービスと連携を行う場合、v1設定ではサービスの死活監視について考慮する必要があります。
というのもheartbeatはheartbeat間の死活監視は行いますが、サービスの監視は行っていません。例えば、heartbeatとapacheを連携していたとして、もしapacheのみに障害が発生して停止した場合、heartbeatはapacheの停止を感知せずフェイルオーバはされません。
サーバ自身が停止した場合ならフェイルオーバはされますが、それだけではHA構成としては不十分です。
サービス監視の方法としては、各種サービス監視ツールとの連携も考えられますが、弊社では独自にスクリプトを作成してサービス監視を実現させています。

以上でheartbeatの起動に必要となる設定が終了します。実運用ではDRBDとの連携を加味し、設定の追加を行う必要があります。

■関連記事