Slide 1

Slide 1 text

PostgreSQLのバージョンアップ ~11の話もあるよ ~ 第25回 中国地方DB勉強会 in 鳥取

Slide 2

Slide 2 text

What is it? バージョンアップしてますか?

Slide 3

Slide 3 text

What is it? やり方が分からない

Slide 4

Slide 4 text

What is it? 上げてメリットあるの?

Slide 5

Slide 5 text

What is it? そんな課題・疑問にお答えします

Slide 6

Slide 6 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 7

Slide 7 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 8

Slide 8 text

自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 • 3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も

Slide 9

Slide 9 text

自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 • 3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も

Slide 10

Slide 10 text

婚活といえばオミカレ https://party-calendar.net/

Slide 11

Slide 11 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 12

Slide 12 text

Version upのメリット バージョンアップのメリット

Slide 13

Slide 13 text

Version upのメリット •新機能が使える •パフォーマンス向上する 12/22 発売のWeb+DBを読んで

Slide 14

Slide 14 text

PostgreSQLカンファレンス https://www.postgresql.jp/jpug-pgcon2018

Slide 15

Slide 15 text

PostgreSQL 11 解体新書 PostgreSQL カンファレンス 2018 https://speakerdeck.com/soudai/postgresql11-release

Slide 16

Slide 16 text

Version upのメリット 12/22 発売のWeb+DBを読んで (大事なことなので二回)

Slide 17

Slide 17 text

Version upの種類 PostgreSQLのバージョンアップ

Slide 18

Slide 18 text

Version upの種類 ざっくり4種類ある

Slide 19

Slide 19 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第

Slide 20

Slide 20 text

• 自分たちの要件に合わせて選ぶ > 無理に難しい手段をとらない • 停止時間を取るほうが難易度は低い • 古いPostgreSQL(7系とか) > 選択肢が無いので停止 Version upの種類

Slide 21

Slide 21 text

• 自分たちの要件に合わせて選ぶ > 無理に難しい手段をとらない • 停止時間を取るほうが難易度は低い • 古いPostgreSQL(7系とか) > 選択肢が無いので停止 Version upの種類 後述の方法で出来なくはないけど…

Slide 22

Slide 22 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第

Slide 23

Slide 23 text

Version upの種類 データが大きい場合に 色んな方法を検討します

Slide 24

Slide 24 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第

Slide 25

Slide 25 text

Version upの種類 ???「止めてもらっては困る」

Slide 26

Slide 26 text

Version upの種類 ???「止めてもらっては困る」 ↓ 停止時間を短くする工夫

Slide 27

Slide 27 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第

Slide 28

Slide 28 text

Version upの種類 要件が整理できたところで 具体的な手法を見ていきます

Slide 29

Slide 29 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 30

Slide 30 text

停止を伴うバージョンアップ 長時間の停止を伴う

Slide 31

Slide 31 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チームs次第

Slide 32

Slide 32 text

停止を伴うバージョンアップ pg_dump/pg_restoreが基本

Slide 33

Slide 33 text

停止を伴うバージョンアップ pg_dump/pg_restoreが基本 ↓ バックアップ、リストアをする

Slide 34

Slide 34 text

停止を伴うバージョンアップ • プレーンテキスト形式(SQL) • カスタムアーカイブ形式(圧縮したバイナリ) • ディレクトリ形式(表単位の圧縮したバイナリ) • TAR形式(表単位のバイナリ) pg_dumpの種類

Slide 35

Slide 35 text

停止を伴うバージョンアップ • プレーンテキスト形式(SQL) • カスタムアーカイブ形式(圧縮したバイナリ) • ディレクトリ形式(表単位の圧縮したバイナリ) • TAR形式(表単位のバイナリ) pg_dumpの種類 オススメ!

Slide 36

Slide 36 text

pg_dump/pg_restore // -Fc カスタムアーカイブ形式 // -f は出力先 $ pg_dump –Fc データベース名 –U ユーザ名 ¥ –h ホスト名 –f /tmp/db.dump // リストア方法 $ pg_restore -d データベース名 /tmp/db.dump

Slide 37

Slide 37 text

停止を伴うバージョンアップ これだけ!!

Slide 38

Slide 38 text

停止を伴うバージョンアップ 質問 「pg_dumpallじゃだめですか?」

Slide 39

Slide 39 text

停止を伴うバージョンアップ 回答 全DB移行するならそっち

Slide 40

Slide 40 text

停止を伴うバージョンアップ pg_dumpallは内部的に pg_dumpをまとめてるだけ

Slide 41

Slide 41 text

停止を伴うバージョンアップ 注意点 postgresql.conf 等は 自分で設定が必要

Slide 42

Slide 42 text

停止を伴うバージョンアップ Webサーバ pg_dump pg_dumpの前に接続を停止する 旧DB クライアント 新DB

Slide 43

Slide 43 text

