みなさんおはようございます。こんにちは。こんばんは。前回からまさに半年かかってますが遅ればせながら第2回です。前回はHAクラスタを組む上で必要な知識として、HA環境について考えてみましたが、今回はこれから初めてLinux-HA環境の構築に挑戦しようとしている読者の方に向けて、具体的に最も基本的なHA環境の構築方法を紹介したいと思います。
基本的なHA環境
Linux-HAを学習する上で基本となる構成は、サービスを提供する「アクティブサーバ」と、いざという時のために予備機として待機している「スタンバイサーバ」の2台で構成される「アクティブ/スタンバイ」型のHA環境です。基本的なサーバといっても考えることはたくさんあるので、ちょっとここに列挙してみます。
ハードウェア障害を何処まで想定するか
制御するソフトウェアは何が必要か(適用範囲)
監視するソフトウェアの監視項目
データの共有はどうするか
障害発生から、サービス切り替えまでの所要時間(希望時間)
予期せぬ障害により系が切り替わらなかったときの対処
最低でも以上の事は考慮した上で、HA環境を設計しなくてはなりません。上の項目について考慮した上で基本的なHA環境を設計するとなんとなく次のような感じになります。
電源落ちたらフェイルオーバーしよう
カーネルパニックとかマシンがおかしくなったらフェイルオーバーしよう
ソフトウェアはとりあえずPIDのチェックだけにしてPIDが認識できなかったら再起動しよう
ソフトウェアの再起動が不可能な状態だったらフェイルオーバーしよう
データの共有はDRBDを使ってネットワークミラーリングでやろう
障害発生からサービス切り替え実行までの時間は、5分くらいがいいな
とりあえず今回はサービスが切り替わらない程の問題が発生したら手動で対応しなくちゃいけないな
構成図としては…
こんな感じが基本的な所でしょうか。深く追求していくと、結構きりがないので、有る程度の所で落としどころを見つけて設計しないと…
障害に対して敏感すぎる構成
や
監視することがサーバに負荷をかけて障害を起こす
という、「健康のためなら死んでも良い」的な構成になってしまいます。よくあるのが、サーバ障害発生時のダウン時間を短くしようとしすぎて、少しでも負荷がかかるとそれに反応してフェイルオーバーしてしまう環境です。くれぐれも、Linux-HA自体が「障害点」になってしまわないように考慮して設計するようにしましょう。
とりあえず設定してみよう
前置きが長くなりましたが、具体的な設定をしてみましょう。今回の環境は前回の予告にも有るとおり以下の環境で構成します。リソースはUnboundだとデータを持たないのでApacheに変更します。
OS
CentOS5.5 x86_84
クラスタソフト
Heartbeat 3.0.4 / Pacemaker 1.0.10
データ同期
DRBD8.3.10
制御対象
仮想IP / Apache
監視用インターフェース
eth1 / eth2 (eth0はサービス用ポート)
OSのインストールは、みなさん何度もやったことがあると思いますのでここでは省略します。あと基本的な動きを確かめて頂くための基本的な構成ですので、Firewallと、みんな大好きSELinuxは、今回は無効にしてください。
クラスタ関連のソフトウェアのインストール
CentOS5.5のリポジトリにはHeartbeatが含まれていますが、バージョン2系列とかなり古いものがインストールされてしまいますので、今回は本サイトで公開しているリポジトリパッケージからのインストールを行います。
drbdについては、比較的新しいバージョンがextrasのリポジトリに入っているため、今回はこのdrbd8.3.8-1を使用します。
■ダウンロード → pacemaker-1.0.10-1.4.1.el5.x86_64.repo.tar.gz
▼インストール手順
ダウンロードしたパッケージを/tmp に解凍する
解凍してできたディレクトリ内のpacemaker.repo を /etc/yum.repo.d/にコピーする
一応yumのパッケージを再読込をする
パッケージのインストール
▼コマンドライン
#cd /tmp
#tar xzf pacemaker-1.0.10-1.4.1.el5.x86_64.repo.tar.gz
# cp pacemaker-1.0.10-1.4.1.el5.x86_64.repo/pacemaker.repo /etc/yum.repo.d/
# yum clean all
# yum install pacemaker heartbeat kmod-drbd83 drbd83
Heartbeatの設定(ha.cf、authkeysの編集)
パッケージのインストールができたら、クラスタに参加するノードを設定するためにHeartbeatの設定を行います。最新のHeartbeatでは、Apache等のサービスをリソースとして制御するクラスタリソース管理ツール(CRM) 「Pacemaker」を使用するため、Heartbeatの設定では以下の項目のみ設定します。
クラスタに参加するサーバ(ノード)の名前の登録
相互監視に使うインターフェースの指定
相互監視に使うポートの設定
監視パケットを送信する間隔
クラスタリソース管理ツールの使用の設定
相互監視通信で使用する認証キーの設定
ha.cf は、インストール直後は所定の場所にインストールされていないので、設定値のドキュメントの一部としてインストールされているものから/etc/ha.d/へコピーします。
authkeysファイルについては、パーミッションが600でないとエラーになるため、chmodを使用してパーミッションの変更を行います。
# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
# chmod 600 /etc/ha.d/authkeys
▼authkeysの中身
authkeysは、今回直結回線なので、最も簡易的なcrcを使用します。authパターンに1を設定し、「1 crc」のコメントアウトを外して終了
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
▼ha.cf の中身
crm yes
logfile /var/log/ha-log
logfacility local0
keepalive 2
udpport 694
bcast eth1 eth2
node srv1
node srv2
上の2つのファイルは、各ノードで全て同じものを使用しなくてはならないので、1つのサーバ上で編集して各ノードにSCPなりでコピーしてください。
今回の設定内容では、Pacemaker(CRM)を使用し、ノードsrv1とsrv2の間でeth1,eth2の直結回線からudpポート694で相互監視をするという設定になります。
DRBDの設定
DRBDの設定は、/etc/drbd.d/の配下にインストールされます。
共通設定は、global_common.conf で設定を行い、実際に使用するDRBDデバイス(リソース)の設定は、別途リソースファイル(*.res ファイル)を作成します。今回はr0.resというファイル名で作成します。
あと、何故か設定ファイルの本体が旧バージョンのものが入っているため、インストールされたパッケージのディレクトリから設定ファイルをコピーします。
DRBDの設定も予めポリシーを決める必要があります。今回は以下のようなポリシーを決めて設定値を作成します。
ここで、fdisk等で、DRBDでレプリケーションするブロックデバイスを作成しておきましょう。両ノード同じ要領のブロックデバイスを用意します。
DRBDのユーザカウントの報告はしないようにしよう。
同期モードは安全性が一番高いProtocol Cにしよう
物理デバイスの方でI/Oエラーが出たらシャットダウンしよう
初期同期や差分同期は1Gbps回線フルスピードの要求で200MB/sにしよう。
スプリットブレインを検出してもとりあえずは何もせず手動で対応しよう。
以上です。この場合のglobal_common.confの中身は以下のようになります。
▼global_common.conf [...] . . . → Read More: 第2回やってみようLinux-HA「HAの基本構成」