HAクラスタをフェイルオーバ失敗から救おう!

Similar documents
Pacemakerでかんたんクラスタリング体験してみよう

自己紹介 名前 所属 飯田雄介 ( いいだゆうすけ ) 主な活動 Linux-HA Japan プロジェクト Pacemaker 本体の機能改善や 外部ツールの開発を行っています Linux-HA Japan から pm_logconv や pm_crmgen といったツールを提供しています 2

まずは、Pacemakerを使ってみよう!

実演!Pacemakerで楽々クラスタリング

HAクラスタでPostgreSQLを高可用化(前編)

実演!Pacemakerで楽々クラスタリング OSC2011Tokyo/Spring

Pacemaker + KVMで仮想化クラスタリング ~仮想化連携機能のご紹介~ OSC2011Tokyo/Fall

目次 Pacemaker ってなに? Pacemaker の設定とは? Pacemaker のリソース設定 リソース定義 パラメータ設定 リソース種類選択 リソース制約 クラスタ設定 さいごに Linux-HA Japan の紹介 Linux-HA Japan Project 2

スライド 1

3 検証結果 3.1 ソフトウェアのインストール Red Hat Enterprise Linux 5.7 は最小構成でインストールし 最新バージョンにアップデートした Thirdware Linux-HA を構成するパッケージ (DRBD Heartbeat Pacemaker) は LINBIT

テーマ Pacemaker-1.1 を味わうための 便利 な使い方 ~ 保守運用に活用しよう ~ Pacemaker で対応する 故障 ケースの起こし方と復旧手順 ~ 事前に動作検証しよう ~ 実際の構築運用シーンで起きる問題の 解決 方法 ~ よくある問題を理解しよう ~ 2

HAクラスタで PostgreSQLを高可用化 (後編) ~ レプリケーション編 ~

挑戦!Pacemakerで自由自在にHAクラスタリング

Heartbeat + Xenで仮想化クラスタリングしてみよう!

100123SLES11HA.pptx

Microsoft iSCSI Software Targetを使用したクラスタへの共有ディスク・リソースの提供

GenieATM 6300-T / 6200-T シリーズ 1. 基本的な機器オペレーションのために 1-1. 機器への接続 機器への接続方法は 以下の 2 通りがあります シリアルポートを使用してログインする LAN 経由で Telnet または SSH を使用して仮想 Interface からロ

HAクラスタで PostgreSQLを高可用化 (後編) ~ レプリケーション編 ~

HAクラスタで PostgreSQLを高可用化 (後編) ~ レプリケーション編 ~

Pacemakerでお手軽Dockerクラスタリング!

R76/Gaia ブリッジ構成設定ガイド

SRA OSS, Inc. ホワイトペーパー IBM Power Systems (Linux) における PaceMaker/DRBD/PostgreSQL/pgpool-II 動作検証 2011 年 10 月 1 日 SRA OSS,Inc. 日本支社 Copyright 2011SRA OSS

CLUSTERPRO/システム構築ガイド

CLUSTERPRO for Linux PostgreSQL HowTo

別紙 : 検証環境の構築手順 ( 章 ) 1. サーバ設定 1.1 IP アドレス設定 サーバは以下の 6 台を用いる pgpool-ii サーバ 2 台 DB サーバ 3 台 上位サーバ 1 台 OS は全サーバで CentOS 6.4 x86_64 とする pgpool-ii のサー

Pacemake-1.0とは違うのだよ、1.0とは! ~Pacemaker-1.1新機能のご紹介~

<48554C46545F F A5490E08E9197BF2E786C73>

<4D F736F F F696E74202D E656D6F73837D836C815B C B CC90DA91B182CC8E DD82F0979D89F082B582E682A F38DFC E >

DHCPサーバのクラスタ化

ESMPRO/ServerManager Ver. 6 変更履歴

ServerView RAID Manager VMware vSphere ESXi 6 インストールガイド

<MW-400k > InterSec/MW400k アップデート適用手順書 2017 年 8 月 1 版

Windows GPO のスクリプトと Cisco NAC 相互運用性

スライド 0

SIOS Protection Suite for Linux v9.3.2 AWS Direct Connect 接続クイックスタートガイド 2019 年 4 月

Microsoft Word - Win-Outlook.docx

目次 1 はじめに 対象読者 想定するサーバ環境 注意事項 OS 環境の準備 CentOS 6.2 のインストールと初期設定 Thirdware Linux-HA クラスタスタックのインストール...2 RH

2017/8/2 HP SiteScope software 監視機能対応表 この監視機能対応表は HP SiteScope software v11.33) に対応しています モニタ モニタ説明 モニタ説明 SiteScope for Windows SiteScope for Linux ネット

PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP が被るとローカル環境内接続が行えなくな

WebView のハング:- java.lang.OutOfMemoryError


Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

コンフィギュレーション ファイルのバックアップと復元

FUJITSU Software Systemwalker Centric Manager Lite Edition V13.5 機能紹介資料

