Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Slony-IによるPostgreSQLオンラインアップグレード実験.pdf
tom--bo
May 28, 2016
1
520
Slony-IによるPostgreSQLオンラインアップグレード実験.pdf
tom--bo
May 28, 2016
Tweet
Share
More Decks by tom--bo
See All by tom--bo
txkv_v06_pub.pdf
tombo
0
22
B-trees
tombo
2
520
Group Replication and DB State Machine Approach
tombo
2
500
Introduction to orchestrator (MySQL)
tombo
3
450
look into binlogs
tombo
1
1.5k
About MySQL Weekly
tombo
0
420
sysbench-mysql-tester
tombo
0
1k
About table-size-estimator
tombo
1
330
rinkou01_Cooperation Emergence under Resource-Constrained Peer Punishment
tombo
1
78
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.6k
Navigating Team Friction
lara
177
12k
Scaling GitHub
holman
453
140k
Become a Pro
speakerdeck
PRO
6
3.2k
Build your cross-platform service in a week with App Engine
jlugia
221
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
Designing with Data
zakiwarfel
91
4.2k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Stop Working from a Prison Cell
hatefulcrawdad
263
18k
Building a Modern Day E-commerce SEO Strategy
aleyda
6
4.5k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
How GitHub (no longer) Works
holman
298
140k
Transcript
Slony-IによるPostgreSQL オンラインアップグレード実験 ⼤大塚知亮亮 (@tom__bo) 9.3.x から9.4.x へのReplication and Switchover
⾃自⼰己紹介 u ⼤大塚知亮亮 u Id:tom__bo (@tom__bo_CS) u 都内⼤大学院⽣生(M1) u アルバイト@はてな
⾃自⼰己紹介 u ⼤大塚知亮亮 u Id:tom__bo (@tom__bo_CS) u 都内⼤大学院⽣生(M1) u アルバイト@はてな
Outline u PostgreSQLのアップグレード u Slony-Iとは? u Slony-Iによるレプリケーション u 実験 u
経過 u 今後の課題
PostgreSQLのアップグレード u とあるサービス Master Slave Slav ・・・ Version 9.3 Slave
N Streaming Replication u 9.5へのアップグレード u UPSERT使いたい u BRINインデックス u WAL圧縮 ダウンタイムなしで だったら。。。
PostgreSQLのアップグレード u メジャーバージョン間でのレプリケーション u 標準の⽅方法のみでアップグレードする場合 1. 全体を停⽌止 2. 同期を待つ 3.
全サーバでアップグレード 4. 統計情報の再構成 5. レプリケーション再開 v9.3 v.9.4 PostgreSQL 9.3.11 Major version Minor version 時間がかかる
PostgreSQLのアップグレード u アップグレードにかかる時間の⽬目安(?) 参考:http://blog.endpoint.com/2015/07/how-fast-is-pgupgrade-anyway.html
PostgreSQLのアップグレード u サードパーティ製のツールを使う u トリガーベースのレプリケーション u Slony-I u Buccardo u
Londiste u Logical decodingを利利⽤用したレプリケーション u BDR 変更更を検知してツール間でデータをやり取りする メジャーバージョン間でレプリケーション出来る トリガ⽤用のテーブルを利利⽤用しなくて良良い(⾼高効率率率) PostgreSQL 9.4以上が必要
PostgreSQLのアップグレード u サードパーティ製のツールを使う u トリガーベースのレプリケーション u Slony-I u Buccardo u
Londiste u Logical decodingを利利⽤用したレプリケーション u BDR 今回実験 変更更を検知してツール間でデータをやり取りする メジャーバージョン間でレプリケーション出来る トリガ⽤用のテーブルを利利⽤用しなくて良良い(⾼高効率率率) PostgreSQL 9.4以上が必要
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⽉月頃)
Slony-Iとは Master Slave Table 1 Table 2 Table 1 Table
2 Trigger Slonik command Operation Slonik Daemon Slonik Daemon Database Database
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
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. 標準のレプリケーションに戻す
実験内容 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
実験内容 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
実験 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
実験 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"
実験 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
実験 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
経過 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 標準のレプリに戻すなら完全無停⽌止は不不可能
課題 u 標準のレプリケーションに戻せるか? u 各処理理にどれくらいの時間がかかるか不不明 u 負荷具合・データ量量・サーバのスペック等による、、、 u 実機に近い環境で実験 u
Slony-Iでレプリ出来ないschemaがないか u レプリケーションによるmasterへの負荷は? u slaveノードの遅延は? u Switch overにどれくらい時間がかかるか?
参考 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/
参考