第 3 回 Linux-HA Japan 勉強会 まずは Pacemaker を 使ってみよう! 2011 年 7 月 1 日 @ パソナグループ本部ビル Linux-HA Japan プロジェクト田中崇幸 Linux-HA Japan Project 1
自己紹介 名前 : 田中崇幸 (Takayuki Tanaka) Twitter: @tanakacchi21 所属 : Linux-HA Japan プロジェクト コミュニティ旗揚時のメンバー Pacemaker 普及促進のため 講演で全国行脚中 趣味 : マラソン 野球観戦 サッカー観戦 念願のサブスリーを達成したばかりの市民マラソンランナー 道産子なので 北海道日本ハムファイターズ と コンサドーレ札幌 の大ファン Linux-HA Japan Project 2
本日のお話 1 本日の Pacemaker デモ環境 2 インストール 設定をデモします! 3 フェイルオーバ 系切り替えをデモします! Linux-HA Japan Project 3
1 本日の Pacemaker デモ環境 Linux-HA Japan Project 4
本日の Pacemaker デモ環境 ハードウェア ノート PC (Core2Duo 2.26MHz メモリ 2G) OS CentOS 5.6 x86_64 HA クラスタ Pacemaker-1.0.11 ( インストールのデモを行います ) クラスタ化するアプリケーション PostgreSQL 9.0.4 ( インストール済み ) 仮想環境 Xen (CentOS 5.6 同梱版 ) Domain-U は 2 ドメインで構成 各ドメインには CPU 1 メモリ 480M を割り当て Linux-HA Japan Project 5
Pacemaker デモ構成 demo (Domain-0) サービス LAN 仮想 IP 192.168.0.100 pm1 192.168.0.22 192.168.10.22 インターコネクト LAN1 192.168.0.23 192.168.10.23 pm2 PostgreSQL 192.168.20.22 インターコネクト LAN2 192.168.20.23 HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 DB 領域 /dev/xvdb2 管理用 LAN Linux-HA Japan Project 6
Pacemaker デモ機構成 (Xen 仮想 NW) demo (Domain-0) pm1 (Domain-U) eth3 xenbr0 ( サービス LAN 用ブリッジ ) pdummy0 xenbr1 ( インターコネクト LAN1 用ブリッジ ) pdummy1 eth3 pm2 (Domain-U) xenbr2 ( インターコネクト LAN2 用ブリッジ ) pdummy2 xenbr3 ( 管理 LAN 用ブリッジ ) p dummy0 dummy1 dummy2 Linux-HA Japan Project 7
Pacemaker デモ機構成 (Xen 仮想ディスク ) pm1 (Domain-U) demo (Domain-0) pm2 (Domain-U) /dev/xvda1 (OS 領域 ) /dev/xvda2 (swap) /dev/xvda pm1 OS 領域 /dev/lvm/pm1 pm2 OS 領域 /dev/lvm/pm2 /dev/xvda /dev/xvda1 (OS 領域 ) /dev/xvda2 (swap) /dev/xvdb1 ( 排他制御 ) /dev/xvdb2 (DB 領域 ) /dev/xvdb 共有データ領域 /dev/lvm/shared-disk1 /dev/xvdb /dev/xvdb1 ( 排他制御 ) /dev/xvdb2 (DB 領域 ) Linux-HA Japan Project 8
Pacemaker デモ リソース構成 これら 4 つのリソースはグループ設定します ディスク排他制御 (sfex) 共有ディスクの排他制御を行います DB データ領域マウント (Filesystem) 共有ディスクにある DB データ領域のマウント制御を行います 仮想 IP 割り当て (IPaddr2) サービス提供用の仮想 IP を割り当てます PostgreSQL 制御 (pgsql) PostgreSQL 9.0.4 の制御を行います Linux-HA Japan Project 9
本日は STONITH のデモも行います STONITH (stonith-helper, xen0, meatclient) STONITH は Shoot The Other Node In The Head の略で監視対象サーバの異常を検出したときに 強制的にそのサーバをダウンさせるノードフェンシングを行います ネットワーク監視 (pingd) 指定した IP アドレスに ping 送信し ネットワーク疎通があるかどうかの監視を行います ディスク監視 (diskd) 指定したディスクデバイスにアクセスし ディスクの正常性確認を行います Linux-HA Japan Project 10
STONITH 実行例 ( スプリットブレイン ) STONITH pm1 切断 pm2 HW 制御ボード インターコネクトとは別の通信経路で HW 制御ボードに対しリセットを実行 HW 制御ボード OS と連動しない HW 制御ボードから強制電源断 Linux-HA Japan Project 11
STONITH 実行例 ( リソース停止失敗 ) STONITH pm1 リソース リソース故障 pm2 停止処理失敗 リソース HW 制御ボード STONITH 成功後 リソースがフェイルオーバ HW 制御ボード リソース故障時 フェイルオーバしようとして リソース停止失敗または停止タイムアウト Linux-HA Japan Project 12
Pacemaker デモ機フェンシング (STONITH) 構成 demo (Domain-0) pm1 (Domain-U) STONITH eth3 xenbr0 ( サービス LAN 用ブリッジ ) pdummy0 xenbr1 ( インターコネクト LAN1 用ブリッジ ) eth3 pm2 (Domain-U) pdummy1 xen0 STONITH プラグインを使用し xenbr3 経由で STONITH を実行する xenbr2 ( インターコネクト LAN2 用ブリッジ ) pdummy2 xenbr3 ( 管理 LAN 用ブリッジ ) p dummy0 xm destroy dummy1pm2 dummy2 SSH Linux-HA Japan Project 13
2 インストール 設定を デモします! Linux-HA Japan Project 14
インストール方法の種類 1. yum を使ってネットワークインストール Pacemaker 本家 (clusterlabs) の yumのリポジトリを使用サーバにインターネット接続必須 2. ローカルリポジトリ + yum を使ってインストール Linux-HA Japan 提供のリポジトリパッケージを使用 Linux-HA Japan オリジナルパッケージも含まれる 3. rpm を手動でインストール 沢山の rpm を個別にダウンロードする必要あり 4. ソースからインストール 最新の機能をいち早く試せる コンポーネントが多いので コンパイルは面倒 本日は 2 の構築デモを行います Linux-HA Japan Project 15
~ ローカルリポジトリ + yum を使ってインストール ~ ( サーバにインターネット接続環境がなくても OK!) 1. Pacemaker リポジトリパッケージをダウンロード Linux-HA Japan 提供の Pacemaker リポジトリパッケージを sourceforge.jp からダウンロードしておきます pacemaker-1.0.11-1.2.1.el5.x86_64.repo.tar.gz をダウンロード Pacemaker-1.0.11-1.2.1 版は版は 7 月上旬リリース予定 Linux-HA Japan Project 16
2. yum でインストール! /tmp で展開し yum コマンドでインストールします # cd cd /tmp # tar tar zxvf pacemaker-1.0.11-1.2.1.el5.x86_64.repo.tar.gz # cd cd /tmp/pacemaker-1.0.11-1.2.1.el5.x86_64.repo/ # yum c c pacemaker.repo install pacemaker pm_crmgen pm_diskd pm_logconv-hb pm_extras pm_crmgen-1.1-1.el5.noarch.rpm crm 用設定ファイル編集ツール pm_diskd-1.0-1.el5.x86_64.rpm ディスク監視アプリとRA pm_logconv-hb-1.1-1.el5.noarch.rpm ログ変換ツール pm_extras-1.1-1.el5.x86_64.rpm その他オリジナル RA 等 ぜひぜひ使ってみてください! Linux-HA Japan Project 17
ここでやっと Pacemaker インストールを デモします! Linux-HA Japan Project 18
クラスタ制御部基本設定 /etc/ha.d/ha.cf クラスタ制御部の基本設定ファイル クラスタ内の全サーバに同じ内容のファイルを設置 pacemaker on on debug debug 0 udpport 694 694 keepalive 2 warntime 7 deadtime 10 10 initdead 48 48 logfacility local1 local1 bcast bcast bcast bcast node node pm1 pm1 node node pm2 pm2 watchdog /dev/watchdog respawn root root /usr/lib64/heartbeat/ifcheckd pm_extras をインストールし この ifcheckd の設定を追加すればインターコネクト LAN の接続状況も確認可能です Linux-HA Japan Project 19
クラスタ制御部基本設定 /etc/ha.d/authkeys サーバ間の 認証キー を設定するファイル クラスタ内の全サーバに 同じ内容のファイルを配置 所有ユーザ / グループ パーミッションは root/root rw---- に設定 auth auth 1 1 sha1 hogehoge これも基本的に Heartbeat2 と設定は同じです 認証キー : 任意の文字列 認証キーの計算方法 :sha1, md5, crc を指定可 Linux-HA Japan Project 20
クラスタ制御部基本設定 /etc/syslog.conf 必須の設定ではないが 多くのログが /var/log/messages に出力されるため出力先を個別のファイルに変更するのがお勧め local1.info を使用し /var/log/ha-log へ出力する場合の例 *.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages : ( 省略省略 ) : local1.info /var/log/ha-log ha.cf で設定した logfacility 名 Linux-HA Japan Project 21
ここまでいけば Pacemaker が起動できます! # /etc/init.d/heartbeat start 2 サーバで実行 Starting High-Availability services: [[ OK ]] Linux-HA Japan Project 22
ということで Pacemaker を起動してみます! Linux-HA Japan Project 23
起動確認 Pacemaker の状態表示コマンドである crm_mon コマンドを利用します # crm_mon ============ Last Last updated: Fri Fri Jun Jun 24 2411:51:30 2011 2011 Stack: Stack: Heartbeat Current Current DC: DC: pm2 pm2 (2d9dccc6-e3db-486c-b028-15fea6bc9567) -- partition with with quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2 Nodes Nodes configured, unknown expected votes votes 0 Resources configured. ============ Online: Online: [[ pm1 pm1 pm2 pm2 ]] クラスタに組み込まれているサーバ名が表示されます Linux-HA Japan Project 24 Linux-HA Japan Project
-fa オプションを付与すると インターコネクト LAN の接続状況も確認可能です # crm_mon -fa -fa ============ ~ 省略省略 ~ ============ Online: Online: [[ pm1 pm1 pm2 pm2 ]] Node Node Attributes: ** Node Node pm1: pm1: + pm2- :: up up + pm2- :: up up ** Node Node pm2: pm2: + pm1- :: up up + pm1- :: up up インターコネクトが UP されているのが確認可能 Linux-HA Japan Project 25
ここで Pacemaker 状態表示と インターコネクト LAN 故障を デモします! デモ例は次ページ Linux-HA Japan Project 26
インターコネクト LAN1 を故障させてみる デモ 1 サービス LAN pm1 192.168.0.22 192.168.10.22 疑似故障 # ifdown 故障 192.168.0.23 192.168.10.23 pm2 DC 192.168.20.22 192.168.20.23 HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 DB 領域 /dev/xvdb2 管理用 LAN Linux-HA Japan Project 27
これだけでは リソース設定が無いのでなーんにもアプリケーションは起動していません Linux-HA Japan Project 28
リソース計画 リソース制御するには事前に計画が必要 リソースの選択 Apache PostgreSQL NW 監視など 何を使用するか? リソースエージェント (RA) がなければ 予め自作してみるか? リソースの動作の定義 リソースの監視 (monitor) 間隔は何秒にするか? タイムアウトは? 故障時はどのように動作させるか? リソースエージェント (RA) に与えるパラメータは? リソース配置 連携の定義 リソースをどのサーバで起動させるか? リソースの起動順番は? Linux-HA Japan Project 29
リソース設定方法 主に 2 通り cib.xml ファイルに XML 形式で設定を記述 従来のHeartbeat 2での方法 XMLを手で書く必要があり面倒 crm コマンドで設定 Pacemakerからの新機能 crmファイル編集ツールは Linux-HA Japanより提供本日は crm ファイル編集ツールを使用して構築デモを行います Linux-HA Japan Project 30
crm ファイル編集ツール pm_crmgen 6/6 6/6 に pm_crmgen 1.1 1.1 版を版をリリース Linux-HA Japan で crm ファイル編集ツールを提供中! Excel のテンプレートファイルから簡単に crm 用設定ファイルを生成してくれるツールです リポジトリパッケージに含まれていますし 個別にダウンロードも可能です http://sourceforge.jp/projects/linux-ha/ Linux-HA Japan Project 31
どのサーバが優先的にActive? NW 監視は? NWが壊れた時の挙動は? STONITHの設定は? など細かい挙動の設定も可能です! Linux-HA Japan Project 32
crm ファイル編集ツール 設定イメージ 1) Excel のテンプレートファイルにリソース定義を記載 /usr/share/pacemaker/pm_crmgen/pm_crmgen_env.xls Excel が使用できる PC にコピーします テンプレートは青枠の中に値を記入していきます ファイルを 本日の仮想デモ環境は この Excel の設定例シートでほとんど構築が可能です! 監視間隔やタイムアウト値 故障時の動作などを入力 Linux-HA Japan Project 33
crm ファイル編集ツール どのサーバを Active にするかといったリソース配置制約の設定も サーバ名を記述するだけで可能です リソース ID ID Active と Standby サーバを指定 Linux-HA Japan Project 34
crm ファイル編集ツール crm 用設定ファイルに変換 2) CSV 形式でファイルを保存 crm_sample.csv などとして CSV 形式で保存 3) CSV ファイルをサーバへ転送 CSVファイル保存後 SCPやFTP 等でpm_crmgenがインストールされたサーバへ転送 Linux-HA Japan Project 35
crm ファイル編集ツール crm 用設定ファイルに変換 4) pm_crmgen コマンドで crm ファイルを生成 # pm_crmgen o o crm_sample.crm crm_sample.csv 生成する設定ファイル名 3) で転送した CSV ファイル 5) crm コマンドを実行してリソース設定を反映 # crm configure load update crm_sample.crm Linux-HA Japan Project 36
共有ディスク排他制御機能 sfex (Shared Disk File EXclusiveness Control Program) sfex は共有ディスクの所有権を制御するリソースです 共有ディスク上のデータパーティションを使うリソースと一緒にリソースグループを作ります 所有権を持ったサーバのリソースのみがデータパーティションにアクセスできます pm1 リソースグループ sfex Filesystem IPaddr2 pgsql 所有権読み書き 接続 OK pm1 sfex 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 所有権読み書き 接続 NG pm2 リソースグループ sfex Filesystem IPaddr2 pgsql Linux-HA Japan Project 37
共有ディスク排他制御機能 (sfex) 排他制御領域の初期化 共有ディスク排他制御機能 (sfex) を使用するためには 排他制御領域を初期化する必要性があります # sfex_init n n 1 /dev/xvdb1 排他制御領域のデバイス名を指定する ext3 などのファイルシステムを作成する必要性はありません Linux-HA Japan Project 38
リソース設定をして サービスの起動と 本当にサービス が起動しているかデモします! デモ例は次ページ Linux-HA Japan Project 39
PostgreSQL に接続してみる demo# pgsql -U postgres -h 192.168.0.100 -l サービスLAN 仮想 IP 192.168.0.100 pm1 PostgreSQL 192.168.0.22 192.168.10.22 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 192.168.0.23 192.168.10.23 192.168.20.23 pm2 デモ 2 demo(domain-0) DC HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 管理用 LAN Linux-HA Japan Project 40
3 フェイルオーバ 系切り替えを デモします! Linux-HA Japan Project 41
pm1 を強制停止してみる デモ 3 demo# xm destroy pm1 サービス LAN 仮想 IP 192.168.0.100 pm1 192.168.0.22 192.168.10.22 インターコネクト LAN1 192.168.0.23 192.168.10.23 pm2 DC PostgreSQL 192.168.20.22 インターコネクト LAN2 192.168.20.23 HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 DB 領域 /dev/xvdb2 管理用 LAN Linux-HA Japan Project 42
pm2 をスタンバイ化してみる # crm node standby pm2 サービス LAN デモ 4 pm1 192.168.0.22 192.168.10.22 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 仮想 IP 192.168.0.100 192.168.0.23 192.168.10.23 standby 192.168.20.23 pm2 DC PostgreSQL HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 管理用 LAN Linux-HA Japan Project 43
pm2 をスタンバイ解除してみる # crm node online pm2 サービス LAN デモ 5 pm1 PostgreSQL 192.168.0.22 仮想 IP 192.168.0.100 192.168.10.22 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 192.168.0.23 192.168.10.23 192.168.20.23 pm2 DC standby Online へ HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 管理用 LAN Linux-HA Japan Project 44
リソース故障させてみる デモ 6 擬似故障 # kill -9 postgresql 親プロセス サービス LAN pm1 192.168.0.22 仮想 IP 192.168.0.100 192.168.10.22 インターコネクト LAN1 192.168.0.23 192.168.10.23 pm2 DC PostgreSQL 故障 192.168.20.22 インターコネクト LAN2 192.168.20.23 HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 eth3 172.20.24.23 HW 制御ボード 172.20.24.21 DB 領域 /dev/xvdb2 管理用 LAN Linux-HA Japan Project 45
この状態で pm2 をスタンバイしてみる # crm node standby pm2 サービス LAN デモ 7 pm1 フェイルカウント 192.168.0.22 192.168.10.22 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 仮想 IP 192.168.0.100 192.168.0.23 192.168.10.23 192.168.20.23 pm2 DC PostgreSQL HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 standby eth3 172.20.24.23 HW 制御ボード 172.20.24.21 管理用 LAN Linux-HA Japan Project 46
切り替わらないのは ミスではありません! Linux-HA Japan Project 47
フェイルカウントがカウントアップされているため クリアしなければ切り替わりません # crm_mon -fa -fa ============ ~ 省略省略 ~ ============ Migration summary: ** Node pm1: prmpg: migration-threshold=1 fail-count=1 ** Node pm2: Failed actions: prmpg_monitor_10000 (node=pm1, call=34, rc=7, status=complete): not not running Linux-HA Japan Project 48
フェイルカウントをクリアしてみる # crm resource cleanup prmpg pm1 サービスLAN デモ 8 pm1 フェイルカウント クリア HW 制御ボード 172.20.24.21 192.168.0.22 仮想 IP 192.168.0.100 192.168.10.22 192.168.20.22 eth3 172.20.24.22 インターコネクト LAN1 インターコネクト LAN2 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 192.168.0.23 192.168.10.23 192.168.20.23 eth3 172.20.24.23 pm2 DC standby HW 制御ボード 172.20.24.21 管理用 LAN Linux-HA Japan Project 49
pm2 Online 後に スプリットブレイン サービス LAN デモ 9 DC? pm1 PostgreSQL 192.168.0.22 仮想 IP 192.168.0.100 192.168.10.22 192.168.20.22 擬似故障 # ifdown # ifdown インターコネクト LAN1 故障 インターコネクト LAN2 192.168.0.23 192.168.10.23 192.168.20.23 pm2 DC? HW 制御ボード 172.20.24.21 eth3 172.20.24.22 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 eth3 HW 制御ボード 172.20.24.23 172.20.24.21 ダブルマウントでデータ破壊!? 管理用 LAN Linux-HA Japan Project 50
リソース故障時 停止タイムアウト 擬似故障 # kill -9 postgresql 親プロセス サービス LAN デモ 10 DC pm1 故障 PostgreSQL 192.168.0.22 停止タイムアウト HW 制御ボード 172.20.24.21 フェイルオーバ失敗!? 仮想 IP 192.168.0.100 192.168.10.22 192.168.20.22 eth3 172.20.24.22 インターコネクト LAN1 インターコネクト LAN2 排他制御領域 /dev/xvdb1 DB 領域 /dev/xvdb2 管理用 LAN 192.168.0.23 192.168.10.23 192.168.20.23 eth3 172.20.24.23 pm2 HW 制御ボード 172.20.24.21 Linux-HA Japan Project 51