1. ネットワーク経由でダウンロードする場合の注意事項 ダウンロード作業における確認事項 PC 上にファイアウォールの設定がされている場合は 必ずファイアウォールを無効にしてください また ウイルス検知ソフトウェアが起動している場合は 一旦その機能を無効にしてください プリンターは必ず停止状態 (

クラスタ構築手順書

SAMBA Remote(Mac) 編 PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP

FLORA gd500/HA8000-bd Linux電源制御

How to Install and Configure Panorama Panorama のインストールと設定 Panorama は Palo Alto Networks のサポートサイトからダウンロード可能な VMware イメージです 本書は Panorama のインストールと Panora

ServerView with Data ONTAP-v™ PowerChute® Network Shutdown 設定について

PRIMECLUSTER 他社製PCサーバ使用時の留意事項

Microsoft Word - nvsi_090200jp_r1_nvbsvr_mscs.doc

コンフィギュレーション レジスタの設定変更

MC3000一般ユーザ利用手順書

AutoSlideGenerator

SAMBA Stunnel(Mac) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxxxx 部分は会社様によって異なります xxxxx 2 Mac OS 版ダウンロー

Microsoft Word - TestReport_PRIMEPOWER250_ doc

ServerView RAID Manager VMware vSphere ESXi 5 インストールガイド

Microsoft PowerPoint - OSS運用管理勉強会資料_ a.pptx

PowerTyper マイクロコードダウンロード手順

iRMC S4 ご使用上の留意・注意事項

Microsoft Word - PC0502_090925_IPアドレスの設定.doc

Microsoft Word - シャットダウンスクリプトWin7.doc

株式会社 日立製作所

CLUSTERPRO X 4.0 for FileMaker Server ご紹介資料

LEAP を使用して Cisco ワイヤレス クライアントを認証するための Funk RADIUS の設定

Microsoft Word - ssVPN MacOS クライアントマニュアル_120版.doc

Microsoft Word - qtsi_120246jp_rhev.doc

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

PowerPoint プレゼンテーション

2013年『STSSスキルコミュニティ』 テーマ別Kickoff資料

はじめに このドキュメントではftServerに関する障害調査を行う際に 必要となるログ データの取得方法を説明しています ログ データの取得には 初期解析用のデータの取得方法と 詳細な調査を行うときのデータ取得方法があります 特別な理由でOS 側のログが必要となった場合には RHELログの取得につ

はじめに 本書は Express5800/ft サーバに Red Hat Enterprise Linux 6 Server 及び ft Server Control Software がインストールされており OS がインストールされている内蔵ディス クに空き容量がある場合に 追加でボリュームを作

付録

CLUSTERPRO X IIJ GIO インフラストラクチャー P2 動作検証報告 2017 年 11 月日本電気株式会社クラウドプラットフォーム事業部 CLUSTERPROグループ 1 NEC Corporation 2017

プレゼンタイトルを入力してください

Express5800/R320a-E4/Express5800/R320b-M4ユーザーズガイド

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

TFTP serverの実装

PRIMERGYマネジメントブレード

インターネット お客様環境 回線終端装置 () 61.xxx.yyy.9 (PPPoE) 61.xxx.yyy.10 (Ethernet) 61.xxx.yyy.11 Master 61.xxx.yyy.12 Backup

Cisco Unified Communications Manager サーバ アドレスとユーザ名の自動的な入力

ごあいさつ このたびは ESMPRO/AC Advance マルチサーバオプション Ver3.6(1 ライセンス ) をお買い上げ頂き 誠にありがとうございます 本書は お買い上げ頂きましたセットの内容確認 セットアップの内容 注意事項を中心に構成されています ESMPRO/AC Advance マ

Transcription:

HA クラスタを フェイルオーバ失敗から 救おう! 2013 年 8 月 3 日 OSC2013 Kansai@Kyoto Linux-HA Japan プロジェクト田中崇幸 1

自己紹介 名前 : 田中崇幸 (Takayuki Tanaka) Twitter: @tanakacchi21 所属 : Linux-HA Japan プロジェクト コミュニティ旗揚時のメンバー 趣味 : マラソン フルマラソン (42.195km) でサブ 3 をなんとか維持している市民マラソンランナー 2012 年の第 1 回京都マラソンも参加しました 2

本日のお話 1 STONITHて何? 2 本日のPacemakerデモ環境 3 STONITHを設定してみよう 4 いろいろ故障デモします! 5 Linux-HA Japanについて 3

1 STONITH って何? 4

HA クラスタで あってはならないけど よく聞く話 5

それは フェイルオーバ失敗 6

フェイルオーバ中に 途中で固まっていた 7

フェイルオーバ開始 こんな状態 サービス起動中 mount アンマウント途中でだんまり!? unmount 故障発生 サービス 停止 共有ディスク し ~ ん.. 8

さらに HAクラスタで 宿命 ともいえるよく聞く話 9

それは スプリットブレイン 10

これによって 起こる恐ろしいこと 11

あいつ死んだな.. こんな状態 あいつ死んだな.. 切断 サービス起動中 mount 共有ディスク サービス起動しまーす mount データ破壊 データ破壊ダブルマウント 12

が! これらを救うのが Pacemaker の STONITH 13

STONITH って? 14

Shoot-The-Other-Node- In-The-Head 制御が利かないサーバを HA クラス タから 強制的に離脱 させる機能 です フェンシング 15

絵で書くと こんなイメージ 16

自殺機能ではなく 他殺機能です http://ourobengr.com/ha 17

フェンシングが起こるのは 対向サーバがサービスの停止に失敗したとき 対向サーバの応答が無いとき 18

では 具体的にどうやって 強制離脱させるの? 19

STONITH 実行例 ( リソース停止失敗 ) STONITH 停止処理失敗 pm1 リソース HW 制御ボード リソース故障 リソース故障時 フェイルオーバしようとして リソース停止失敗または停止タイムアウト リソース pm2 リセット成功後 リソースがフェイ HW 制御ボード ルオーバインターコネクトとは別の通信経路でHW 制御ボードに対しリセットを実行 20

STONITH 実行例 ( スプリットブレイン ) STONITH pm1 切断 pm2 HW 制御ボード インターコネクトとは別の通信経路で HW 制御ボードに対しリセットを実行 HW 制御ボード OS と連動しない HW 制御ボードから強制電源断 21

不具合があったとき OS シャットダウン処理を 行わずに 22

対向サーバの 電源 OFF を Pacemaker 行うのです 23

強引だと 思うでしょうが 24

最終手段としては 一般的ですよね? 25

HW 制御ボードは例えばこんなの D 社 idrac6 Integrated Dell Remote Access Controller 6 PowerEdge R610 等に標準搭載 IPMI 2.0 対応 高価なサーバのみ搭載!?!? H 社 ilo4 Integrated Lights-Out 4 ProLiant DL360 Gen8 等に標準搭載 IPMI 2.0 対応 ilo4 26

安価なサーバでも搭載されてます 例 ) H 社 MicroServer MicroServer にリモート管理オプションのリモートアクセスカードキットを搭載すれば STONITH が使用可能です Linux-HA Japan 展示ブースのデモ機で使っています H 社 MicroServer リモートアクセスカード (IPMI 2.0 対応 ) 27

