Your SlideShare is downloading. ×
0
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

HAクラスタで PostgreSQLレプリケーション構成の 高可用化

3,337

Published on

Postgre sql day2012

Postgre sql day2012

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,337
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
36
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. HAクラスタで PostgreSQLレプリケーション構成の 高可用化 2012/11/30 PostgreSQL Day 2012 松尾隆利 1
  • 2. レプリケーション対応機能開発経緯 ~ 2009年 ■ PG-REX というプロジェクトが存在 PG• PostgreSQL 8.3 + 独自パッチ 独自パッチ パッチで同期レプリケーションを実装 • HeartbeatでHAクラスタ化 Heartbeat 2010年 ■ PostgreSQL9.0 + Pacemaker PostgreSQL9.0 Pacemakerで開発 • 同期レプリケーション実現の独自パッチと、HAクラスタ化用独自パッチあり 同期レプリケーション実現の独自パッチと、HAクラスタ化用独自パッチあり レプリケーション実現 パッチと クラスタ化用独自 → 制御スクリプト(pgsql RA)をコミュニティへ投稿するもリジェクト 2011年 ■ PostgreSQL9.1 + Pacemakerで開発 (社外からも応援あり) PostgreSQL9.1 • RAほぼ作り直し → コミュニティ絶賛!(tremendous job !!) 2012年 ■ 4月13日 コミュニティのリポジトリにマージ! ■ 5月16日 resource-agents 3.9.3 としてリリース Pacemakerのコンポーネント名 Copyright(c)2012 NTT, Inc. All Rights Reserved. 2
  • 3. HAクラスタの今までの構成 ~Active/Standby 構成~ PostgreSQLのデータは共有ディスク上に配置し、2台のサーバ間 で共有 通常はActiveサーバでサービスを提供し、Activeサーバ故障時は StandbyサーバがActiveとなりサービスを提供 (フェイルオーバ) フェイルオーバ Standby Active Active 故障 故障発生 マウント マウント DBデータ DBデータ 共有ディスク 共有ディスク Copyright(c)2012 NTT, Inc. All Rights Reserved. 3
  • 4. レプリケーション構成 ~Master/Slave 構成~ PostgreSQLのデータはローカルディスク上に配置し、 PostgreSQLのストリーミングレプリケーション機能を用いて共有 通常はMasterサーバでサービスを提供し、Masterサーバ故障時は SlaveサーバがMasterに昇格しサービスを継続 フェイルオーバ Slave Master Master 故障 レプリケーション DBデータ ローカルディスク DBデータ ローカルディスク Copyright(c)2012 NTT, Inc. All Rights Reserved. 故障発生 DBデータ ローカルディスク DBデータ ローカルディスク 4
  • 5. Active/Standby vs Master/Slave Active/Standby Master/Slave ハードウェア費用 共有ディスク(相当のもの)必須 運用のしやすさ データは1箇所のみ データの安全性 最新データは 共有ディスク上のみ サービス継続性 フェイルオーバ時に リカバリに時間を要する Slave故障がサービスに影響 DB性能 レプリケーションの オーバヘッドなし 共有ディスク構成をとれない 高速ストレージを活用可 負荷分散 構成上不可能 実績 2箇所のデータの整合性を考慮 最新データは2箇所に分散 (同期レプリケーション使用時) ReadOnlyクエリを Slaveで処理可能 これから・・・・ それぞれ一長一短。サービスの要件に応じて選択すること。 Copyright(c)2012 NTT, Inc. All Rights Reserved. 5
  • 6. レプリケーション構成のHAクラスタ化 3大機能 ①フェイルオーバ フェイルオーバ Master 故障発生 Master 故障 Slave 古 DBデータ DBデータ ②同期・非同期の切替 同期・非同期の DBデータ DBデータ Slave 故障発生 非同期 Master レプリケーション ③ データの状態管理 ③ データの状態管理 ③ データの状態管理 ③ データの状態管理 Master 同期 レプリケーション 故障 DBデータ Copyright(c)2012 NTT, Inc. All Rights Reserved. 古 DBデータ 6
  • 7. 基本構成 負荷分散 しないならば 削除可 サービス提供用LAN Read Only Read/Write 仮想IP3 (vip-slave) 仮想IP1 (vip-master) PostgreSQL (Master) レプリケーション用 レプリケーション用LAN 仮想IP2 (vip-rep) 制御 制御 pgsql RA Pacemaker PostgreSQL (Slave) pgsql RA Pacemaker用 Pacemaker用LAN Pacemaker STONITH 用LAN サーバ#1 ローカルディスク Copyright(c)2012 NTT, Inc. All Rights Reserved. ※次ページからは省略 ページからは省略 サーバ#2 ローカルディスク 7
  • 8. 基本動作1 : Masterのフェイルオーバ vip-master vip-master PostgreSQL ①故障 (Master) vip-master vip-master vip-slave vip-rep PostgreSQL 故障 ②停止 (Master) PostgreSQL (Slave) vip-slave vip-slave vip-rep vip-rep PostgreSQL (Master) ⑤(Slave) pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#1 サーバ#1 サーバ#2 サーバ#2 サーバ#2 古 ① #1のPostgreSQLの故障を検知 Copyright(c)2012 NTT, Inc. All Rights Reserved. ② ③ ④ ⑤ ⑥ ④ #1のPostgreSQLを停止 仮想IP(vip-master, vip-rep, vip-slave)を停止 #1のデータが古いことを記録 #2のPostgreSQLをMasterに昇格(promote) #2で仮想IP(vip-master, vip-rep, vip-slave) を起動 8
  • 9. 基本動作2 : 同期・非同期の切替 ② vip-slave ③検知 vip-master PostgreSQL (Master) vip-slave 同期 vip-rep PostgreSQL ①故障 (Slave) ⑤ vip-slave vip-master PostgreSQL (Master) ⑦ 非同期 同期 vip-rep PostgreSQL 故障 ④停止 (Slave) pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#2 サーバ#1 サーバ#2 サーバ#2 ⑥ ① ② ~ ③ Slaveの故障発生 Masterのトランザクション停止 レプリケーションのタイムアウト待ち~ #1でレプリケーション切断を検知 SELECT * from pg_stat_replication Copyright(c)2012 NTT, Inc. All Rights Reserved. ④ ⑤ ⑥ ⑦ 古 古 #2のPostgreSQLを停止 #2の仮想IP(vip-slave)を#1に付け替え #2のデータが古いことを記録 #1のPostgreSQLを非同期設定に変更 → トランザクション再開 9
  • 10. ここまでが基本動作 次はフェイルオーバ後の復旧 Copyright(c)2012 NTT, Inc. All Rights Reserved. 10
  • 11. TimelineID PostgreSQLがSlaveからMasterへ昇格した際インクリメントされる数値 TimelineIDが異なるとレプリケーション接続ができない フェイルオーバ時 フェイルオーバ時 フェイルオーバ Master Slave レプリケーション Slave→ Slave→Master 故障 5 5 5 5 6 異なる TimelineIDをそろえるには 新Masterのデータを旧Masterへコピーする必要あり Copyright(c)2012 NTT, Inc. All Rights Reserved. 11
  • 12. 運用1: フェイルオーバ後の復旧 ⑥ vip-master vip-master pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker サーバ#1 サーバ#1 サーバ#1 古 vip-rep vip-rep 故 故 ③ フラグ・クリア ロック削除 ② データ同期 ⑤ 同期 レプリケーション PostgreSQL PostgreSQL (Slave) (Master) PostgreSQL ④ (Slave) PostgreSQL vip-rep (Master) pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker サーバ#2 サーバ#2 サーバ#2 サーバ#1 サーバ#2 新 ① 故障の復旧 ② #1のデータを#2と同期 → TimelineIDがそろう ③ #1のロックファイル削除と Pacemaker上の故障フラグを クリア Copyright(c)2012 NTT, Inc. All Rights Reserved. vip-slave vip-slave vip-slave vip-slave vip-slave vip-slave PostgreSQL ①故障復旧 故障 故障 (Master) vip-master (手動) ④ #1のPostgreSQLをSlaveで起動 ⑤ レプリケーション開始 → 非同期で接続→同期設定に切替 ⑥ #2の仮想IP(vip-slave)を#1に付け替え 12
  • 13. 次は起動方法 Copyright(c)2012 NTT, Inc. All Rights Reserved. 13
  • 14. PostgreSQLとPacemakerの状態遷移 Masterを直接 起動可能 recovery.conf なしで起動 recovery.conf ありで起動 pg_ctl promote Slave STOP Master 停止 停止 × start promote Slave STOP stop Master demote PostgreSQLのMasterは必ずSlaveを経由して起動される PostgreSQLのMasterは必ずSlaveを経由して起動される → Master起動時もTimelineIDがインクリメントされる → Master起動時もTimelineIDがインクリメントされる Copyright(c)2012 NTT, Inc. All Rights Reserved. 14
  • 15. 運用2 : 起動 vip-slave ③仮想IP起動 vip-slave vip-master PostgreSQL 停止 ) (Master) ②起動 ⑥ vip-slave vip-master vip-rep PostgreSQL 停止 停止 (Master) ) vip-rep PostgreSQL 停止 (Slave) ⑤起動 pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#1 サーバ#2 ① 新 古 ① データが新しい方のサーバーを選択 ② 選択したサーバのPacemakerを起動 → Slaveで起動 → Masterに遷移 → TimelineIDがずれる ③ 仮想IPが#1で起動 Copyright(c)2012 NTT, Inc. All Rights Reserved. 新 (手動) サーバ#2 ④ データ同期 古 ④ #2のデータを#1と同期 (手動) → TimelineIDがそろう ⑤ Pacemaker起動 → レプリケーション開始 ⑥ #1の仮想IP(vip-slave) を#2に付け替え 15
  • 16. 高可用化まとめ 3大機能 ■ Masterのフェイルオーバ ■ レプリケーションの同期・非同期の切替 ■ データの状態管理 運用時の注意 ■ TimelineIDがずれているとレプリケーションできないため注意 • 難しくてよくわからない場合は、 『Slave 起動前に Master データのコピーが必要』 と覚えておけばOK ※ 単純にTimelineID を合わせるためには、WALアーカイブのみをコピーすれば可能だが、 フェイルオーバするとサーバ間のデータの整合性が崩れる可能性があり、これを避けるためにも 全データのコピーを推奨 Copyright(c)2012 NTT, Inc. All Rights Reserved. 16
  • 17. デモ Copyright(c)2012 NTT, Inc. All Rights Reserved. 17
  • 18. デモ環境 サービス提供用LAN 仮想IP1 (vip-master) PostgreSQL (msPostgresql) <Master> Pacemaker ホスト名 : pm01 ローカルディスク Copyright(c)2012 NTT, Inc. All Rights Reserved. 仮想IP3 (vip-slave) レプリケーション用 レプリケーション用LAN 仮想IP2 (vip-rep) Pacemaker用 Pacemaker用LAN PostgreSQL (msPostgresql) <Slave> Pacemaker ホスト名 : pm02 ローカルディスク 18
  • 19. Pacemaker状態表示例 (crm_mon –Af 実行時) Online: [ pm01 pm02 ] vipvip-slave (ocf::heartbeat:IPaddr2): masterResource Group: master-group vipvip-master (ocf::heartbeat:IPaddr2): vipvip-rep (ocf::heartbeat:IPaddr2): Master/Slave Set: msPostgresql Masters: [ pm01 ] Slaves: [ pm02 ] Clone Set: clnPingd Started: [ pm01 pm02 ] Node Attributes: * Node pm01: + default_ping_set master+ master-pgsql:0 pgsql-data+ pgsql-data-status pgsql+ pgsql-status pgsql-master+ pgsql-master-baseline + pm02-eth1 pm02pm02+ pm02-eth2 * Node pm02: + default_ping_set master+ master-pgsql:1 pgsql-data+ pgsql-data-status pgsql+ pgsql-status pm01+ pm01-eth1 pm01+ pm01-eth2 Migration summary: * Node pm01: * NTT, Inc. All Copyright(c)2012Node pm02: Rights Reserved. Started pm02 Started pm01 Started pm01 仮想IPの 状態 PostgreSQLの の Master/Slaveの状態 の状態 : : : : : : : 100 1000 LATEST PRI 00000000150000B0 up up : : : : : : 100 100 STREAMING|SYNC HS:sync up up pm01ノードの ノードのPostgreSQLと と ノードの データの状態 promote直前の 直前のxlogの位置 の位置 直前の pm02ノードの ノードのPostgreSQLと ノードの と データの状態 19
  • 20. Pacemaker状態表示 省略後(今回のデモ用表示) 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 ] --------------------------------------------------------* Node pm01: + pgsql-data-status : LATEST + pgsql-status : PRI * Node pm02: + pgsql-data-status : STREAMING|SYNC + pgsql-status : HS:sync --------------------------------------------------------* Node pm01: * Node pm02: Copyright(c)2012 NTT, Inc. All Rights Reserved. 仮想IPの 状態 PostgreSQLの の Master/Slaveの状態 の状態 pm01ノードの ノードのPostgreSQLと ノードの と データの状態 pm02ノードの ノードのPostgreSQLと ノードの と データの状態 故障状態が表示される 20
  • 21. 【デモ】 Slaveの故障 pm02のPostgreSQLのプロセスをkill # killall -9 postgres vip-slaveの移動 vip-slave vip-master vip-slave Started pm02 ↓ Started pm01 故障 PostgreSQL (Master) 非同期 設定に切替 (表示上わからない) Pacemaker PM01 vip-rep PostgreSQL (停止) 故障 検知 Pacemaker PM02 データ状態の 記録 STREAMING|SYNC ↓ DISCONNECTED Copyright(c)2012 NTT, Inc. All Rights Reserved. 21
  • 22. 【デモ】 Slaveの復旧 pm02のフェイルカウントクリア # crm resource cleanup msPostgresql pm02 vip-slaveの移動 vip-slave vip-slave vip-master PostgreSQL (Master) 同期 設定に切替 vip-rep Pacemaker PostgreSQL (Slave) Pacemaker PM01 PM02 Started pm01 ↓ Started pm02 データ状態の 記録 DISCONNECTED ↓ STREAMING|SYNC Slave起動 Copyright(c)2012 NTT, Inc. All Rights Reserved. HS:sync 22
  • 23. 【デモ】 Masterの故障 pm01のPostgreSQLのプロセスをkill # killall -9 postgres 故障 検知 vip-masterの移動 vip-master vip-master vip-slave 故障 vip-repの移動 Started pm01 ↓ Started pm02 データ状態の 記録 LATEST ↓ DISCONNECTED Copyright(c)2012 NTT, Inc. All Rights Reserved. PostgreSQL (停止) Pacemaker PM01 vip-rep vip-rep PostgreSQL (Master) Started pm01 ↓ Started pm02 Masterに昇格 Pacemaker PM02 23
  • 24. PostgreSQL制御スクリプト (pgsql RA) の最近の動き resource-agent 3.9.4 (11/23リリース) での変更内容 ■ Pacemaker 1.1.x の仕様変更に追従 • Pacemaker 1.0.x との互換は保持 ■ recovery.confの、archive_cleanup_commandや recovery_end_commandを設定可能に ■ promote時にPostgreSQLをpromoteするのではなく、 recovery.confを削除して再起動させることでMaster化可能に • Timeline ID のインクリメント防止可能に – ただしexperimental 機能 ■ その他細かなバグ修正 Copyright(c)2012 NTT, Inc. All Rights Reserved. 24
  • 25. 動作環境 Pacemaker 1.0.12 以上推奨 resource-agents 3.9.3 以上必須 ■ Linux-HA Japan Pacemakerリポジトリパッケージ 1.0.12-1.2 以上に同梱 (2012年7月リリース) PostgreSQL 9.1 以上 ■ 9.0では動きません Copyright(c)2012 NTT, Inc. All Rights Reserved. 25
  • 26. 参考 ソースコード (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/ PG-REX(PostgreSQL + Pacemaker)利用マニュアル ■ http://sourceforge.jp/projects/pg-rex/releases/55691 Copyright(c)2012 NTT, Inc. All Rights Reserved. 26
  • 27. Question? Copyright(c)2012 NTT, Inc. All Rights Reserved. 27

×