がらくたネット


Linux-HA

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を設定する事で抑制できる。