IPMI 対応ならば STONITH できます! 28

IPMI とは... サーバ プラットフォームの状態 ( 温度 電圧 ファン バスなど ) 監視や復旧 リモート制御を行うための標準インターフェイス仕様です 使用するにはまずハードウェアが対応していることが前提である上 それなりの設定が必要です この IPMI デバイスにアクセスするためのソフトウェアが IPMITool で Pacemaker からも STONITH プラグインからこのコマンドを使用します # ipmitool [options...] <command> 29

STONITH プラグイン Pacemakerには 様々なSTONITHプラグインが標準装備されています プラグインは シェルスクリプト Perl Python 等で作成されています 目的 プラグイン名 フェンシング ( 電源断 ) 制御 ipmi (IPMI デバイス用 ) libvirt (KVM,Xen 等仮想制御用 ) riloe (H 社 ilo1, ilo2 用 ) ibmrsa-telnet (I 社 RSA2 用 ) サーバ生死確認 相撃ち防止 stonith-helper 停止通知 meatware プラグインの詳細は後ほど説明します!! 30

ipmi プラグイン /usr/lib64/stonith/plugins/external/ipmi IPMI に準拠した HW 制御ボードを制御するプラグインです ipmi プラグインでは ipmitool コマンドをプラグインから実行しています reset 処理で実行されるコマンド # ipmitool -I -I lanplus -H -H <IPMI ボード IP IPアドレス > -U -U < ユーザ名 > -P -P < パスワード > power reset Chassis Power Control: Reset status( 状態確認 ) 処理で実行されるコマンド # ipmitool -I -I lanplus -H -H <IPMI ボード IP IPアドレス > -U -U < ユーザ名 > -P -P < パスワード > power status Chassis Power is is on on 31

ipmi STONITH プラグイン設定例 primitive prmst1-2 stonith:external/ipmi \ params \ priority="2" \ stonith-timeout="60s" \ hostname="pm1" \ ipaddr="172.20.24.147" \ userid="pacemaker" \ passwd="hogehoge" \ interface="lanplus" \ op op start interval="0s" timeout="60s" \ op op monitor interval="3600s" timeout="60s" \ op op stop interval="0s" timeout="60s" この設定により reset 処理時に実行されるコマンド # ipmitool -I -I lanplus -H -H 172.20.24.147 -U -U pacemaker -P -P hogehoge power reset 32

MicroServer での例 リモートアクセスカード管理画面 userid に設定するユーザ名 ipaddr に設定する IP アドレス passwd に設定するパスワード reset のために必要なユーザ権限は HW によって様々.. 33

2 本日の Pacemaker デモ環境 34

本日の Pacemaker デモ環境 ハードウェア ノート PC (Core2Duo 2.26MHz メモリ 4G) OS CentOS 6.4 x86_64 HA クラスタ Pacemaker-1.0.13 アクティブ / スタンバイの 2 台構成 クラスタ化するアプリケーション PostgreSQL 9.2.4 仮想環境 KVM ( ホスト 1 ゲスト 2) 各ゲスト OS には CPU 1 メモリ 1024M を割り当て 35

