Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Postgre sql9.4新機能]レプリケーション・スロットの活用

9,390 views

Published on

2014年9月6日に開催された第4回PostgreSQLアンカンファレンスでの発表資料です。
当日いただいたコメント等を反映した版を公開します。

Published in: Engineering
  • Be the first to comment

[Postgre sql9.4新機能]レプリケーション・スロットの活用

  1. 1. 第4回 PostgreSQLアンカンファレンス2014/09/06 9.4新機能 レプリケーション・スロットの使いどころ 株式会社アシスト 喜田 紘介 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 1
  2. 2. Copyright © 2014 K.K.Ashisuto All Rights Reserved. 2 自己紹介 ● 名前 ● 喜田 紘介(きだ こうすけ) ● 所属 ● 株式会社アシスト データベース技術本部 ● 日本PostgreSQLユーザ会 広報・企画担当 ● 近況 ● 仕事では、新規構築するシステムのDBをどうすべきか?というRDBMS選択支援や、 商用DBからOSSへの移行の前段階として、オブジェクトやSQL差異のレクチャーや、 データベースの診断・評価を行う 移行アセスメント支援 を主に担当しています。 ● 2014年度より、JPUGの理事になりました。こちらもよろしくお願いします。 ● この夏やりたいことやったこと PG9.4の検証、マラソンとトライアスロンの練習、歌とギターの練習(初心者)
  3. 3. Copyright © 2014 K.K.Ashisuto All Rights Reserved. 3 本日お話すること ● PostgreSQL 9.4で追加されたレプリケーション・スロットの概要 ● レプリケーション・スロットに期待されること ● レプリケーション・スロットがあるとこう変わる! ● みなさんの意見をきかせてください
  4. 4. レプリケーション・スロットの概要 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 4 ● レプリケーション・スロット ● 新しいDB内のオブジェクトでもあるし、レプリケーションスロットという考え方、ともとれる ● ストリーミング・レプリケーションのマスタ側に存在し、スレーブの状態を管理している slot1 slot2 slot3 wal_sender wal_reciever
  5. 5. レプリケーション・スロットの概要 止まってるな~ Copyright © 2014 K.K.Ashisuto All Rights Reserved. 5 ● スレーブの状態 とは? ● スレーブが生きているかどうか、転送がどこまで完了しているか ● スロットの先には、何らかのアプリケーション(それが、スレーブだったり、logical walを見る人) slot1 slot2 slot3 wal_sender wal_reciever 遅れてるな~ よし!正常!
  6. 6. レプリケーション・スロットの概要 postgres=# SELECT * FROM pg_create_physical_replication_slot('slot1'); slot_name | xlog_position -------------+--------------- slot1 | Copyright © 2014 K.K.Ashisuto All Rights Reserved. 6 ● もう少し現実的な画面 ● レプリケーション・スロットの作成 ● スロットの中身をみると ■スロットからデータを受け取るもの(=スレーブ)がいないとき postgres=# SELECT * FROM pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn -------------+--------+-----------+--------+----------+--------+------+--------------+------------- slot1 | | physical | | | f | | | ■スロットからデータを受け取るもの(=スレーブ)がいるとき postgres=# select * from pg_replication_slots ; slot_name | plugin | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn -------------+--------+-----------+--------+----------+--------+------+--------------+------------- slot1 | | physical | | | t ★ | | | 0/27E5D6E0 クラスタ内で スロットが スロットの先(=スレーブ) 転送済みの ロジカル・スロットの場合に入る項目 一意の 使われてるか で実行されてる最古の lsnアドレス 「どのプラグインで、どのDBを見てるよ」 スロット名 否か トランザクションID (walの位置)
  7. 7. レプリケーション・スロットに期待される効果 ● logical_decodingを実現するための要素(9.4新機能) ● logical decodingは、walを読み取れる状態で吐く機能で、今後様々な拡張の基盤に   logical decodingは外部ツールに データを渡せる機能なので 「誰」が「いつ」「何回」取りに来るかは 外部ツールの作り次第 update 給与 set 月給*1.1 where 喜田 ; update 給与 set 月給*1.1 where 喜田 ; update 給与 set 月給*1.1 where 喜田 ; もっと ちょーだい え、さっき ログスイッチ しちゃった 泣 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 7 なるとされている。 ● レプリケーション・スロットがあれば、postgres側で↓を発生させないようにできる。 ● こんなlogical decodingはイヤだ update 給与 set 月給*1.1 where 喜田 ; ブラックボックスな ツール ぐへへ もっと 俺も! 僕もほしい いや 俺でしょ はい どうぞ しゃーないな みんなにデータあげちゃう欲しいデータが消えちゃってる何度でもデータあげちゃう
  8. 8. レプリケーション・スロットに期待される効果 ● これまでのストリーミング・レプリケーションの課題を解決 ● レプリケーション競合の発生 ● wal_keep_segments もしくは アーカイブ転送を考慮 ②ロング トランザクション walファイル wal_keep_seg分 まで持っておける wal_sender アーカイブファイル 最悪の場合に備え、 スタンバイに転送または領域を共有 ファイルコピー など Copyright © 2014 K.K.Ashisuto All Rights Reserved. 8 ①更新が伝搬 ③vacuum ④vacuumも  伝搬②’失敗!!! レプリケーション競合walの消失に備えて対策を検討
  9. 9. ここまでは、マニュアルレベル ●従来の方法でもレプリケーションは 組むことができる。 ●では、スロットの活用シーンは? ● logicalは、まだ実用段階ではないので ここではストリーミングレプリを考えます。 ● 競合の解消?他には? ● 皆さんの案もお聞きしたいです。 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 9
  10. 10. 活用シーン1 複数台のスレーブがある場合(追記) ● wal_keep_segmentsの設定が困難なことが、きっとある ● もしくは、ホットスタンバイ用に全スレーブにアーカイブを転送する? Copyright © 2014 K.K.Ashisuto All Rights Reserved. 10 wal_sender wal_reciever 貧弱なマシンだから バッチとかの同期に 時間がかかる この2台は同期が 追いついてるのに walファイル wal_keep_seg分 まで持っておける     の都合によりwal_keep_segを多めに 設定しておかなければならない。最適値の検討が けっこう大変。 アンカンファレンス参加者や、自身の経験でも、wal_keep_segmentsの 不適切な設定により必要なwalが消失し、レプリケーションが崩れていた という問題が確認でき、このような点ではスロットが活きると考えられる。 2014/09/09追記
  11. 11. 活用シーン2 遅延レプリケーションの場合(追記) ● 9.4の新機能で、レプリケーションの同期タイミングを遅らせることが可能 ● 障害時、スレーブに障害が伝搬する前に対処が可能となるため、 バックアップとしての利用などが期待される Copyright © 2014 K.K.Ashisuto All Rights Reserved. 11 wal_sender wal_reciever 遅延なしでレプリケーション 30分間の遅延を設定 walファイル wal_keep_seg分 まで持っておける     更新量にばらつきがある場合、walファイル の数ではなく、30分という遅延時間内で必要とする walが消失しないような管理機構が必要 =>スロットで実現 遅延レプリケーションは、スレーブ側でWAL適用する際の設定であり、 マスターからスレーブに対するWAL転送までは遅延無く行われる。 つまり、本スライドに記載していたようなマスタ側でwal消失を防ぐことの 効果は薄く、遅延レプリケーション設定と、レプリケーション・スロットの 直接的な関連は少ないと考えられる。 2014/09/09追記 間違いなので注意!
  12. 12. 1対1のレプリケーションの場合、どうする? ● 従来の方法でOK (喜田の案) ● 最終的にアーカイブファイルでやり取りしていたほうが、安心感があるような。 ● レプリケーション・スロットを使用した際のWALディレクトリの肥大化が問題になりそう。 ● ただし、スロットの方が設定はシンプルのように見える。 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 12
  13. 13. wal_sender / wal_recieverの動作は変わる?(追記) ● どこまで送ったか、スロットに入ってはいるが。。。 ● これまでのレプリケーションでは、recieverが次のwalを要求 ● →senderが必要なwalを送る ● スロットは、必要なwalをpg_xlogに残しておくだけの設定であり、 sender/recieverの動きは変わらない? 正確な情報が確認でき次第、追記予定。 発表は以上です。ありがとうございました。 2014/09/09追記 Copyright © 2014 K.K.Ashisuto All Rights Reserved. 13

×