停止を伴うバージョンアップ Webサーバ pg_restoreが終わったら切り替える 旧DB クライアント 新DB pg_restore

Slide 44

Slide 44 text

停止を伴うバージョンアップ • Versionを一気に上げられる • pg_dump/pg_restoreを事前に試せる スケジュールが調整しやすい • ロールバックが簡単(旧DBにつなぎ直すだけ) • ステージング等で試しやすい この方式のメリット

Slide 45

Slide 45 text

停止を伴うバージョンアップ • データ量が増えれば増えるほど時間がかかる • 停止は必須 • 移行用のインスタンスやサーバが必要 この方式のデメリット

Slide 46

Slide 46 text

停止を伴うバージョンアップ • データ量が増えれば増えるほど時間がかかる • 停止は必須 • 移行用のインスタンスやサーバが必要 この方式のデメリット dumpファイルが数十GBを 超えてくると厳しい

Slide 47

Slide 47 text

停止を伴うバージョンアップ pg_upgrade

Slide 48

Slide 48 text

停止を伴うバージョンアップ pg_upgrade ↓ 使用中のDBクラスタを そのまま新しいバージョンにする

Slide 49

Slide 49 text

停止を伴うバージョンアップ PostgreSQL 8.4以降、データファイルの構造が変更さ れていないため、pg_upgradeはテーブルやインデックス の再構築をしません。 制御ファイルやシステムカタログなどを修正して バージョンアップするため、手順としてもシンプルです。

Slide 50

Slide 50 text

停止を伴うバージョンアップ Webサーバ pg_upgrade 接続を停止する 旧DB クライアント

Slide 51

Slide 51 text

停止を伴うバージョンアップ Webサーバ 新DB クライアント Upgradeできたら接続を再開

Slide 52

Slide 52 text

停止を伴うバージョンアップ 注意点 同じくpostgresql.conf 等は 自分で設定が必要

Slide 53

Slide 53 text

停止を伴うバージョンアップ コピーモードとリンクモード

Slide 54

Slide 54 text

停止を伴うバージョンアップ コピーモードとリンクモード 旧DBのデータが残るので ロールバックを考えたらこっち

Slide 55

Slide 55 text

停止を伴うバージョンアップ コピーモードとリンクモード データコピーが無いので高速

Slide 56

Slide 56 text

停止を伴うバージョンアップ どれくらい速度が変わるのか?

Slide 57

Slide 57 text

停止を伴うバージョンアップ どれくらい速度が変わるのか? ↓ 最大で400倍程度

Slide 58

Slide 58 text

150GB、850テーブルの移行時 移行方法 所要時間(分) dump/restore(通常の方法) 300 dump/パラレルrestore(8.4からの機能) 180 pg_upgrade (コピーモード) 44 pg_upgrade (リンクモード) 0.7 引用元 : https://lets.postgresql.jp/documents/technical/contrib/pg_upgrade

Slide 59

Slide 59 text

pg_upgradeの事例 3TB超のCacooのPostgreSQL 9.3を 9.5にアップグレードした話 https://nulab-inc.com/ja/blog/cacoo/postgresql-from-9-3-to-9-5/

Slide 60

Slide 60 text

停止を伴うバージョンアップ • 停止時間を短くして、すばやくバージョンアップ • 移行用のインスタンスやサーバが不要 • 手順が簡単 • 事前に試すことができる この方式のメリット

Slide 61

Slide 61 text

停止を伴うバージョンアップ • リンクモードは高速だがロールバックが出来ない • 停止は必須 • Versionの制約がある • 事前に対象のPostgreSQLのインストールが必要 この方式のデメリット

Slide 62

Slide 62 text

停止を伴うバージョンアップ 最近はDISKも早いので pg_dumpで大体なんとかなる (停止さえできれば)

Slide 63

Slide 63 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 64

Slide 64 text

停止を最小化したVersion up それでも止めれない時 または巨大なDBの時

Slide 65

Slide 65 text

Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単 全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第

Slide 66

Slide 66 text

停止を最小化したVersion up レプリケーションを活用する

Slide 67

Slide 67 text

停止を最小化したVersion up ロジカルレプリケーション

Slide 68

Slide 68 text

Version upの種類 特徴 ストリーミングレプリケーション (物理レプリケーション) ロジカルレプリケーション (論理レプリケーション) レプリケーション対象 全てのデータベース データベース単位、テーブル単 位など柔軟に設定可能 利用用途 バックアップ、参照負荷分散 部分的なレプリケーション、 バージョンアップ 何を伝搬するか トランザクションログ(WAL) 変更された行の情報 受信側での更新 不可能 可能 異なるバージョン間でのレ プリケーション 不可能 可能 対応バージョン 9.0以降 10以降 引用元:www.intellilink.co.jp/article/column/oss-postgres03.html

Slide 69

Slide 69 text