Pacemaker デモ構成 サービス LAN pm1: アクティブ pm2: スタンバイ demo ( ホスト ) pm1 仮想 IP eth0 192.168.0.100 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 pm1 eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 pm2 HW 制御ボード 192.168.131.21 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 36

Pacemaker デモ構成 サービス LAN pm1: スタンバイ pm2: アクティブ demo ( ホスト ) pm1 eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 仮想 IP 192.168.0.100 eth0 192.168.0.23 pm2 eth1 192.168.10.23 eth2 192.168.20.23 pm2 HW 制御ボード 192.168.131.21 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 37

Pacemaker デモ機構成 ( 仮想 NW) pm1 ( ゲスト ) eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 eth3 192.168.131.22 demo ( ホスト ) br0: 192.168.0.21 ( サービス LAN 用ブリッジ ) br1: 192.168.10.21 ( インターコネクト LAN1 用ブリッジ ) br2: 192.168.20.21 ( インターコネクト LAN2 用ブリッジ ) pm2 ( ゲスト ) eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 eth3 192.168.131.23 br3: 192.168.131.21 ( 管理 LAN 用ブリッジ ) eth0 38

Pacemaker デモ機構成 ( 仮想ディスク ) pm1 ( ゲスト ) demo ( ホスト ) pm2 ( ゲスト ) /dev/vda1 (OS 領域 ) /dev/vda2 (swap) /dev/vdb1 ( 排他制御 ) /dev/vdb2 (DB 領域 ) /dev/vda /dev/vdb pm1 OS 領域 /dev/lvm/pm1 pm2 OS 領域 /dev/lvm/pm2 共有データ領域 /dev/lvm/shared-disk2 /dev/vda /dev/vdb /dev/vda1 (OS 領域 ) /dev/vda2 (swap) /dev/vdb1 ( 排他制御 ) /dev/vdb2 (DB 領域 ) 39

Pacemaker デモリソース構成 仮想 IP 192.168.0.100 pm1 HW 制御ボード 192.168.131.21 eth0 192.168.0.22 grppg prmexeth1 192.168.10.22 prmfseth2 192.168.20.22 prmpg prmip eth3 192.168.131.22 これら 4 つのリソースはグループ設定します サービス LAN DBデータ領域マウント eth0 (Filesystem) 192.168.0.23 pm2 共有ディスクにあるDBデータ領域のマウント制御を行います インターコネクト LAN1 インターコネクト LAN2 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 ディスク排他制御 (sfex) 共有ディスクの排他制御を行います 管理用 LAN eth1 192.168.10.23 PostgreSQL eth2 制御 (pgsql) PostgreSQL 192.168.20.23 9.2.4 の制御を行います 仮想 IP 割り当て (IPaddr2) eth3 HW 制御ボードサービス提供用の仮想 192.168.131.23 192.168.131.21 IPを割り当てます 40

リソース状態表示 状態表示コマンド (crm_mon) にて Pacemaker が制御しているリソースの状態が表示されます リソース稼動状態と稼働中のサーバ名が Started サーバ名 などと表示されます # crm_mon Resource Group: grppg prmex (ocf::heartbeat:sfex): Started pm1 pm1 prmfs (ocf::heartbeat:filesystem): Started pm1 pm1 prmpg (ocf::heartbeat:pgsql): Started pm1 pm1 prmip (ocf::heartbeat:ipaddr2): Started pm1 pm1 prmex: ディスク排他制御 (sfex) prmfs: DBデータ領域マウント (Filesystem) prmpg: PostgreSQL 制御 (pgsql) prmip: 仮想 IP 割り当て (IPaddr2) 41

[ デモ 1] STONITH 無環境でリソース停止タイムアウトの故障デモします! 42

故障デモに あたって ============ Last updated: Thu Aug 1 09:01:14 2013 Stack: Heartbeat Current DC: pm2 (e470e941-7c11-42a4-9180-1256f0c1f22d) - partition with quorum Version: 1.0.13-30bb726 2 Nodes configured, unknown expected votes 4 Resources configured. ============ 状態表示コマンド crm_mon の結果はデモでは表示しきれないので crm_mon コマンドのワンショットから一部をデモ目的に必要な部分をスクリプトで抜き出し 1 秒毎に表示してデモを行います 推奨ではないですが デモの関係上 Pacemaker は自動起動設定しています Online: [ pm1 pm2 ] Resource Group: grppg prmex (ocf::heartbeat:sfex): Started pm1 prmfs (ocf::heartbeat:filesystem): Started pm1 prmpg (ocf::heartbeat:pgsql): Started pm1 prmip (ocf::heartbeat:ipaddr2): Started pm1 Clone Set: clndiskd1 Started: [ pm1 pm2 ] Clone Set: clndiskd2 Started: [ pm1 pm2 ] Clone Set: clnpingd Started: [ pm1 pm2 ] Node Attributes: * Node pm1: + default_ping_set : 100 + diskcheck_status : normal + diskcheck_status_internal : normal + pm2-eth1 : up + pm2-eth2 : up * Node pm2: + default_ping_set : 100 + diskcheck_status : normal + diskcheck_status_internal : normal + pm1-eth1 : up + pm1-eth2 : up Migration summary: * Node pm1: 43 * Node pm2:

