Linux-HA
pacemaker本家さん+heartbeat+drbd日本語サイトさんでクラスタの巻
用語(絶対覚える必要ありです)
CRM Cluster Resource Manager
CIB Cluster Information Base
DC ??クラスタの指揮サーバ
インターコネクト通信 heartbeatで通信する相互生死確認用通信、この通信チャンネルが切断させる事でスプリットブレインになる可能性が大きい。なので一般には冗長化(複数経路)持たすのが望ましい。推奨は2経路。サービス用1つと合わせると3つのNICが必要になる。
STONITH スプリットブレインになった時に相手側を強制的にフェンシング(再起動)させる。このため、リモートから電源が操作できるハードが必要。標準のIPMIからiLO、IMM等のプラグインがある
OCF Open Cluster Flamework クラスタリソース定義クラスの1つ
LSB Linux Standard Base
インストール
環境
- CentOS 5.x
- NICはeth0(サービス系)、eth1(内部通信用)の2つ。ほんとは3つぐらいしてた方がよいらしい。
- HA対象リソースはIP,Apache,MySQL,PostgreSQLとDRBD
- DRBDはリソース名r0で/dev/sda3を使ってみる
ここを見て必要なrpmへのリポジトリ情報を得る。今回はCentOS5上に展開しようと思うので、epel 5のリポジトリを使う。当然epelのリポジトリも必要。
rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm wget -O /etc/yum.repos.d/clusterlabs.repo \ http://www.clusterlabs.org/rpm/epel-5/clusterlabs.repo yum install pacemaker heartbeat drbd83 kmod-drbd83
DRBD設定
vi /etc/drbd.d/global_common.conf vi /etc/drbd.d/r0.res
戻る
chkconfig等で設定したリソースが自動起動しないようにしておく。 HeartbeatやDRBDについても同様。手動であげる。
DRBDとPacemakerのログ設定が重要。
DRBDを利用する場合はPacemakerのグローバルプロパティに以下3つは最低限設定する
- default-resource-stickiness=“200”
- no-quorum-policy=“ignore”
- stonith-enabled=“false”
DRBDを定義して、マルチステートリソースとして再定義する。 これにより、両ノードでDRBDが起動した上でアクティブノード側でプライマリ、スタンバイノード側でセカンダリとしてDRBDリソースが動作する。
DRBDがプライマリになったら、そのノードでリソースグループを起動する。というcolocationとorderの設定をする。
migration-threshold migration-thresholdに設定した値になると故障とみなす。デフォルト値は0となり、故障とみなさないという意味になる。
Dummy RA ダミーのRA。start処理でステータスファイルを作成してmonitor処理でステータスファイルの有無を確認してstop処理でステータスファイルを削除する
on-fail=restart
/var/lib/pengineの下のファイル達 Pacemakerのpengine(Policy Engine)が出力する状態遷移グラフ
出力されるファイルは3種類
- pe-input 正常系
- pe-error 異常系(ERRORレベル)
- pe-warn 異常系(WARNレベル)
デフォルト値は-1でunlimited。クラスタオプションのpropetyで
- pe-error-series-max
- pe-warn-series-max
- pe-input-series-max
を設定すればOK
リソースエージェントの設定情報はmeta情報で見れる
crm ra meta <class>:<providor> 例えば meta ocf:mysql みたいなー
crm configure property pengineの設定の説明は
# /usr/lib/heartbeat/pengine metadataで確認できる
batch-limit= | 30s | TEが並列処理を許可するジョブ数 |
cluster-delay= | 60s | ネットワーク越しの遅延時間 |
default-action-timeout= | 20s | アクションが成功するのを待機する時間 |
default-resource-stickiness= | 0 | |
is-managed-default= | true | true/false trueにするとstart/stop処理が止まる |
maintenance-mode= | false | true/false trueにするとstart/stop/monitor処理が止まる |
no-quorum-policy= | stop | ignore/stop/freeze/suicide |
node-health-green= | 0 | |
node-health-red= | -INFINITY | |
node-health-strategy= | none | none/migrate-on-red/only-green/progressive/custom |
node-health-yellow= | 0 | |
pe-error-series-max= | -1 | 異常系(ERROR)遷移グラフの数、Defaultは-1で無制限、0は無効 |
pe-input-series-max= | -1 | 正常系遷移グラフの数、Defaultは-1で無制限、0は無効 |
pe-warn-series-max= | -1 | 異常系(WARN)遷移グラフの数、Defaultは-1で無制限、0は無効 |
remove-after-stop= | false | リソースが止まったらLRMから解除する |
start-failure-is-fatal= | true | always treat start failures as fatal.これは古い。falseに設定したらresource-failure-stickinessを使うようになる |
startup-fencing= | true | Advanced user only |
stonith-action= | reboot | reboot/poweroff STONITHデバイスに送るアクション |
stonith-enabled= | true | true/false STONITHを有効にするか無効にするか |
stonith-timeout= | 60s | STONITHアクションが成功するのを待つ時間 |
stop-all-resources= | false | |
stop-orphan-actions= | true | キャンセルされたらアクションを削除する |
stop-orphan-resources= | true | リソースが停止したら削除する |
symmetric-cluster= | true | 全てのリソースはどこでも起動できるか |
/var/lib/pengine/の下にできるpe-{input/warn/error}-XXX/bz2はseries-maxを設定する事で抑制できる。