ロジカル レプリケーション プライマリ スタンバイ ロジカル レプリケーション PostgreSQL 10 スタンバイ プライマリ フェイルオーバー クライアント 切り替え PostgreSQL 11 プライマリ スタンバイ PostgreSQL 10 クライアント レプリケーションの構築 PostgreSQL 11 ストリーミング レプリケーション クライアント 停止を最小化したVersion up

Slide 70

Slide 70 text

停止を最小化したVersion up ロジカルレプリケーション が最強なのでは?

Slide 71

Slide 71 text

Version upの種類 特徴 ストリーミングレプリケーション (物理レプリケーション) ロジカルレプリケーション (論理レプリケーション) レプリケーション対象 全てのデータベース データベース単位、テーブル単 位など柔軟に設定可能 利用用途 バックアップ、参照負荷分散 部分的なレプリケーション、 バージョンアップ 何を伝搬するか トランザクションログ(WAL) 変更された行の情報 受信側での更新 不可能 可能 異なるバージョン間でのレ プリケーション 不可能 可能 対応バージョン 9.0以降 10以降 www.intellilink.co.jp/article/column/oss-postgres03.htmls

Slide 72

Slide 72 text

停止を最小化したVersion up PostgreSQL 10の現場が ほとんど無い (しかも11は出たばっかり) 今後に期待

Slide 73

Slide 73 text

停止を最小化したVersion up 代替案 1 Amazon Database Migration Service

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

停止を最小化したVersion up AWSは便利 (ただし9.4以降)

Slide 76

Slide 76 text

停止を最小化したVersion up pglogicalでも同じことが出来る (ただし9.4以降)

Slide 77

Slide 77 text

停止を最小化したVersion up 9.4未満の人? 停止してバージョンアップしましょう データがでかい場合、難易度 “高”になる

Slide 78

Slide 78 text

停止を最小化したVersion up 代替案 2 Slony-I

Slide 79

Slide 79 text

停止を最小化したVersion up Slony-I トリガーを利用した 非同期レプリケーションツール ロジカルレプリケーション と同じようなことが出来る

Slide 80

Slide 80 text

停止を最小化したVersion up Slony-Iは設定ファイルが煩雑 (ぶっちゃけむずい)

Slide 81

Slide 81 text

停止を最小化したVersion up Slony-Iはトリガーベースなので パフォーマンスが悪い (大規模だと厳しい)

Slide 82

Slide 82 text

停止を最小化したVersion up しかし現状では一番の現実解

Slide 83

Slide 83 text

停止を伴うバージョンアップ 注意点 Slony-I 2.0は8.3以上で動作 それ未満のバージョンアップの時は古いSlony-Iが必要

Slide 84

Slide 84 text

停止を最小化したVersion up • 停止時間を極小化出来る(切り替え時間のみ) • データ量の大きさに依存しない • 新しいバージョンでは簡単に出来る この方式のメリット

Slide 85

Slide 85 text

停止を最小化したVersion up • フェイルオーバーの時に大規模だと参照が捌けない • 用意に必要なサーバの台数が多い • 技術的な難易度が高くなる • 障害時の切り戻しが難しい この方式のデメリット

Slide 86

Slide 86 text

停止を最小化したVersion up インフラを触らずに データを連携する方法

Slide 87

Slide 87 text

停止を最小化したVersion up アプリケーションが 新旧DBに書き込む

Slide 88

Slide 88 text

プライマリ プライマリ PostgreSQL 10 アプリケーション PostgreSQL 11 停止を最小化したVersion up 両方に書き込み 参照は旧DB

Slide 89

Slide 89 text

プライマリ プライマリ PostgreSQL 10 アプリケーション PostgreSQL 11 停止を最小化したVersion up 旧DBの書き込みをやめる 参照を切り替える

Slide 90

Slide 90 text

停止を最小化したVersion up レプリケーションと 同じような効果がある

Slide 91

Slide 91 text

停止を最小化したVersion up モデル層がリポジトリパターンで 適切に設計されていた場合は 比較的簡単に出来る 大体されてない

Slide 92

Slide 92 text

停止を最小化したVersion up どれも工数はそれなりに掛かる ↓ 停止出来るなら停止した方が楽

Slide 93

Slide 93 text

あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4 停止を最小化したVersion up 5 まとめ

Slide 94

Slide 94 text

まとめ PostgreSQLは魅力的な機能が豊富!

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

まとめ バージョンを常に上げていきましょう

Slide 97

Slide 97 text

まとめ バージョンを常に上げていきましょう ↓ そういう文化を作る

Slide 98

Slide 98 text

まとめ 時間が経てばを経つほど バージョンの問題は根深くなる (データが大きくなるなど)

Slide 99

Slide 99 text

まとめ 最新版に追従していきましょう

Slide 100

Slide 100 text

おまけ シャーディングとかNoSQLなど 複数のデータストア層があると ゲキムズなのでやっぱ停止すべき

Slide 101

Slide 101 text

ご清聴ありがとうございました