PostgreSQL に接続 demo# pgsql -U postgres -h 192.168.0.100 -c SELECT now(); サービス LAN demo( ホスト ) pm1 仮想 IP 192.168.0.100 eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 pm2 HW 制御ボード 192.168.131.21 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 44

停止タイムアウトデモのために こんな仕掛けします 1.pgsql リソースエージェントの stop 制御部に sleep 60 をわざと入れます /usr/lib/ocf/resource.d/heartbeat/pgsql 779 #pgsql_stop: pgsql_real_stop() wrapper for 780 pgsql_stop() { 781 sleep 60 782 if! is_replication; then 783 pgsql_real_stop 784 return $? 785 else 45

2.crm コマンドの edit モードで prmpg のストップタイムアウトを 60s から 10s に変更します # crm configure edit edit は 初期構築後に値を変更したい場合に便利です primitive prmpg ocf:heartbeat:pgsql \ params pgctl="/usr/pgsql-9.2/bin/pg_ctl" psql="/usr/pgsql- 9.2/bin/psql" pgdata="/var/lib/pgsql/9.2/data" pgdba="postgres" pgport="5432" pgdb="template1" \ op op start interval="0s" timeout="60s" on-fail="restart" \ op op monitor interval="10s" timeout="60s" on-fail="restart" \ op op stop interval="0s" timeout="10s" on-fail="block" 46

停止タイムアウト時は こんなエラー表示になります # crm_mon -f -f 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 running prmpg_stop_0 (node=pm1, call=35, rc=-2, status=timed Out): unknown exec error 停止タイムアウト状態を表示 47

停止失敗時リソースは unmanage 状態になります # crm_mon Resource Group: grppg prmex (ocf::heartbeat:sfex): Started pm1 prmfs (ocf::heartbeat:filesystem): Started pm1 prmpg (ocf::heartbeat:pgsql): Started pm1 (unmanaged) FAILED prmip (ocf::heartbeat:ipaddr2): Stopped unmanage( 管理外 ) 状態を表示 48

unmanage とは? その名のとおり Pacemaker から管理外の状態です リソース停止の on-fail を block にした場合 リソース停止失敗時は unmanage 状態になります この場合 サーバの電源 OFF を保守者が実施しなければなりません 49

on-fail リソースが故障した場合の処理は on-fail 属性に従います op op stop interval="0s" timeout="10s" on-fail="block" block 故障が生じたリソースの管理を停止し 何もせず保守者介在まで待機します fence 故障が生じたリソースが稼動していたサーバをクラスタからSTONITHにより離脱させます ignore 何も処理を行いません 50

リソース故障時 停止タイムアウト (STONITH 無 ) 擬似故障 # kill -9 postgresql 親プロセス サービス LAN デモ 1 DC pm1 故障 HW 制御ボード 192.168.131.21 仮想 IP 192.168.0.100 eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 停止タイムアウト eth3 192.168.131.22 インターコネクト LAN1 インターコネクト LAN2 排他制御領域 /dev/vdb1 フェイルオーバ DB 領域 /dev/vdb2 失敗!? 管理用 LAN eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 eth3 192.168.131.23 pm2 HW 制御ボード 192.168.131.21 51

3 STONITH を設定してみよう 52

STONITH でよくある 質問 53

スプリットブレイン時は 相撃ちにならないの? 54

STONITH による相撃ち? あいつ死んだな.. あいつ死んだな.. STONITH STONITH pm1 HW 制御ボード 両サーバとも 切断 ダウン pm2 HW 制御ボード 55

これは 残念ながらあり得ます 56

が! STONITHプラグイン stonith-helper を併用すれば起きません 57

Pacemaker デモリソース構成 (STONITH) これら 3 つの STONITH リソースをグループ設定し エスカレーション処理させます stonith-helper 相撃ち防止対策 サーバ断確認を行います libvirt フェンシング対象のゲスト OS を virsh コマンドによりホスト OS 経由で強制断します meatware ユーザによる停止通知を行います 58

STONITH エスカレーション処理 STONITH 実行 Pacemaker grpstonith プラグイン 1 (priority=1) どれかでOK だったら STONITH 対象 成功! プラグイン 2 (priority=2) プラグイン 3 (priority=3) プラグイン3は実行されない 59

STONITH 処理 エスカレーション順番 grpstonith stonith-helper (priority=1) libvirt (priority=2) meatware (priority=3) 1. 生死確認と相撃ち防止対策 2. フェンシング 3. 停止通知 60

各プラグインの 詳細 説明します! 61

stonith-helper プラグイン /usr/lib64/stonith/plugins/external/stonith-helper 標準 STONITH 機能で足りない機能をお助けするプラグインです Linux-HA Japan で開発 pm_extras として Pacemaker リポジトリパッケージに同梱 サーバ生死確認 対向サーバの死活確認として ping によるネットワーク疎通が確認できるか否かでノードの停止を判定 相撃ち防止 指定されたコマンドの結果から STONITH 実行サーバがリソースを稼動させているサーバか否かを判断し reset 処理実行を遅延させることで相撃ちを回避 62

