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

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

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

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

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

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

Zabbix で PostgreSQL を監視! pg_monz のご紹介 Zabbix Conference Japan 年 11 月 20 日 SRA OSS, Inc. 日本支社マーケティング部

PostgreSQLによる クラスタ運用および負荷分散術 SRA OSS, Inc. 日本支社 OSS事業本部 星合 拓馬

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

pgpool-ii で PostgreSQL のクラスタを楽々運用しよう OSC Tokyo 2014/12/12 SRA OSS, Inc. 日本支社マーケティング部 OSS 技術グループ 長田 悠吾

スライド 1

100123SLES11HA.pptx

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

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

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

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

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

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

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

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

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

GresCube で快適 PostgreSQL ライフ 2013 年 11 月 8 日 NTT データ藤井雅雄 PostgreSQL カンファレンス 2013 Copyright 2013 NTT DATA Corporation

DataKeeper for Windows リリースノート

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

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


1. はじめに (1) 本書の位置づけ 本書ではベジフルネット Ver4 の導入に関連した次の事項について記載する ベジフルネット Ver4 で改善された機能について 新機能の操作に関する概要説明 ベジフルネット Ver4 プログラムのインストールについて Ver4 のインストール手順についての説明

SigmaSystemCenter ネットワークアダプタ冗長化構築資料 第 3 版

クラスタ環境でのデータベースのアップグレード

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

クラスタ構築手順書

自己紹介 長田悠吾 ( ナガタユウゴ ) SRA OSS, Inc. 日本支社 マーケティング部 OSS 技術グループ pgpool-ii 開発者 PostgreSQL 関連の技術調査 OSS の技術サポート PostgreSQL の開発にも参加 Copyright 2015 SRA OSS, In

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

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

スライド 1

PostgreSQL 10 で作るクラスタ構成 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

スライド 0

<506F C392E30838C A B E E2E2E>

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

クローン機能について 保存先が HDLH シリーズの場合マスタースレーブファイル 設定のコピー HDLH シリーズ 台をそれぞれマスター / スレーブとして構成し マスターの設定やファイルをスレーブに保存します ファイルの保存はレプリケーション機能を利用しておこなわれます 社内 LAN マスター故障

PowerPoint プレゼンテーション

変更履歴 項番版数内容更新日 版新規作成 2013 年 11 月 18 日 1

PostgreSQL Plus 管理者ガイド

クラスタ環境でのデータベースのアップグレード手順

Cuoreテンプレート

CLUSTERPRO for Linux PostgreSQL HowTo

Arcserve Replication/High Availability 製品の仕組み

Congress Deep Dive

pg_monz 監視アイテム一覧 :Template App PostgreSQL Template App PostgreSQL アプリケーション LLD アイテムトリガー監視タイプ更新間隔ヒストリトレンドデフォルト説明ステータス pg.get pgsql.get.pg.bgwriter Zabb

2010年4月~6月 協業実績報告

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

コンポーネントのインストール レプリケーション運用開始までの流れ 1 コンポーネントのインストール 2 シナリオの設定 3 同期処理 レプリケーション開始!! CA ARCserve Replication/HA 構成例 管理用 PC CA ARCserve RHA マネージャ CA ARCserv

0. 目次 Ahkun EX Antimalware ソフト使用マニュアルデスクトップ上での操作方法 1. インストールについて P.3 2. 操作画面の起動方法 P.6 3. アップデートの手動実行 P.7 4. リアルタイム監視の操作 P.9 5. プログラム情報の表示方法 P ソフ

内容環境... 3 対応 OS の変更... 3 関連アプリケーションの追加... 4 機能追加... 5 グラフ機能... 5 稼働率... 8 サービス一括削除 自動復旧エスカレーションコマンド AWS カスタムメトリックス監視 NRPE 任意監視... 11

ESMPRO/ServerManager Ver. 6 変更履歴

