DRBDとHeartbeat [4] Heartbeatの設定
前回でDRBDの基本的な設定を説明させて頂きました。
今回はheartbeatの設定を見ていきます。
heartbeatの設定ファイル
まずはheartbeatで利用する設定ファイルのおさらいです。 heartbeatの設定ファイルは1つではなく、3つのファイルで設定を行います。
ファイルパス | 用途 |
---|---|
/etc/ha.d/ha.cf | heartbeatの基本設定ファイル |
/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]
- [dev]はheartbeatを送受信するデバイスになります。
- [peer-ip-addr]はパケットの送り先IPアドレスを指定します。
監視方式としては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との連携を加味し、設定の追加を行う必要があります。
■関連記事