stonith-helper サーバ生死確認 ping により対向サーバの生死を確認します 対向サーバに付与されているすべての IP を設定します サービス LAN pm1 ping HW 制御ボード 192.168.131.21 eth0 192.168.0.22 ping ping eth1 192.168.10.22 ping eth2 192.168.20.22 ping eth3 192.168.131.22 インターコネクト LAN1 インターコネクト LAN2 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 管理用 LAN eth0 192.168.0.23 eth1 192.168.10.23 すべて ping 応答無の場合 eth2 192.168.20.23 電源 OFF 状態と判断し STONITH 成功と判定 eth3 192.168.131.23 pm2 HW 制御ボード 192.168.131.21 63

stonith-helper 設定例 primitive prmst1-1 stonith:external/stonith-helper \ params \ priority="1" \ priority に優先順位を設定します stonith-timeout="40" \ stonith-helperは1が推奨です hostlist="pm1" \ dead_check_target="192.168.131.21 192.168.0.22 192.168.10.22 192.168.20.22 192.168.131.22" \ standby_wait_time="10" \ standby_check_command="/usr/sbin/crm_resource -r -r prmex -W -W grep -q -q `hostname`" \ dead_check_target : には サーバに付与されるすべての ( 省略省略 ) IPアドレスを設定します : OSで設定されるIPのみではなく HW 制御ボードのIPも設定します 64

stonith-helper 相撃ち防止方法 自分にリソースがある場合は即時 STONITH 実行 STONITH STONITH ZZZ 自分にリソースが無い場合は sleep pm1 リソース 切断 pm2 HW 制御ボード YOU RE WINNER! HW 制御ボード sleep している隙に強制電源断が完了 65

stonith-helper 設定例 primitive prmst1-1 stonith:external/stonith-helper \ params \ priority="1" \ stonith-timeout="40" ドを設定します \ hostlist="pm1" 返り値が偽 \ (0 以外 ) だった場合 dead_check_target="192.168.131.21 192.168.0.22 192.168.10.22 192.168.20.22 192.168.131.22" \ standby_wait_time="10" \ standby_check_command="/usr/sbin/crm_resource -r -r prmex -W -W grep -q -q `hostname`" \ : ( 省略省略 ) : standby_check_command には 判定コマン standby_wait_time 秒 sleep します 判定コマンドに crm_resouce コマンドを使用し prmex ( ディスク排他制御 sfex) リソースが自ノードにあるかどうか判定させています 66

libvirt プラグイン /usr/lib64/stonith/plugins/external/libvirt ゲストと hypervisor を管理するためのコマンド virsh を使用し フェンシングを実現するプラグインです reset 処理で実行されるコマンド # virsh -c -c qemu+ssh://< ホスト IP>/system destroy < ゲスト名 > # virsh -c -c qemu+ssh://< ホスト IP>/system start < ゲスト名 > status( 状態確認 ) 処理で実行されるコマンド # virsh -c -c qemu+ssh://< ホスト IP>/system version 67

libvirt フェンシング方法 pm1 ( ゲスト ) eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 eth3 demo ( ホスト ) br0 192.168.0.21 ( サービス LAN 用ブリッジ ) br1 192.168.10.21 ( インターコネクト LAN1 用ブリッジ ) 192.168.131.22 管理 LAN 経由でフェンシング (destroy) を実行 br2 192.168.20.21 ( インターコネクトLAN2 用ブリッジ ) pm2 ( ゲスト ) eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 eth3 192.168.131.23 STONITH br3 192.168.131.21 ( 管理 LAN 用ブリッジ ) virsh -c qemu+ssh://192.168.131.21/system destroy pm1 eth0 68

libvirt 設定例 primitive prmst1-2 stonith:external/libvirt \ params \ priority="2" \ priority に優先順位を設定します stonith-timeout="300" \ libvirtは2が推奨です hostlist="pm1" \ hypervisor_uri="qemu+ssh://192.168.131.21/system" \ op op start interval="0s" timeout="60s" on-fail="restart" \ op op monitor interval="3600s" timeout="60s" on-fail="restart" \ op op stop interval="0s" timeout="60s" on-fail="ignore" ハイパーバイザへの接続 URI を設定します xen+ssh://< ホスト IP>/ と URI を設定すれば Xen 環境も可能です 69

meatware プラグイン /usr/lib64/stonith/plugins/stonith2/meatware.so 保守者から Pacemaker へ対向サーバを 停止した事を通知するインタフェース用 のプラグインです 70

STONITH エスカレーション処理 STONITH 実行 Pacemaker 成功とは成功するまで返しません繰り返し! grpstonith プラグイン 1 (priority=1) プラグイン 2 (priority=2) プラグイン 3 (priority=3) 全部 NG だったら.. STONITH 対象サーバ 71

つまり STONITHは 成功 しなければ状態遷移しません 72