共有フォルダ接続手順 1 共有フォルダ接続ツールのダウンロード 展開 CSVEX のトップページから共有フォルダ接続ツールの zip ファイルをダウンロードします ダウンロードした zip ファイルを右クリックして すべて展開 を選択します (Windows 環境では zip ファイルを解凍しなくて

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

CLUSTERPRO MC ProcessSaver 2.1 for Windows 構築ガイド 2016(Mar) NEC Corporation はじめに 責任範囲 適用範囲 概要 事前準備 クラスタ設定

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

CLUSTERPRO MC ProcessSaver 1.0 for Windows 構築ガイド 2012(Sep) NEC Corporation はじめに責任範囲適用範囲概要事前準備クラスタ設定

1. 概要 この章では HDE Controller X LG Edition をお使いの方に向けて LGWAN 接続に特化した設定の説明をします HDE Controller X LG Edition 以外の製品をご利用のお客様はこの章で解説する機能をお使いになれませんのでご注意ください 452

MIRACLE System Savior操作手順書

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

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

MIRACLE MH for SNMP サポート SLA( サービスレベルアグリーメント ) ML-CS-0747 本書は サイバートラスト株式会社 ( 以下 サイバートラスト ) が MIRACLE MH for SNMP サポート ( 以下当サポートサービス ) の内容について説明するものである

通信確保と衛星電話実習 ( 業務調整員 ) 参考資料 ワイドスター Ⅱ を活用したデータ通信に関する簡易説明書 第 1.0 版 平成 2 4 年 3 月株式会社 NTTドコモ関西支社法人営業部ソリューションビジネス部 Copyright 2012 NTT docomo Inc. All Rights

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

MC3000一般ユーザ利用手順書

WebARENA SuiteX V2 EC-CUBE 2.13 インストールマニュアル ( 標準 MySQL+ 非 SSL ) 作成 :2014 年 2 月 Ver.1.1

AN424 Modbus/TCP クイックスタートガイド CIE-H14

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

intra-mart ワークフローデザイナ

TFTP serverの実装

Hinemos ミッションクリティカルオプションとは Copyright 2015 NTT DATA Corporation 2

intra-mart Accel Platform

マニュアル訂正連絡票

NFS On CLUSTERPRO for Linux

intra-mart WebPlaform / AppFramework

まえがき 2011 年 11 月 1 日 ver1.0 [ 初版 ] 本手順書では vcenter サーバが管理する仮想コンピュータを Acronis Backup & Recovery 11 エージェント for ESX(i)( バーチャルアプライアンス ) を用いてバックアップする手順をご紹介し

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

Microsoft Word - nvsi_060132jp_datadomain_restoreDRAFT4.doc

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

ヘルスアップWeb 簡単操作ガイド

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

Microsoft Word - XOOPS インストールマニュアルv12.doc

QNAP TurboNAS Container Station 設定手順書

Transcription:

HA クラスタで PostgreSQL を高可用化 ( 後編 ) ~ レプリケーション編 ~ 2012 年 9 月 29 日しくみ + アプリケーション勉強会 松尾隆利 NTT OSS センタ

はじめに 今回は HA クラスタで PostgreSQL を高可用化 の後編です ストリーミングレプリケーション構成のクラスタリングのお話がメインです 前編の入門編を復習されているのを前提にお話します http://linux-ha.sourceforge.jp/wp/wp-content/uploads/pacemaker_20120526jpug.pdf レプリケーション自体のお話も省きます 2

開発経緯 昔 ~ 昔 PostgreSQL 8.3 + 独自パッチで同期レプリケーション機能を実装し Heartbeat(Pacemaker の前身 ) で HA クラスタ化を実現する PG-REX というプロジェクトがあったそうな 2010 年 2011 年 PostgreSQL 9.0 で非同期レプリケーション実装 同期レプリケーションを実現する独自パッチ + Pacemaker 用 RA 開発でクラスタリング実現 9.0の非同期レプリケーションでも動くように手直しし Pacemakerコミュニティへ投稿 リジェクト PostgreSQL 9.1 で同期レプリケーション実装 新たにPacemaker 用 RAを開発しクラスタリング実現 Pacemakerコミュニティ意見も反映し投稿! 絶賛!(tremendous job!!) 2012 年 4 月 13 日コミュニティのリポジトリにマージ 5 月 16 日 resource-agents 3.9.3 として無事リリース Linux-HA Japan のリポジトリパッケージ 1.0.12-1.2 に同梱 3

前編の構成 ~Active/Standby 構成 ~ PostgreSQL のデータは共有ディスク上に配置し 2 台のサーバ間で共有 通常は Active サーバでサービスを提供し Active サーバ故障時は Standby サーバが Active となりサービスを提供 Active マウント DB データ Standby 故障発生 故障 フェイルオーバ DB データ Active マウント 共有ディスク 共有ディスク 4

今回の構成 ~Master/Slave 構成 ~ PostgreSQL のデータはそれぞれのサーバのローカルディスク上に配置し PostgreSQL のストリーミングレプリケーション機能を用いて共有 通常は Master サーバでサービスを提供し Master サーバ故障時は Slave サーバが Master となりサービスを継続 Master Slave レプリケーション DBデータ DBデータ 故障発生 故障 DB データ フェイルオーバ DB データ Master ローカルディスク ローカルディスク ローカルディスク ローカルディスク 5

Active/Standby vs Master/Slave Active/Standby Master/Slave ハードウェア費用 共有ディスク ( 相当のもの ) 必須 運用のしやすさデータは 1 箇所のみ 2 箇所のデータの整合性を考慮 データの安全性サービス継続性 DB 性能負荷分散実績 最新データは共有ディスク上のみフェイルオーバ時にリカバリに時間を要するレプリケーションのオーバヘッドなし構成上不可能 最新データは2 箇所に分散 Slave 故障がサービスに影響 ( 同期レプリケーション使用時 ) 共有ディスク構成をとれない某高速ストレージを活用可 ReadOnlyクエリを Slaveで処理可能これから それぞれ一長一短 サービスの要件に応じて選択すること 6

レプリケーション構成の HA クラスタ化 3 大機能 1 フェイルオーバ Master 故障発生 故障 フェイルオーバ Master Master DB データ 同期レプリケーション DB データ Slave Slave 故障発生 Master 古 DB データ DB データ 2 同期 非同期の切替 非同期レプリケーション 故障 3 データの状態管理 DB データ 古 DB データ 7

基本構成 サービス提供用 LAN 負荷分散しないならば削除可 仮想 IP1 (vip-master) PostgreSQL (Master) 制御 pgsql RA Read/Write Pacemaker レプリケーション用 LAN 仮想 IP2 (vip-rep) レプリケーションはこの仮想 IP 宛に接続 Pacemaker 用 LAN Read Only 仮想 IP3 (vip-slave) PostgreSQL (Slave) 制御 pgsql RA Pacemaker STONITH 用 LAN 次ページからは省略サーバ #1 サーバ #2 ローカルディスク ローカルディスク 8

基本動作 1 : Master のフェイルオーバ vip-master vip-master vip-slave vip-master vip-slave PostgreSQL 1 故障 (Master) vip-rep PostgreSQL (Slave) PostgreSQL 故障 2 停止 (Master) vip-rep vip-rep PostgreSQL 5(Slave) (Master) pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker サーバ #1 サーバ #2 サーバ #1 サーバ #2 #2 古 4 1 #1 の PostgreSQL の故障を検知 2 #1 の PostgreSQL を停止 3 仮想 IP(vip-master, vip-rep, vip-slave) を停止 4 #1 のデータが古いことを記録 5 #2 の PostgreSQL を Master に昇格 (promote) 6 #2 で仮想 IP(vip-master, vip-rep, vip-slave) を起動 9

基本動作 2 : 同期 非同期の切替 2 3 検知 vip-master vip-slave vip-slave vip-master 5 vip-slave PostgreSQL (Master) vip-rep 同期 PostgreSQL 1 故障 (Slave) PostgreSQL (Master) vip-rep 7 非同期 同期 PostgreSQL 故障 4 停止 (Slave) pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker サーバ #1 サーバ #2 サーバ #1 サーバ #2 6 古 1 Slave の故障発生 2 Master のトランザクション停止 ~ レプリケーションのタイムアウト待ち ~ 3 #1 でレプリケーション切断を検知 SELECT * from pg_stat_replication 4 #2 の PostgreSQL を停止 5 #2 の仮想 IP(vip-slave) を #1 に付け替え 6 #2 のデータが古いことを記録 7 #1 の PostgreSQL を非同期に変更 トランザクション再開 10

ここまでが基本動作次はフェイルオーバ後の復旧 11

TimelineID PostgreSQL が Slave から Master へ昇格した際インクリメントされる数値 TimelineID が異なるとレプリケーション接続ができない フェイルオーバ時 Master レプリケーション Slave 故障 フェイルオーバ Slave Master 5 5 5 5 6 異なる TimelineID をそろえるには新 Master のデータを旧 Master へコピーする必要あり 12

運用 1: フェイルオーバ後の復旧 PostgreSQL 1 故障復旧 (Master) vip-rep vip-master vip-slave PostgreSQL (Slave) (Master) vip-slave PostgreSQL 4 (Slave) 6 5 同期レプリケーション vip-rep vip-master vip-slave PostgreSQL (Master) pgsql RA 故 Pacemaker 3 フラグ クリアロック削除 pgsql pgsql RA RA Pacemaker サーバ #1 サーバ #2 #2 Pacemaker サーバ #1 pgsql RA pgsql RA Pacemaker サーバ #2 古 2 データ同期 新 1 故障の復旧 2 #1 のデータを #2 と同期 TimelineID がそろう 3 #1 のロックファイル削除と Pacemaker 上の故障フラグをクリア ( 手動 ) 4 #1 の PostgreSQL を Slave で起動 5 レプリケーション開始 非同期で接続 同期に切替 6 #2 の仮想 IP(vip-slave) を #1 に付け替え 13

次は起動方法 14

PostgreSQL と Pacemaker の状態遷移 Master を直接起動可能 recovery.conf なしで起動 STOP recovery.conf ありで起動停止 Slave pg_ctl promote Master 停止 STOP start stop Slave promote demote Master PostgreSQL の Master は必ず Slave を経由 (recovery.conf は RA が作成 ) して起動される Master 起動時も TimelineID がインクリメントされる 15

運用 2 : 起動 vip-slave vip-master 3 仮想 IP 起動 vip-slave vip-master 6 vip-slave PostgreSQL 停止 (Master) vip-rep 停止 PostgreSQL 停止 (Master) vip-rep PostgreSQL (Slave) 停止 2 起動 pgsql RA pgsql RA pgsql RA 5 起動 Pacemaker Pacemaker Pacemaker サーバ #1 サーバ #2 1 新古 サーバ #1 サーバ #2 4 データ同期新古 1 データが新しい方のサーバーを選択 2 選択したサーバの Pacemaker を起動 Slave で起動 Master に遷移 TimelineID がずれる 3 仮想 IP が #1 で起動 ( 手動 ) 4 #2のデータを#1と同期 TimelineIDがそろう ( 手動 ) 5 Pacemaker 起動 レプリケーション開始 6 #1の仮想 IP(vip-slave) を #2に付け替え 16

ここからは状態遷移詳細 17

その前に用語を整理 PostgreSQL と Pacemaker の状態遷移は一致しないため 二者を区別するために以下を使い分け PostgreSQL の状態を表す用語 PRI HS STOP : Primary(Master) 状態 : Hot Standby(Slave) 状態 : 停止している状態 Pacemaker の状態を表す用語 Master : アプリケーションをMasterとして管理している状態 Slave : アプリケーションをSlaveとして管理している状態 Stopped : アプリケーションを停止として管理している状態 18

PostgreSQL と Pacemaker の状態遷移 ( 用語区別版 ) start (recovery.conf なしで起動 ) STOP start(recovery.conf ありで起動 ) stop HS pg_ctl promote PRI stop この部分を Pacemaker の状態遷移とマッピング Stopped start stop Slave promote demote Master 19

状態遷移のマッピング Stopped start stop Slave promote demote Master STOP start stop HS promote PRI 停止済のため何もしない STOP ( アンマッチ ) stop この状態は Slave の監視が動くと故障となるためこの状態に留まることはできない 20

HS の複数状態 PostgreSQL の HS には複数の状態を管理 1. PRI へ未接続 HS:alone 2. PRI へ接続中 a. 同期レプリケーション以外 b. 同期レプリケーション中 HS:(others) HS:sync HS:(others) は以下の二つの状態をとる HS:connected HS:async Pacemaker でこれら状態を "pgsql-status" 属性として管理 リソース ID 名を pgsql とした場合 21

状態遷移のマッピング ( 改良前 ) Stopped Slave Master STOP HS PRI STOP 22

状態遷移のマッピング ( 改良後 ) Stopped Slave Master STOP HS: (others) HS: alone HS: sync PRI STOP 他のノードに PRI がおらず 自分のデータが最新の場合 23

データの新旧判断方法 HS のデータが最新かどうかを判断する方法 PRI 存在時 PRI との接続状態を基にデータの状態を記録 PRI 存在時は自分が PRI に昇格することはないため記録のみ PRI 故障時 PRI 故障直前の PRI との接続状態を基に判断 初期起動時 (PRI が一度も存在したことがない時 ) 他に HS がいる場合 他の HS 間でデータの新旧を比較して判断 他に HS がいない場合 自分が最新だと判断 24

データの状態 PRI 存在時に記録する HS のデータ状態 1. PRI へ未接続 DISCONNECT 2. PRI へ接続中 a. 同期レプリケーション以外 STREAMING ASYNC ( 例 ) b. 同期レプリケーション中 STREAMING SYNC 古いデータ 最新データ PRI 時 LATEST pg_stat_replication ビューから取得 Pacemaker でこれら状態を "pgsql-data-status" 属性として管理 リソース ID 名を pgsql とした場合 25

pgsql-status と pgsql-data-status 属性の違い pgsql-status PostgreSQL の現在の実行状態を示す 停止 : STOP HS で動作 : HS:alone, HS:async, HS:sync PRI で動作 : PRI 不明時 : UNKNOWN pgsql-data-status PRI との関係によって決まるデータの状態 PRI 未接続時 : DISCONNECTED HS 時 : STREAMING ASYNC, STREAMING SYNC 等 PRI 時 : LATEST 用途 HS の現在の状態把握 HS の状態と他のリソースとの連携 用途 データの新旧状態記録 Master への昇格可否の判断 PRI 故障時 PRI 故障直前の状態が残る PostgreSQL の実行状態と必ずしも一致しない pgsql-status=hs:alone で pgsql-data-status = LATEST があり得る 26

状態遷移のマッピング ( 条件整理後 ) Stopped Slave Master STOP HS: (others) HS: alone HS: sync PRI STOP 他のノードにPRIがおらず 自分のpgsql-data-status が最新 (LATEST or STREAMING SYNC) の場合 初期起動時は他のノードとデータ新旧を比較した結 27

Pacemaker の設定例 28

リソース構成例 ( シンプル版 ) ping 監視先 192.168.103.1 サービス提供用 LAN (192.168.103.0/24) pm01 vip-rep が故障しても Master 側のサービスに大きな影響がないので 故障時は再起動を試みる設定にする NW 監視 (clnpingd) eth3 グループ (master-group) 仮想 IP (vip-master) 192.168.103.110 仮想 IP (vip-rep) 192.168.104.110 PostgreSQL (mspostgresql) Master eth4 レプリケーション用 LAN (192.168.104.0/24) master-group と PostgreSQL の Master は同じノード上で起動させる制約を追加 pgsql-status が HS:sync または PRI の場合に起動 eth4 eth3 PostgreSQL (mspostgresql) Slave 仮想 IP (vip-slave) 192.168.103.111 pm02 NW 監視 (clnpingd) Pacemaker 用 LAN シンプル版のため STONITH は省略 29

Pacemaker 設定例 ( シンプル版 ) 1/2 property \ no-quorum-policy="ignore" \ stonith-enabled="false" \ crmd-transition-delay="0s" rsc_defaults \ resource-stickiness="infinity" \ migration-threshold="1" ms mspostgresql pgsql \ meta \ master-max="1" \ master-node-max="1" \ clone-max="2" \ clone-node-max="1" \ notify="true" group master-group \ vip-master \ vip-rep \ meta \ ordered="false" clone clnpingd \ pingcheck primitive vip-master ocf:heartbeat:ipaddr2 \ params \ ip="192.168.103.110" \ nic="eth3" \ cidr_netmask="24" \ op start timeout="60s" interval="0s" on-fail="restart" \ op monitor timeout="60s" interval="10s" on-fail="restart" \ op stop timeout="60s" interval="0s" on-fail="block" PostgreSQL の Master/Slave 化設定 サービス用仮想 IP とレプリケーション用仮想 IP を master-group としてグループ化 サービス用仮想 IP(vip-master) 設定 設定詳細は字が小さくて見えないと思うので 資料アップロード後確認してください primitive vip-rep ocf:heartbeat:ipaddr2 \ params \ ip="192.168.104.110" \ nic="eth4" \ cidr_netmask="24" \ meta \ migration-threshold="0" \ op start timeout="60s" interval="0s" on-fail="stop" \ op monitor timeout="60s" interval="10s" on-fail="restart" \ op stop timeout="60s" interval="0s" on-fail="block" primitive vip-slave ocf:heartbeat:ipaddr2 \ params \ ip="192.168.103.111" \ nic="eth3" \ cidr_netmask="24" \ meta \ resource-stickiness="1" \ op start timeout="60s" interval="0s" on-fail="restart" \ op monitor timeout="60s" interval="10s" on-fail="restart" \ op stop timeout="60s" interval="0s" on-fail="block" レプリケーション用仮想 IP(vip-rep) 設定 HS (read only) 用仮想 IP(vip-slave) 設定 primitive pgsql ocf:heartbeat:pgsql \ params \ pgctl="/usr/pgsql-9.1/bin/pg_ctl" \ psql="/usr/pgsql-9.1/bin/psql" \ pgdata="/var/lib/pgsql/9.1/data/" \ rep_mode="sync" \ node_list="pm01 pm02" \ restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" \ primary_conninfo_opt="keepalives_idle=60 \ keepalives_interval=5 keepalives_count=5" \ master_ip="192.168.104.110" \ stop_escalate="0" \ op start timeout="30s" interval="0s" on-fail="restart" \ op stop timeout="30s" interval="0s" on-fail="block" \ op monitor timeout="30s" interval="11s" on-fail="restart" \ op monitor timeout="30s" interval="10s" on-fail="restart" role="master" \ op promote timeout="30s" interval="0s" on-fail="restart" \ op demote timeout="30s" interval="0s" on-fail="block" \ op notify timeout="60s" interval="0s" PostgreSQL メイン設定 30

Pacemaker 設定例 ( シンプル版 ) 2/2 primitive pingcheck ocf:pacemaker:pingd \ params \ name="default_ping_set" \ host_list="192.168.103.1" \ multiplier="100" \ op start timeout="60s" interval="0s" on-fail="restart" \ op monitor timeout="60s" interval="2s" on-fail="restart" \ op stop timeout="60s" interval="0s" on-fail="ignore" ### Resource Location ### location rsc_location-1 mspostgresql \ rule -inf: not_defined default_ping_set or default_ping_set lt 100 location rsc_location-2 vip-slave \ rule 200: pgsql-status eq HS:sync \ rule 100: pgsql-status eq PRI \ rule -inf: not_defined pgsql-status \ rule -inf: pgsql-status ne HS:sync and pgsql-status ne PRI HS (read only) 用仮想 IP (vip-slave) 起動条件の設定 ### Resource Colocation ### colocation rsc_colocation-1 inf: mspostgresql colocation rsc_colocation-2 inf: master-group clnpingd mspostgresql:master ### Resource Order ### order rsc_order-1 0: clnpingd mspostgresql symmetrical=false order rsc_order-2 inf: mspostgresql:promote master-group:start symmetrical=false order rsc_order-3 0: mspostgresql:demote master-group:stop symmetrical=false Master と仮想 IP の同居制約設定 Master と仮想 IP の起動 停止順番設定 商用利用時は STONITH やディスク監視等 その他必要なリソースは別途追加すること 31

重要な点だけピックアップ 32

PostgreSQL メイン設定部 ~pgsql RA~ primitive pgsql ocf:heartbeat:pgsql \ params \ pgctl="/usr/pgsql-9.1/bin/pg_ctl" \ psql="/usr/pgsql-9.1/bin/psql" \ pgdata="/var/lib/pgsql/9.1/data/" \ rep_mode="sync" \ node_list="pm01 pm02" \ restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" \ primary_conninfo_opt="keepalives_idle=60 \ master_ip="192.168.104.110" \ stop_escalate="0" \ keepalives_interval=5 keepalives_count=5" \ op start timeout="30s" interval="0s" on-fail="restart" \ op stop timeout="30s" interval="0s" on-fail="block" \ op monitor timeout="30s" interval="11s" on-fail="restart" \ op monitor timeout="30s" interval="10s" on-fail="restart" role="master" \ op promote timeout="30s" interval="0s" on-fail="restart" \ op demote timeout="30s" interval="0s" on-fail="block" \ op notify timeout="60s" interval="0s" 各コマンドや PostgreSQL データの場所を指定 同期レプリケーション使用 ( 指定しない場合は通常の Act-Stadby 動作 ) レプリケーションに参加するサーバーの全ホスト名 vip-rep の IP recovery.conf の restore_command 設定 recovery.conf の primary_conninfo に追加するオプション フェイルオーバを高速化するために Master 停止時に immediate shutdown を使用 monitor(master 時 ) promote, demote notify の動作定義 33

仮想 IP vip-slave (ReadOnly 用 ) の起動条件設定部 location rsc_location-2 vip-slave \ rule 200: pgsql-status eq HS:sync \ rule 100: pgsql-status eq PRI \ rule -inf: not_defined pgsql-status \ rule -inf: pgsql-status ne HS:sync and pgsql-status ne PRI HS:sync の方がスコアが大きい (200 > 100) ため 正常な同期レプリケーション時は Slave 側で それ以外は PRI (Master) 側で起動 pgsql-status = HS:sync ならば起動可 pgsql-status = PRI ならば起動可 vip-slave が起動するノードが固定されないように resource-stickiness は "1" にしておくこと primitive vip-slave ocf:heartbeat:ipaddr2 \ params \ ip="192.168.103.111" \ nic="eth3" \ cidr_netmask="24" \ meta \ resource-stickiness="1" \ 34

仮想 IP vip-rep ( レプリケーション用 ) の再起動設定 primitive vip-rep ocf:heartbeat:ipaddr2 \ params \ ip="192.168.104.110" \ nic="eth4" \ cidr_netmask="24" \ meta \ migration-threshold="0" \ op start timeout="60s" interval="0s" on-fail="stop" \ op monitor timeout="60s" interval="10s" on-fail="restart" \ op stop timeout="60s" interval="0s" on-fail="block" レプリケーション用仮想 IP は 監視で故障発生しても再起動を試みる設定にする 0 は回数制限なし 35

Master と仮想 IP(vip-master, vip-rep) の起動 停止順番設定部 promote 後に仮想 IP を起動 order rsc_order-2 inf: mspostgresql:promote master-group:start symmetrical=false 仮想 IP を含むグループ order rsc_order-3 0: mspostgresql:demote master-group:stop symmetrical=false demote(postgresql 停止 ) 完了後に仮想 IP を停止 先に仮想 IP を停止すると レプリケーション接続が切断され レプリケーションのパケットが届かなくなるのを防ぐため先に demote する 36

同期レプリケーション時の Pacemaker 表示例 (crm_mon Af) Online: [ pm01 pm02 ] vip-slave (ocf::heartbeat:ipaddr2): Started pm02 Resource Group: master-group vip-master (ocf::heartbeat:ipaddr2): Started pm01 vip-rep (ocf::heartbeat:ipaddr2): Started pm01 Master/Slave Set: mspostgresql Masters: [ pm01 ] Slaves: [ pm02 ] Clone Set: clnpingd Started: [ pm01 pm02 ] Node Attributes: * Node pm01: + default_ping_set : 100 + master-pgsql:0 : 1000 + pgsql-data-status : LATEST + pgsql-status : PRI + pgsql-master-baseline : 00000000150000B0 + pm02-eth1 : up + pm02-eth2 : up * Node pm02: + default_ping_set : 100 + master-pgsql:1 : 100 + pgsql-data-status : STREAMING SYNC + pgsql-status : HS:sync + pm01-eth1 : up + pm01-eth2 : up Migration summary: * Node pm01: Copyright(c)2012 * Node NTT, Inc. pm02: All Rights Reserved. 仮想 IP の状態 PostgreSQL の Master/Slave の状態 pm01 ノードの pgsql-status, pgsql-data-status の状態 promote 直前の xlog の位置 pm02 ノードの pgsql-status, pgsql-data-status の状態 37

PostgreSQL の設定ポイント 38

postgresql.conf ( 重要点のみ ) listen_address = * Slave には仮想 IP(vip-master) が存在しないため特定 IP で Listen はできない synchronous_standby_names はコメントアウト Pacemaker が同期 非同期を切り替えるためユーザ設定不可 RA が /var/lib/pgsql/tmp/rep_mode.conf を include する設定を自動追加 restart_after_crash = off Pacemaker が PostgreSQL の状態管理をするため 自動再起動は off replication_timeout = 20s ( ぐらい?) 誤検知しない程度に短くする Slave 故障時に Master のトランザクションが止まる時間に影響 hot_standby = on Slave を監視するために必須 max_standby_streaming_delay = -1 max_standby_archive_delay = -1 Slave の監視クエリがキャンセルされるのを防ぐ 39

postgresql.conf ( その他 ) wal_level = hot_standby wal_keep_segments = 64 ( ぐらい?) 小さくし過ぎると レプリケーションに必要な wal がすぐに削除されてしまう wal_receiver_status_interval = 5s ( ぐらい?) replication_timeout より短くすること hot_standby_feedback = on archive_mode = on 40

ロックファイル 41

ロックファイル PRI を停止すると残るファイル データ不整合を避けるために導入 本ファイルが存在すると PostgreSQL は起動できない デフォルトパス : /var/lib/pgsql/tmp/pgsql.lock HS がいない場合 PRI 正常停止時に削除される 同期レプリケーションの意味 コミット成功は必ず両サーバにデータが存在することを保証 つまりコミット失敗時はデータがコミットされたかどうかは不定 最悪両サーバ間でデータに差異が発生 PostgreSQL はこの差異を検知できないため起動をロック 42

不整合の発生パターン例 問題が発生するパターン PRI に 7 のデータ書き込み PRI が 7 のデータを HS へ転送中に PRI が故障 (HS にパケット未達 ) PRI 1 2 3 4 5 6 7 HS アプリケーション 1 2 3 4 5 6 NG フェイルオーバ発生 HS は 6 までのデータで PRI に昇格し 7', 8' のデータを書き込み HS PRI 1 2 3 4 5 6 7' 8' 旧 PRI を HS として組み込み 旧 PRI には転送し損ねた 7 のデータが存在するため 8' からレプリケーションが開始される PRI HS 1 2 3 4 5 6 7' 8' 9' 1 2 3 4 5 6 7 8' 9' 不整合発生 43

ロックファイル導入後 回避パターン PRI へ昇格時にロックファイル作成 PRI に 7 のデータ書き込み PRI が 7 のデータを HS へ転送中に PRI が故障 (HS にパケット未達 ) フェイルオーバ発生 ( 図省略 ) PRI 1 2 3 4 5 6 7 HS アプリケーション 1 2 3 4 5 6 NG 旧 PRI を HS として組み込み HS 起動時にロックファイルがあるため起動エラーに PRI HS 1 2 3 4 5 6 7' 8' 9' 1 2 3 4 5 6 7 起動エラー ロックファイルがある場合は 新 PRI のデータを新 HS へコピーしロックファイルを削除する手順が必要 44

HA クラスタ化まとめ 3 大機能 Master のフェイルオーバ レプリケーションの同期 非同期の切替 データの状態管理 Pacemaker 設定のポイント レプリケーション用の仮想 IP(vip-rep) が必要 必要ならば Slave に ReadOnly クエリ負荷分散用仮想 IP を設定可能 運用時の注意 TimelineID がずれているとレプリケーションできないため注意 フェイルオーバ後は TimelineID のずれに加えデータ不整合も発生する可能性あり ロックファイルがある場合 不整合が発生していないデータに入れ替えること 45

動作環境 Pacemaker 1.0.12 以上推奨 1.0.11 だと Master/Slave バグ回避設定が必要 resource-agents 3.9.3 以上 Linux-HA Japan Pacemaker リポジトリパッケージ 1.0.12-1.2 以上に同梱 (2012 年 7 月リリース ) 色々バグフィックスしているので pgsql RA だけ最新に入れ替えた方が無難 PostgreSQL 9.1 以上 9.0 では動きません 9.2 では動いたとの報告あり 46

参考 ソースコード (GitHub 上の RA 直リンク ) URL : https://github.com/clusterlabs/resource-agents/blob/master/heartbeat/pgsql ドキュメントおよび設定例 (GitHub の Wiki) https://github.com/t-matsuo/resource-agents/wiki/ Pacemaker ダウンロード インストール http://linux-ha.sourceforge.jp/ 47