Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Slony-IによるPostgreSQLオンラインアップグレード実験.pdf

0d91e4e792fb936633033b38e57f28c8?s=47 tom--bo
May 28, 2016
470

 Slony-IによるPostgreSQLオンラインアップグレード実験.pdf

0d91e4e792fb936633033b38e57f28c8?s=128

tom--bo

May 28, 2016
Tweet

Transcript

  1. Slony-IによるPostgreSQL オンラインアップグレード実験 ⼤大塚知亮亮 (@tom__bo) 9.3.x から9.4.x へのReplication and Switchover

  2. ⾃自⼰己紹介 u ⼤大塚知亮亮 u Id:tom__bo (@tom__bo_CS) u 都内⼤大学院⽣生(M1) u アルバイト@はてな

  3. ⾃自⼰己紹介 u ⼤大塚知亮亮 u Id:tom__bo (@tom__bo_CS) u 都内⼤大学院⽣生(M1) u アルバイト@はてな

  4. Outline u PostgreSQLのアップグレード u Slony-Iとは? u Slony-Iによるレプリケーション u 実験 u

    経過 u 今後の課題
  5. PostgreSQLのアップグレード u とあるサービス Master Slave Slav ・・・ Version 9.3 Slave

    N Streaming Replication u 9.5へのアップグレード u UPSERT使いたい u BRINインデックス u WAL圧縮 ダウンタイムなしで だったら。。。
  6. PostgreSQLのアップグレード u メジャーバージョン間でのレプリケーション u 標準の⽅方法のみでアップグレードする場合 1. 全体を停⽌止 2. 同期を待つ 3.

    全サーバでアップグレード 4. 統計情報の再構成 5. レプリケーション再開 v9.3 v.9.4 PostgreSQL 9.3.11 Major version Minor version 時間がかかる
  7. PostgreSQLのアップグレード u アップグレードにかかる時間の⽬目安(?) 参考:http://blog.endpoint.com/2015/07/how-fast-is-pgupgrade-anyway.html

  8. PostgreSQLのアップグレード u サードパーティ製のツールを使う u トリガーベースのレプリケーション u Slony-I u Buccardo u

    Londiste u Logical decodingを利利⽤用したレプリケーション u BDR 変更更を検知してツール間でデータをやり取りする メジャーバージョン間でレプリケーション出来る トリガ⽤用のテーブルを利利⽤用しなくて良良い(⾼高効率率率) PostgreSQL 9.4以上が必要
  9. PostgreSQLのアップグレード u サードパーティ製のツールを使う u トリガーベースのレプリケーション u Slony-I u Buccardo u

    Londiste u Logical decodingを利利⽤用したレプリケーション u BDR 今回実験 変更更を検知してツール間でデータをやり取りする メジャーバージョン間でレプリケーション出来る トリガ⽤用のテーブルを利利⽤用しなくて良良い(⾼高効率率率) PostgreSQL 9.4以上が必要
  10. Slony-Iとは u PostgreSQLのコアメンバでもあるJan Wieck⽒氏が開発した”master to multiple slaves” レプリケーションシステム(最新はv2.2.4) u トリガーベースなので、メジャーバージョン間でのレプリケーションが可能

    u テーブルごとにレプリケーション出来る u Primary keyのないテーブルはレプリケーション出来ない u DDLによる変更更・ラージオブジェクトはレプリケーション出来ない u DDLは専⽤用のコマンドを使うことでslaveにも適⽤用できる u 277ページに渡るPDFドキュメントがある(英語のみ) u 9.3.xまでのサポートしか公表されていない u 開発リリースが⽌止まっている(2015.2⽉月頃)
  11. Slony-Iとは Master Slave Table 1 Table 2 Table 1 Table

    2 Trigger Slonik command Operation Slonik Daemon Slonik Daemon Database Database
  12. Slony-Iによるレプリケーション u ⽅方針 9.3 9.3 ・・・ 9.3 Streaming Replication アップグレード⽅方針

    1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  13. Slony-Iによるレプリケーション u ⽅方針 9.3 9.3 ・・・ 9.3 Streaming Replication 9.4

    ・・・ 9.4 Slony-I Replication アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  14. Slony-Iによるレプリケーション u ⽅方針 9.3 9.3 ・・・ 9.3 Streaming Replication 9.4

    ・・・ 9.4 Slony-I Replication アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  15. Slony-Iによるレプリケーション u ⽅方針 9.3 9.4 ・・・ 9.4 Slony-I Replication アップグレード⽅方針

    1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  16. Slony-Iによるレプリケーション u ⽅方針 9.4 9.3 ・・・ 9.4 Slony-I Replication Swich

    Over アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  17. Slony-Iによるレプリケーション u ⽅方針 9.4 9.4 ・・・ 9.4 Slony-I Replication 9.3

    removed アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  18. Slony-Iによるレプリケーション u ⽅方針 9.4 9.4 ・・・ 9.4 Slony-I Replication Application

    Stop! アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  19. Slony-Iによるレプリケーション u ⽅方針 9.4 9.4 ・・・ 9.4 Application Stop! Streaming

    Replication アップグレード⽅方針 1. Slony-Iによるレプリケーションを追加 u 9.4.xのサーバを導⼊入 2. 標準レプリケーションを⽌止める 3. Slony-Iのスイッチオーバでマスタを ⼊入れ替える 4. 旧マスタを外す(アップグレード完成) 5. (以降降必要であれば) 全体を⽌止めてデータの同期 6. 標準のレプリケーションに戻す
  20. 実験内容 u 実験環境 u VirtualBox 上の Debian8.x u Mac book(2010)

    u CPU (6 core x 2) u Memory 48GB u 1環境に 2 core, 4GB memory 程度度 u 概要 u Pgbenchで3台のPostgreSQLサーバ を⽤用意 u 9.3.xをマスタとし、Slony-Iによる レプリケーションで9.4.xのサーバ 2台をスレーブとする。 u スレーブの1台とマスタをスイッチ オーバし、レプリケーションが継 続出来ているか確認する。 ⼿手順はブログでも書いています http://tombo2.hatenablog.com/entry/2016/05/18/140926
  21. 実験内容 u Slonikコマンドスクリプト u Setting.sh … クラスタの設定 u Repli_start.sh …

    レプリ開始 u Switch_over.sh … スイッチオーバ u Repli_stop.sh … レプリ u 使⽤用するSlonikコマンド u cluster name u node x admin conninfo u init cluster u create/move set u set add table u store node/path u subscribe/lock set u sync u wait for event
  22. 実験 u Setting.sh(説明のために1部のみ抜き出しています) #!/bin/sh slonik <<_EOF_ cluster name = $CLUSTER;

    node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER'; node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$SLONY_USER'; node 3 admin conninfo = 'dbname=$DBNAME3 host=$HOST3 user=$SLONY_USER'; init cluster ( id = 1, comment = 'Node 1' ); set add table ( set id = 1, origin = 1, id = 1, fully qualified name = 'public.pgbench_accounts', comment = 'Table accounts' ); store node ( id = 2, comment = 'Node 2' , event node=1); store path ( server = 1, client = 2, conninfo = 'dbname=$DBNAME1 host=$HOST1, user=$SLONY_USER'); _EOF_ CLUSTER=slony_example DBNAME1=pgbench DBNAME2=pgbench DBNAME3=pgbench HOST1=192.168.32.11 HOST2=192.168.32.12 HOST3=192.168.32.13 SLONY_USER=pgsql PGBENCH_USER=pgbench
  23. 実験 u Slonyの起動 (master)$ slon $CLUSTERNAME "dbname=$MASTERDBNAME user=$REPLICATIONUSER host=$MASTERHOST" (slave1)$

    slon $CLUSTERNAME "dbname=$SLAVEDBNAME user=$REPLICATIONUSER host=$SLAVEHOST_1" (slave2)$ slon $CLUSTERNAME "dbname=$SLAVEDBNAME user=$REPLICATIONUSER host=$SLAVEHOST_2"
  24. 実験 u repli_start.sh(説明のために1部のみ抜き出しています) #!/bin/sh slonik <<_EOF_ cluster name = $CLUSTER

    node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER'; node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$SLONY_USER'; node 3 admin conninfo = 'dbname=$DBNAME3 host=$HOST3 user=$SLONY_USER subscribe set ( id = 1, provider = 1, receiver = 2, forward = yes); _EOF_ CLUSTER=slony_example DBNAME1=pgbench DBNAME2=pgbench DBNAME3=pgbench HOST1=192.168.32.11 HOST2=192.168.32.12 HOST3=192.168.32.13 SLONY_USER=pgsql PGBENCH_USER=pgbench
  25. 実験 u switch_over.sh(説明のために1部のみ抜き出しています) #!/bin/sh slonik <<_EOF_ cluster name = $CLUSTER;

    node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER'; node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$SLONY_USER'; node 3 admin conninfo = 'dbname=$DBNAME3 host=$HOST3 user=$SLONY_USER'; lock set (id = 1, origin = 1); sync (id = 1); wait for event (origin = 1, confirmed = 2, wait on = 2); wait for event (origin = 1, confirmed = 3, wait on = 3); move set (id = 1, old origin = 1, new origin = 2); _EOF_ CLUSTER=slony_example DBNAME1=pgbench DBNAME2=pgbench DBNAME3=pgbench HOST1=192.168.32.11 HOST2=192.168.32.12 HOST3=192.168.32.13 SLONY_USER=pgsql PGBENCH_USER=pgbench
  26. 経過 u 9.3 から 9.4のレプリケーション・スイッチオーバに成功 (Pgbenchのデータスキーマ) u 9.3 から 9.5

    では unsupportedが出る。 u レプリは出来たけど、その後のコマンドが応答しない(要検証) u <stdin>:54: Possible unsupported PostgreSQL version (90503) 9.5, defaulting to 8.4 support u データ転送はかなり⾼高速100万件程度度のデータなら⼀一瞬で追いつく u (仮想環境上でpgbenchの4テーブル) u 標準のレプリに戻すなら完全無停⽌止は不不可能
  27. 課題 u 標準のレプリケーションに戻せるか? u 各処理理にどれくらいの時間がかかるか不不明 u 負荷具合・データ量量・サーバのスペック等による、、、 u 実機に近い環境で実験 u

    Slony-Iでレプリ出来ないschemaがないか u レプリケーションによるmasterへの負荷は? u slaveノードの遅延は? u Switch overにどれくらい時間がかかるか?
  28. 参考 u PostgreSQL Documents u https://www.postgresql.org/docs/9.3/static/pgbench.html u https://www.postgresql.org/docs/9.3/static/upgrading.html u PostgreSQL

    wiki u https://wiki.postgresql.org/wiki/UDR_Online_Upgrade#PostgreSQL_Online_Upgrade u Slony-I Documents u http://www.slony.info/ u http://slony.info/adminguide/2.2/doc/adminguide/slony.pdf u 2ndQuadrant(BDR) u http://blog.2ndquadrant.com/progress-online-upgrade/ u Slony-I example u http://d.hatena.ne.jp/ttshrk/20110414/1302760971 u http://raghavt.blogspot.jp/2014/12/switchoverswitchback-in-slony-i-while.html u http://raghavt.blogspot.jp/2012/07/simple-slony-i-replication-setup.html u http://comments.gmane.org/gmane.comp.db.postgresql.slony1.general/11725 u Slony紹介 u https://thinkit.co.jp/story/2010/10/19/1811 u http://news.mynavi.jp/column/yetanother/031/
  29. 参考