meatware 処理フロー STONITH 実行 Pacemaker grpstonith stonith-helper (priority=1) libvirt (priority=2) meatware STONITH 対象 (priority=3) サーバを手動で電源 OFF STONITH 対象サーバ ping OK のインターフェースが 1 個以上あった virsh による destroy 処理に失敗 73

手動による電源 OFF 後 meatclient コマンドで Pacemaker に停止完了通知を行います # meatclient -c -c < 電源 OFF したサーバ名 > -w -w WARNING! If If node node "< "< サーバ名 >" >" has has not not been been manually power-cycled or or disconnected from from all all shared resources and and networks, data data on on shared disks may may become corrupted and and migrated services might not not work work as as expected. Please verify that that the the name name or or address above corresponds to to the the node node you you just just rebooted. PROCEED? [yn] [yn] y を入力し停止停止完了を通知 74

meatware 処理フロー Pacemaker 成功! grpstonith stonith-helper (priority=1) libvirt (priority=2) meatware (priority=3) # meatclient -c < サーバ名 > -w PROCEED? [yn] y STONITH 対象サーバ ping Ok のインターフェースが 1 個以上あった virsh による destroy 処理に失敗 75

meatware 設定例 primitive prmst1-3 stonith:meatware \ params \ priority="3" \ priority に優先順位を設定します stonith-timeout="600" \ meatwareは3が推奨です hostlist="pm1" \ op op start interval="0s" timeout="60s" \ op op monitor interval="3600s" timeout="60s" \ op op stop interval="0s" timeout="60s" このタイムアウト経過後 次のプラグインにエスカレーションされてしまうため 電源 OFF するタイミングがあるように長めに設定してください 76

その他の STONITH 基本設定 説明します! 77

STONITH 設定 (Cluster Option) ### Cluster Option ### property no-quorum-policy="ignore" \ stonith-enabled="true" \ startup-fencing="false" \ stonith-timeout="710s" \ crmd-transition-delay="2s" STONITH を有効にする場合は true に変更します STONITH 処理の全体タイムアウトを設定します 各 STONITH プラグインのタイムアウトを合算した値 ( 例 :40(stonith-helper) +60(libvirt) +600(meatware)=700) より大きい値を設定します 78

STONITH 設定 (Group Configuration) ### ### Group Configuration ### ### group grpstonith1 \ prmst1-1 \ prmst1-2 \ prmst1-3 group grpstonith2 \ prmst2-1 \ prmst2-2 \ prmst2-3 pm1 を STONITH するグループ名を grpstonith1 とし prmst1-1(stonith-helper) prmst1-2(libvirt) prmst1-3(meatware) をグループ設定します 79

STONITH リソースの配置 grpstonith2 は pm2をフェンシングするstonithリソースのためpm1で稼動 サービス LAN grpstonith1 は pm1をフェンシングするstonithリソースのためpm2で稼動 pm1 eth0 192.168.0.22 grpstonith2 eth1 192.168.10.22 stonith-helper eth2 libvirt 192.168.20.22 インターコネクト LAN1 インターコネクト LAN2 eth0 192.168.0.23 grpstonith1 eth1 192.168.10.23 stonith-helper eth2 192.168.20.23 libvirt pm2 meatware HW 制御ボード eth3 192.168.131.21 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 meatware eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 80

STONITH 設定 (Resource Location) ### ### Resource Location ### ### location rsc_location-grpstonith1-2 grpstonith1 \ rule -INFINITY: #uname eq eq pm1 pm1 location rsc_location-grpstonith2-3 grpstonith2 \ rule -INFINITY: #uname eq eq pm2 pm2 -INFINITY の重み付けを付与することにより pm2 STONITH 用リソースグループ grpstonith2 を pm2 で動作させないように Location 設定します 81

STONITH 設定 (stop on-fail 属性 ) primitive prmpg ocf:heartbeat:pgsql \ params pgctl="/usr/pgsql-9.2/bin/pg_ctl" psql="/usr/pgsql- 9.2/bin/psql" pgdata="/var/lib/pgsql/9.2/data" pgdba="postgres" pgport="5432" pgdb="template1" \ op op start interval="0s" timeout="60s" on-fail="restart" \ op op monitor interval="10s" timeout="60s" on-fail="restart" \ op op stop interval="0s" timeout="10s" on-fail="fence" サービス系リソースの stop の on-fail 属性を fence に変更します 82

STONITH リソース状態表示 サービス系リソースと同様に Started サーバ名 と表示されます # crm_mon Resource Group: grpstonith1 prmst1-1 (stonith:external/stonith-helper): Started pm2 pm2 prmst1-2 (stonith:external/libvirt): Started pm2 pm2 prmst1-3 (stonith:meatware): Started pm2 pm2 prmst1-1: stonith-helper prmst1-2: libvirt prmst1-3: meatware 83

デモ 2 [ デモ 2] デモ環境を STONITH 有設定に 変更してみます! 84

4 いろいろ故障デモします! 85

[ デモ 3] STONITH 有環境でリソース停止タイムアウトの故障デモします! 86

停止タイムアウト時 STONITH 実行直前は こんな表示になります pm2 # crm_mon Node pm1 (73200749-ec8b-4861-9786-f6475d8ae8c8): UNCLEAN (online) Online: [ pm2 ] STONITH 対象サーバが UNCLEAN と表示されます 87

STONITH 実行後に OFFLINE となります pm2 # crm_mon Online: [ pm2 ] OFFLINE: [ pm1 ] 88

リソース故障時 停止タイムアウト デモ 3 擬似故障 # kill -9 postgresql 親プロセス pm1 故障 仮想 IP 192.168.0.100 eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 停止タイムアウト サービス LAN インターコネクト LAN1 インターコネクト LAN2 eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 DC pm2 STONITH HW 制御ボード 192.168.131.21 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 89

[ デモ 4] スプリットブレインの 故障デモします! 90

スプリットブレイン時 STONITH 実行直前は こんな表示になります お互いに対向サーバを UNCLEAN と表示します pm1 # crm_mon Node pm2 (e470e941-7c11-42a4-9180-1256f0c1f22d): UNCLEAN (offline) Online: [ pm1 ] pm2 # crm_mon Node pm1 (73200749-ec8b-4861-9786-f6475d8ae8c8): UNCLEAN (online) Online: [ pm2 ] 91

スプリットブレイン デモ 4 擬似故障 pm1# ifdown eth1; ifdown eth2 サービス LAN DC pm1 eth0 192.168.0.22 eth1 192.168.10.22 eth2 192.168.20.22 インターコネクト LAN1 故障 インターコネクト LAN2 仮想 IP 192.168.0.100 eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 pm2 STONITH HW 制御ボード 192.168.131.21 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 eth3 192.168.131.23 HW 制御ボード 192.168.131.21 管理用 LAN 92

[ デモ 5] STONITH 最後の砦 meatware の デモします! 93

meatware 起動時は こんなログ表示になります /var/log/pm_logconv.out Aug 1 18:45:14 pm2 info: Try to STONITH (RESET) the Node pm1 to prmst1-1 (external/stonith-helper) (pid=9400) Aug 1 18:45:18 pm2 ERROR: Failed to STONITH the Node pm1 with one local device (exitcode=5). Will try to use the next local device. Aug 1 18:45:18 pm2 info: Try to STONITH (RESET) the Node pm1 to prmst1-2 (external/libvirt) (pid=9636) Aug 1 18:45:20 pm2 ERROR: Failed to STONITH the Node pm1 with one local device (exitcode=5). Will try to use the next local device. Aug 1 18:45:20 pm2 info: Try to STONITH (RESET) the Node pm1 to prmst1-3 (meatware) (pid=9669) 94

meatclient 実行時は こんなログ表示になります /var/log/pm_logconv.out Aug 1 18:50:49 pm2 info: Succeeded to STONITH (RESET) the Node pm1 by Node pm2. 95

スプリットブレイン & STONITH 失敗 デモ 5 pm1 eth0 192.168.0.22 eth1 192.168.10.22 meatware の出番 eth2 192.168.20.22 サービス LAN インターコネクト LAN1 故障 インターコネクト LAN2 擬似故障 pm1# ifdown eth1; ifdown eth2 仮想 IP 192.168.0.100 eth0 192.168.0.23 eth1 192.168.10.23 eth2 192.168.20.23 DC pm2 STONITH HW 制御ボード 192.168.131.21 フェンシング失敗 eth3 192.168.131.22 排他制御領域 /dev/vdb1 DB 領域 /dev/vdb2 管理用 LAN eth3 192.168.131.23 HW 制御ボード 192.168.131.21 96

5 Linux-HA Japan について 97

Linux-HA Japan URL http://linux-ha.sourceforge.jp/ http://sourceforge.jp/projects/linux-ha/ Pacemaker 情報の公開用として随時情報を更新中です このサイトより Pacemaker リポジトリパッケージがダウンロード可能です 98

Nightly ビルド公開中! Linux-HA Japan では いち早く最新のパッケージを使ってみたいという方のために RHEL6(x86_64) および互換 OS 向けの Nightly ビルド rpm を公開中です http://linux-ha.sourceforge.jp/nightly/ ビルド対象のパッケージは Pacemaker 1.0 系 ( 安定版 ) 1.1 系 ( 開発版 ) および周辺コンポーネントです Nightly ビルドの情報については 以下 URL を参照してください http://linux-ha.sourceforge.jp/wp/archives/3710 99

Linux-HA Japan メーリングリスト 日本における HA クラスタについての活発な意見交換の場として Linux-HA Japan 日本語メーリングリスト も開設しています Linux-HA-Japan ML では Pacemaker Heartbeat3 Corosync DRBD など HA クラスタに関連する話題は歓迎! ML 登録用 URL http://linux-ha.sourceforge.jp/ の メーリングリスト をクリック ML アドレス linux-ha-japan@lists.sourceforge.jp スパム防止のために 登録者以外の投稿は許可制です 100

ご清聴ありがとう ございました Linux-HA Japan 検索 http://linux-ha.sourceforge.jp/ 101