SlideShare a Scribd company logo
速習! PostgreSQL専用HAソフトウェア: Patroni
2023/11/24
株式会社NTTデータグループ
鳥越 淳
© 2023 NTT DATA Group Corporation 2
自己紹介
鳥越 淳(とりこし あつし)
@atorik_shi on X/Twitter
• 2008年頃からオープンソースソフトウェアを扱う業務に従事
• 2015年頃からPostgreSQLのサポート・開発
• 『PostgreSQL徹底入門 第4版』(翔泳社) 8~13章執筆
© 2023 NTT DATA Group Corporation 3
アジェンダ
01. PostgreSQLとHA
02. Patroniの概要・仕組み
03. 動作から理解するPatroni
04. Patroniの運用
05. まとめ
© 2023 NTT DATA Group Corporation 4
(セッションの注意事項)
• 本講演で紹介する機能や仕様は、将来的に変更される可能性があることにご注意くださ
い。
• その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商
標です。
5
01.
PostgreSQLとHA
5
© 2023 NTT DATA Group Corporation 6
HAとは [1]
• 可用性が高い状態のことで、システムが提供している機能やサービスが停止・
中断する頻度や時間を極力少なく抑えること
• 狭義には、複数のコンピュータを束ねて一体的に運用し、あたかも一台のコン
ピュータであるかのように振る舞わせるクラスタリング(clustering)技術により、
一台が停止しても全体が停止しないようにした状態(高可用性クラスタ)
PostgreSQL
プライマリ
PostgreSQL
レプリカ1
PostgreSQL
レプリカN
[1] https://e-words.jp/w/%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7.html
クラスタ
…
本資料での呼称
インスタンス インスタンス インスタンス
© 2023 NTT DATA Group Corporation 7
PostgreSQLとHA ~PostgreSQLができること~
• レプリケーション
✓ WALを転送してDBを複製
✓ レプリカへのレプリケーション完了を待つ同期, 待たない非同期方式がある
• クラスタの各種操作
✓ レプリカの作成・昇格など
PostgreSQL
プライマリ
PostgreSQL
レプリカ
WAL転送 WALリプレイ
© 2023 NTT DATA Group Corporation 8
PostgreSQLとHA ~PostgreSQLがしないこと~
• PostgreSQLクラスタの状態に応じた自動運用
✓ プライマリの障害を検知し、適切なレプリカを昇格
✓ 同期レプリカの障害を検知し、当該レプリカをプライマリから切り離し
✓ プライマリがcluster全体で1台であること
など
⇒ “PostgreSQLがしないこと”は、HAソフトウェアを利用して補完
© 2023 NTT DATA Group Corporation 9
02.
Patroniの概要・仕組み
9
© 2023 NTT DATA Group Corporation 10
Patroniの概要
• PostgreSQL用HAソフトウェア
• オープンソースソフトウェア(MIT License)
• 主な開発元はZalando SE
• Zalando (ザランド)は、ヨーロッパ地域を対象に、ファッションおよびライフスタイル関連商品を取り扱うウェブサイ
トおよびアプリ[1]
• Python実装
• Kubernetesでは、いくつかのPosgreSQL Operator(Zalando, PGO,
StackGres)の内部で利用
[1] https://ja.wikipedia.org/wiki/Zalando
© 2023 NTT DATA Group Corporation 11
Patroniの特徴
• 各インスタンスの状態は、etcdなど一貫性が保証されたDistributed
Consensus Store(DCS)に保存
✓ DCSの存在がアーキテクチャ上の大きな特徴。cf. Pacemaker
✓ Kubernetes環境では、Kubernetesが利用するetcdに保存可能※。別途DCSを構
築する必要なし
• 2インスタンスのほか、3インスタンス以上のPostgreSQLクラスタも構成可能
• REST APIを提供。主な用途は以下:
✓ ユーザによるコマンド操作(patronictlコマンド)
✓ HA ProxyやLBがクラスタのプライマリを把握
✓ Patroni自身が利用
※ ConfigMapまたはEndpoint等を利用。パラメータuse_endpointsが有効な場合、Endpointを利用
© 2023 NTT DATA Group Corporation 12
Patroniのアーキテクチャ
• PostgreSQLインスタンスごとに1つのPatroniを起動
• 各Patroniは自身が担当するPostgreSQLの状態を取得し、DCSに格納
• 他のPatroniともやりとりしながら、必要に応じてPostgreSQLを操作
PostgreSQL Patroni
etcd
etcd
DCS
①DBの状態を取得
PostgreSQL Patroni
②DCSを更新/他の
ノードの状態を取得
③他のPatroniとREST
APIでやりとり
④DB操作
© 2023 NTT DATA Group Corporation 13
DCS
• Distributed Consensus Store
• たとえばetcdでは以下の特徴:
• Key-Valueの形でデータを保存
• TTL経過後オブジェクトを自動削除することも可能
• プライマリダウンの検知などに利用
• 合意アルゴリズムであるRAFTを実装
• DCS自体も複数ノードから構成可能。多数決原理で動作するため通常奇数台で
構成
• 高い一貫性を保証可能。例えば、複数ノード構成でもあたかも単一ノードしかない
かのように振舞ってくれる
[1] https://ja.wikipedia.org/wiki/Zalando
© 2023 NTT DATA Group Corporation 14
03.
動作から理解するPatroni
①基本動作
1
© 2023 NTT DATA Group Corporation 15
Patroniの基本動作
• 以降同期レプリカ1台、非同期レプリカ1台の3インスタンス構成を想定して説明
• loop_wait(デフォルト10秒)で、①,②を繰り返す
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
①DBの状態を取得
②DCSを更新、確認
①DBの状態を取得
①DBの状態を取得 ②DCSを更新、確認
②DCSを更新、確認
#1
#2
#3
© 2023 NTT DATA Group Corporation 16
Patroniの基本動作(DB状態取得)
• 自ノードのPostgreSQLへクエリを実行、レプリケーションの状況などDBの状態を取得
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
①DBの状態を取得
②DCSを更新、確認
①DBの状態を取得
①DBの状態を取得 ②DCSを更新、確認
②DCSを更新、確認
#1
#2
#3
例
・現在WAL位置: pg_current_wal_flush_lsn()
・レプリケーション状況: pg_stat_replication相当
例
・SELECT pg_stat_get_wal_receiver()
・SELECT pg_last_wal_receive_lsn()
・SELECT pg_is_wal_replay_paused()
例
・リカバリ状況: pg_stat_wal_receiver相当
・リカバリ停止中か: pg_is_wal_replay_paused()
© 2023 NTT DATA Group Corporation 17
Patroniの基本動作(DCS更新、確認)
• PostgreSQLから取得した情報をDCSへ格納
• DCSにはだれがプライマリか(leader)、クラスタに参加しているノード(member)などを保存
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
①DBの状態を取得
②DCSを更新、確認
①DBの状態を取得
①DBの状態を取得 ②DCSを更新、確認
②DCSを更新、確認
#1
#2
#3
・PUT: members/[自分]
・PUT: leader
など。リースを設定し、更新が
ない場合自動削除
・leader
・members
・config
などを保存
• PUT: members/[自分]
• GET: leader
• PUT: members/[自分]
• GET: leader
© 2023 NTT DATA Group Corporation 18
03.
動作から理解するPatroni
②プライマリ故障
1
© 2023 NTT DATA Group Corporation 19
プライマリ故障時の動作
• #1故障後、#2がプライマリになる場合
PostgreSQL
プライマリ
PostgreSQL
プライマリ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
②primary不在を検知
①leaderキーがexpire
③自分が
primary候補に
相応しいか確認
例
・同期レプリケーションしていたレプリカか
・Patroniの設定上リーダーになるのを禁止
されていないか
・watchdogが有効か
⑤primaryに昇格
⑥primary変更を検知
⑦同期先
を変更
⑧#3をsync
standbyに
登録
#1
#2
#3
④leaderキーに自身を登録
© 2023 NTT DATA Group Corporation 20
旧プライマリ復旧時の動作
• 非同期レプリカとしてクラスタに組み込まれる
PostgreSQL
非同期レプリカ
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
#1
#2
#3
①DCS確認、#2がプライマリ
#3が同期レプリカと把握
②#2の非同期レプリカ
として参加
© 2023 NTT DATA Group Corporation 21
03.
動作から理解するPatroni
③同期レプリカ故障
2
© 2023 NTT DATA Group Corporation 22
同期レプリカ故障時の動作
• #2障害発生後、#3が同期レプリカになる場合
• 同期レプリカ障害時にはクラスタから切り離す※。さもないと書き込みリクエストが完了しない
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
①pg_stat_replication
から#2のダウンを検知
例.
・許容値※以上の遅延が発生していな
いか
#1
#2
#3
②同期レプリカに相応しい
レプリカを選出し、
PostgreSQLの設定を変更 ③選出した
同期レプリカを
DCSに登録
※パラメータmaximum_lag_on_syncnodeで
指定可能
© 2023 NTT DATA Group Corporation 23
旧同期レプリカ復旧時の動作
• 非同期レプリカとしてクラスタに組み込まれる
PostgreSQL
プライマリ
PostgreSQL
非同期レプリカ
PostgreSQL
同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
#1
#2
#3
①DCS確認、
#1がプライマリ、
#3が同期レプリカと把握
②#1の非同期レプリカ
として参加
SELECT
© 2023 NTT DATA Group Corporation 24
03.
動作から理解するPatroni
④DCS故障
2
© 2023 NTT DATA Group Corporation 25
DCS故障時の動作
• DCS全台停止やDCSとのNW障害を想定
• プライマリが降格され全インスタンスがレプリカとなり、書き込み処理できなくなる
PostgreSQL
レプリカ
PostgreSQL
レプリカ
PostgreSQL
レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
②降格(PostgreSQLを
停止し、読込専用で起動)
①DCSアクセスに失敗
①DCSアクセスに失敗
①DCSアクセスに失敗
#1
#2
#3
© 2023 NTT DATA Group Corporation 26
DCS故障後の復旧
• リーダー選出が行われプライマリに昇格、書き込み処理が可能になる
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
①DCSアクセスに成功
①DCSアクセスに成功
①DCSアクセスに成功、
Leader electionが動作
#1
#2
#3
②leaderとして動作
© 2023 NTT DATA Group Corporation 27
DCS故障時の動作(failsafe_mode有効時)
• v3.0.0から、DCS故障時も、プライマリが他の全Patroniにアクセス可能であれば、プライマリと
して継続動作可能とするオプションfailsafe_modeが追加
3.0.0~
PostgreSQL
プライマリ
PostgreSQL
同期レプリカ
PostgreSQL
非同期レプリカ
Patroni
Patroni
Patroni
etcd
etcd
DCS
②降格せずにPrimaryのま
ま動作
①DCSアクセスに失敗
①DCSアクセスに失敗
①DCSアクセスに失敗
#1
#2
#3
①クラスタを構成する全ての
Patroniにアクセス可能なら..
© 2023 NTT DATA Group Corporation 28
Patroniが対応しない故障
Pacemakerなど他のHAソフトウェアと異なり、
以下の故障については、Patroniは系切替などの操作は実施しない。
Patroniとしては、これらの故障は別途監視システムで監視すべきという考え方の
模様※
• PostgreSQL動作に影響を与えないディスク障害
• Patroniが通信に利用しないネットワークの障害
※ -- https://github.com/zalando/patroni/issues/665
It is basically your responsibility to set up an extensive monitoring system, which will do lots of checks, like
CPU Utilization, free space on different partitions, hardware failures, number of open and active
connections and many many more.
© 2023 NTT DATA Group Corporation 29
04.
Patroniの運用
2
© 2023 NTT DATA Group Corporation 30
Patroniの設定の定義先
Patroniの設定の定義先は3つ:
• DCS
• クラスタの全てのノードに適用される設定
• patronictlコマンドのedit-configまたはREST API経由で変更
• Patroni自体の設定のほか、PostgreSQLの設定も含まれる(次ページで解説)
• 設定ファイル
• patroni.yml
• SIGHUP、patronictl reloadコマンド、またはREST API経由で変更
• DCS上の設定より優先される
• 環境変数
• 設定ファイルで記載するパラメータについて環境変数で設定可能
[1] https://ja.wikipedia.org/wiki/Zalando
© 2023 NTT DATA Group Corporation 31
PostgreSQLのパラメータの扱い
• PostgreSQLの設定も基本的にPatroni経由で設定する必要があるので注意
• Patroniのpostgresql.confの扱い
• オリジナルのpostgresql.confはpostgresql.base.confにリネーム
• DCS上のPostgreSQLの設定をpostgresql.confに出力、 postgresql.base.confをinclude
• さらに一部のパラメータをPostgreSQL起動時に指定
• クラスタを構成する全ノードで同じ値にすべきPostgreSQLのパラメータは、DCSに設定が
必要。具体的なパラメータはマニュアル[1]を参照
例. max_connections, max_locks_per_transaction, wal_levelなど
[1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
postgres -D data/postgresql1
--config-file=/Users/tori/data_patroni/data/postgresql0/postgresql.conf
--listen_addresses=127.0.0.1 --port=5432 …
Patroniから起動されたpostgresプロセスのpsコマンド出力抜粋
© 2023 NTT DATA Group Corporation 32
PostgreSQLのパラメータの扱い
• クラスタを構成する全ノードで同じ値にすべきPostgreSQLのパラメータは、DCSに設定が
必要。具体的なパラメータはマニュアル[1]を参照
例. max_connections, max_locks_per_transaction, wal_levelなど
• patroni.ymlのbootstrap.dcs.postgresql.parameters以下にPostgreSQLのパラメータ
値が列挙できるが、Patroni初回起動時のみ作用するので注意。初回起動以外は
patronictl edit-configコマンドなどで変更が必要
• PatroniのパラメータによってPostgreSQLのパラメータが決まるものもあるので注意
例. postgresql.listen -> listen_addresses、port
[1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
© 2023 NTT DATA Group Corporation 33
PostgreSQLのパラメータの反映タイミング
反映にPostgreSQLの再起動が必要なパラメータ※は即時には反映せず、次回起動時に反
映される。該当インスタンスには、パラメータ反映までPatroni上pending_restartというフラグが
立てられる:
※contextがpostmasterのGUCパラメータ
[1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
$ patronictl list
+ Cluster: batman (7302698360463234666) ------------------------------------------------------+
| Member | Host | Role | State | TL |Lag in MB | Pending restart |
+-------------+--------------------+----------------+-----------+---+------------+------------------+
| postgresql0 | 127.0.0.1:15432 | Sync Standby | streaming | 13 | 0 | * |
| postgresql1 | 127.0.0.1:15433 | Leader | running | 13 | | |
| postgresql2 | 127.0.0.1:15434 | Replica | streaming| 13 | 0 | |
+-------------+--------------------+----------------+------------+---+-----------+------------------+
© 2023 NTT DATA Group Corporation 34
PostgreSQL管理についての注意
• PostgreSQLを再起動する際は、直接PostgreSQLを再起動するとF/Oが発生する可能
性あり。-> patronictl restartコマンドなどを利用する
• PatroniのみにPostgreSQLを制御させる。Patroni以外がPostgreSQLを起動停止でき
る場合、プライマリが2重起動などするおそれ
例. systemd
[1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
© 2023 NTT DATA Group Corporation 35
PostgreSQLの非同期レプリケーションに関する主なPatroni設定
• maximum_lag_on_failover
• 範囲内のデータサイズで遅延している非同期レプリカをプライマリに昇格
• ただし、Patroniはリアルタイムでレプリケーションの遅延量を把握していないので、実際に
はこれ以上のデータが失われる可能性がある点注意
© 2023 NTT DATA Group Corporation 36
PostgreSQLの同期レプリケーションに関する主なPatroni設定
• synchronous_mode
• 有効にすると、レプリカを同期レプリケーションとして選択
• プライマリが故障した場合、同期レプリカを昇格する。非同期レプリカが存在してもこちら
は昇格させない
• synchronous_modeをonにしても、同期レプリカが存在しない状況は発生する
例. 同期レプリカ故障後、適切な同期レプリカ候補が見つかっていないタイミング
• この状況でプライマリが故障すると、プライマリに昇格できるノードが存在せず
PostgreSQLクラスタは書き込みできなくなる
• synchronous_mode_strict
• 有効にすると、同期スタンバイが動作するまでPostgreSQLへの書き込みを禁止するこ
とも可能
© 2023 NTT DATA Group Corporation 37
05.
まとめ
3
© 2023 NTT DATA Group Corporation 38
• Patroniは、PostgreSQLのクラスタを構成できるHAソフトウェア
• etcdなどのデータストアを利用してクラスタの状態を管理。3ノード以上のクラスタも構成可能
• 他のHAソフトウェアとは系切替をする障害が異なる点に注意
• PostgreSQLの設定やinitdbなどもPatroniが実施するため、通常のPostgreSQLと運用が
変わる点も注意
まとめ

More Related Content

What's hot (20)

PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
PDF
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
 
PDF
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
PPTX
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLの関数属性を知ろう
kasaharatt
 
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
 
PostgreSQLの関数属性を知ろう
kasaharatt
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 

Similar to 速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) (20)

PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
Insight Technology, Inc.
 
PDF
[db tech showcase Tokyo 2015] B17:PostgreSQLで動的にスケールアウト可能な負荷分散DBクラスタを作ろう! by ...
Insight Technology, Inc.
 
PDF
PostgreSQLレプリケーション(pgcon17j_t4)
Kosuke Kida
 
PDF
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PPTX
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
PDF
PostgreSQL10徹底解説
Masahiko Sawada
 
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 
PDF
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
PDF
PostgreSQLレプリケーション徹底紹介
NTT DATA OSS Professional Services
 
PDF
Postgre sql update_20170310
Haruka Takatsuka
 
PDF
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
Insight Technology, Inc.
 
PDF
PostgreSQL UPDATEs 2016年5月 - OSC群馬
Haruka Takatsuka
 
PDF
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
Takatoshi Matsuo
 
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
Insight Technology, Inc.
 
[db tech showcase Tokyo 2015] B17:PostgreSQLで動的にスケールアウト可能な負荷分散DBクラスタを作ろう! by ...
Insight Technology, Inc.
 
PostgreSQLレプリケーション(pgcon17j_t4)
Kosuke Kida
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
PostgreSQL10徹底解説
Masahiko Sawada
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション徹底紹介
NTT DATA OSS Professional Services
 
Postgre sql update_20170310
Haruka Takatsuka
 
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
Insight Technology, Inc.
 
PostgreSQL UPDATEs 2016年5月 - OSC群馬
Haruka Takatsuka
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
Takatoshi Matsuo
 
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
Ad

More from NTT DATA Technology & Innovation (20)

PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
 
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
 
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
 
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
 
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
 
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
 
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
 
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
 
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
 
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
 
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
 
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
 
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
 
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
 
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
 
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
Ad

Recently uploaded (6)

PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)

  • 2. © 2023 NTT DATA Group Corporation 2 自己紹介 鳥越 淳(とりこし あつし) @atorik_shi on X/Twitter • 2008年頃からオープンソースソフトウェアを扱う業務に従事 • 2015年頃からPostgreSQLのサポート・開発 • 『PostgreSQL徹底入門 第4版』(翔泳社) 8~13章執筆
  • 3. © 2023 NTT DATA Group Corporation 3 アジェンダ 01. PostgreSQLとHA 02. Patroniの概要・仕組み 03. 動作から理解するPatroni 04. Patroniの運用 05. まとめ
  • 4. © 2023 NTT DATA Group Corporation 4 (セッションの注意事項) • 本講演で紹介する機能や仕様は、将来的に変更される可能性があることにご注意くださ い。 • その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商 標です。
  • 6. © 2023 NTT DATA Group Corporation 6 HAとは [1] • 可用性が高い状態のことで、システムが提供している機能やサービスが停止・ 中断する頻度や時間を極力少なく抑えること • 狭義には、複数のコンピュータを束ねて一体的に運用し、あたかも一台のコン ピュータであるかのように振る舞わせるクラスタリング(clustering)技術により、 一台が停止しても全体が停止しないようにした状態(高可用性クラスタ) PostgreSQL プライマリ PostgreSQL レプリカ1 PostgreSQL レプリカN [1] https://e-words.jp/w/%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7.html クラスタ … 本資料での呼称 インスタンス インスタンス インスタンス
  • 7. © 2023 NTT DATA Group Corporation 7 PostgreSQLとHA ~PostgreSQLができること~ • レプリケーション ✓ WALを転送してDBを複製 ✓ レプリカへのレプリケーション完了を待つ同期, 待たない非同期方式がある • クラスタの各種操作 ✓ レプリカの作成・昇格など PostgreSQL プライマリ PostgreSQL レプリカ WAL転送 WALリプレイ
  • 8. © 2023 NTT DATA Group Corporation 8 PostgreSQLとHA ~PostgreSQLがしないこと~ • PostgreSQLクラスタの状態に応じた自動運用 ✓ プライマリの障害を検知し、適切なレプリカを昇格 ✓ 同期レプリカの障害を検知し、当該レプリカをプライマリから切り離し ✓ プライマリがcluster全体で1台であること など ⇒ “PostgreSQLがしないこと”は、HAソフトウェアを利用して補完
  • 9. © 2023 NTT DATA Group Corporation 9 02. Patroniの概要・仕組み 9
  • 10. © 2023 NTT DATA Group Corporation 10 Patroniの概要 • PostgreSQL用HAソフトウェア • オープンソースソフトウェア(MIT License) • 主な開発元はZalando SE • Zalando (ザランド)は、ヨーロッパ地域を対象に、ファッションおよびライフスタイル関連商品を取り扱うウェブサイ トおよびアプリ[1] • Python実装 • Kubernetesでは、いくつかのPosgreSQL Operator(Zalando, PGO, StackGres)の内部で利用 [1] https://ja.wikipedia.org/wiki/Zalando
  • 11. © 2023 NTT DATA Group Corporation 11 Patroniの特徴 • 各インスタンスの状態は、etcdなど一貫性が保証されたDistributed Consensus Store(DCS)に保存 ✓ DCSの存在がアーキテクチャ上の大きな特徴。cf. Pacemaker ✓ Kubernetes環境では、Kubernetesが利用するetcdに保存可能※。別途DCSを構 築する必要なし • 2インスタンスのほか、3インスタンス以上のPostgreSQLクラスタも構成可能 • REST APIを提供。主な用途は以下: ✓ ユーザによるコマンド操作(patronictlコマンド) ✓ HA ProxyやLBがクラスタのプライマリを把握 ✓ Patroni自身が利用 ※ ConfigMapまたはEndpoint等を利用。パラメータuse_endpointsが有効な場合、Endpointを利用
  • 12. © 2023 NTT DATA Group Corporation 12 Patroniのアーキテクチャ • PostgreSQLインスタンスごとに1つのPatroniを起動 • 各Patroniは自身が担当するPostgreSQLの状態を取得し、DCSに格納 • 他のPatroniともやりとりしながら、必要に応じてPostgreSQLを操作 PostgreSQL Patroni etcd etcd DCS ①DBの状態を取得 PostgreSQL Patroni ②DCSを更新/他の ノードの状態を取得 ③他のPatroniとREST APIでやりとり ④DB操作
  • 13. © 2023 NTT DATA Group Corporation 13 DCS • Distributed Consensus Store • たとえばetcdでは以下の特徴: • Key-Valueの形でデータを保存 • TTL経過後オブジェクトを自動削除することも可能 • プライマリダウンの検知などに利用 • 合意アルゴリズムであるRAFTを実装 • DCS自体も複数ノードから構成可能。多数決原理で動作するため通常奇数台で 構成 • 高い一貫性を保証可能。例えば、複数ノード構成でもあたかも単一ノードしかない かのように振舞ってくれる [1] https://ja.wikipedia.org/wiki/Zalando
  • 14. © 2023 NTT DATA Group Corporation 14 03. 動作から理解するPatroni ①基本動作 1
  • 15. © 2023 NTT DATA Group Corporation 15 Patroniの基本動作 • 以降同期レプリカ1台、非同期レプリカ1台の3インスタンス構成を想定して説明 • loop_wait(デフォルト10秒)で、①,②を繰り返す PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ①DBの状態を取得 ②DCSを更新、確認 ①DBの状態を取得 ①DBの状態を取得 ②DCSを更新、確認 ②DCSを更新、確認 #1 #2 #3
  • 16. © 2023 NTT DATA Group Corporation 16 Patroniの基本動作(DB状態取得) • 自ノードのPostgreSQLへクエリを実行、レプリケーションの状況などDBの状態を取得 PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ①DBの状態を取得 ②DCSを更新、確認 ①DBの状態を取得 ①DBの状態を取得 ②DCSを更新、確認 ②DCSを更新、確認 #1 #2 #3 例 ・現在WAL位置: pg_current_wal_flush_lsn() ・レプリケーション状況: pg_stat_replication相当 例 ・SELECT pg_stat_get_wal_receiver() ・SELECT pg_last_wal_receive_lsn() ・SELECT pg_is_wal_replay_paused() 例 ・リカバリ状況: pg_stat_wal_receiver相当 ・リカバリ停止中か: pg_is_wal_replay_paused()
  • 17. © 2023 NTT DATA Group Corporation 17 Patroniの基本動作(DCS更新、確認) • PostgreSQLから取得した情報をDCSへ格納 • DCSにはだれがプライマリか(leader)、クラスタに参加しているノード(member)などを保存 PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ①DBの状態を取得 ②DCSを更新、確認 ①DBの状態を取得 ①DBの状態を取得 ②DCSを更新、確認 ②DCSを更新、確認 #1 #2 #3 ・PUT: members/[自分] ・PUT: leader など。リースを設定し、更新が ない場合自動削除 ・leader ・members ・config などを保存 • PUT: members/[自分] • GET: leader • PUT: members/[自分] • GET: leader
  • 18. © 2023 NTT DATA Group Corporation 18 03. 動作から理解するPatroni ②プライマリ故障 1
  • 19. © 2023 NTT DATA Group Corporation 19 プライマリ故障時の動作 • #1故障後、#2がプライマリになる場合 PostgreSQL プライマリ PostgreSQL プライマリ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ②primary不在を検知 ①leaderキーがexpire ③自分が primary候補に 相応しいか確認 例 ・同期レプリケーションしていたレプリカか ・Patroniの設定上リーダーになるのを禁止 されていないか ・watchdogが有効か ⑤primaryに昇格 ⑥primary変更を検知 ⑦同期先 を変更 ⑧#3をsync standbyに 登録 #1 #2 #3 ④leaderキーに自身を登録
  • 20. © 2023 NTT DATA Group Corporation 20 旧プライマリ復旧時の動作 • 非同期レプリカとしてクラスタに組み込まれる PostgreSQL 非同期レプリカ PostgreSQL プライマリ PostgreSQL 同期レプリカ Patroni Patroni Patroni etcd etcd DCS #1 #2 #3 ①DCS確認、#2がプライマリ #3が同期レプリカと把握 ②#2の非同期レプリカ として参加
  • 21. © 2023 NTT DATA Group Corporation 21 03. 動作から理解するPatroni ③同期レプリカ故障 2
  • 22. © 2023 NTT DATA Group Corporation 22 同期レプリカ故障時の動作 • #2障害発生後、#3が同期レプリカになる場合 • 同期レプリカ障害時にはクラスタから切り離す※。さもないと書き込みリクエストが完了しない PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 同期レプリカ Patroni Patroni Patroni etcd etcd DCS ①pg_stat_replication から#2のダウンを検知 例. ・許容値※以上の遅延が発生していな いか #1 #2 #3 ②同期レプリカに相応しい レプリカを選出し、 PostgreSQLの設定を変更 ③選出した 同期レプリカを DCSに登録 ※パラメータmaximum_lag_on_syncnodeで 指定可能
  • 23. © 2023 NTT DATA Group Corporation 23 旧同期レプリカ復旧時の動作 • 非同期レプリカとしてクラスタに組み込まれる PostgreSQL プライマリ PostgreSQL 非同期レプリカ PostgreSQL 同期レプリカ Patroni Patroni Patroni etcd etcd DCS #1 #2 #3 ①DCS確認、 #1がプライマリ、 #3が同期レプリカと把握 ②#1の非同期レプリカ として参加 SELECT
  • 24. © 2023 NTT DATA Group Corporation 24 03. 動作から理解するPatroni ④DCS故障 2
  • 25. © 2023 NTT DATA Group Corporation 25 DCS故障時の動作 • DCS全台停止やDCSとのNW障害を想定 • プライマリが降格され全インスタンスがレプリカとなり、書き込み処理できなくなる PostgreSQL レプリカ PostgreSQL レプリカ PostgreSQL レプリカ Patroni Patroni Patroni etcd etcd DCS ②降格(PostgreSQLを 停止し、読込専用で起動) ①DCSアクセスに失敗 ①DCSアクセスに失敗 ①DCSアクセスに失敗 #1 #2 #3
  • 26. © 2023 NTT DATA Group Corporation 26 DCS故障後の復旧 • リーダー選出が行われプライマリに昇格、書き込み処理が可能になる PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ①DCSアクセスに成功 ①DCSアクセスに成功 ①DCSアクセスに成功、 Leader electionが動作 #1 #2 #3 ②leaderとして動作
  • 27. © 2023 NTT DATA Group Corporation 27 DCS故障時の動作(failsafe_mode有効時) • v3.0.0から、DCS故障時も、プライマリが他の全Patroniにアクセス可能であれば、プライマリと して継続動作可能とするオプションfailsafe_modeが追加 3.0.0~ PostgreSQL プライマリ PostgreSQL 同期レプリカ PostgreSQL 非同期レプリカ Patroni Patroni Patroni etcd etcd DCS ②降格せずにPrimaryのま ま動作 ①DCSアクセスに失敗 ①DCSアクセスに失敗 ①DCSアクセスに失敗 #1 #2 #3 ①クラスタを構成する全ての Patroniにアクセス可能なら..
  • 28. © 2023 NTT DATA Group Corporation 28 Patroniが対応しない故障 Pacemakerなど他のHAソフトウェアと異なり、 以下の故障については、Patroniは系切替などの操作は実施しない。 Patroniとしては、これらの故障は別途監視システムで監視すべきという考え方の 模様※ • PostgreSQL動作に影響を与えないディスク障害 • Patroniが通信に利用しないネットワークの障害 ※ -- https://github.com/zalando/patroni/issues/665 It is basically your responsibility to set up an extensive monitoring system, which will do lots of checks, like CPU Utilization, free space on different partitions, hardware failures, number of open and active connections and many many more.
  • 29. © 2023 NTT DATA Group Corporation 29 04. Patroniの運用 2
  • 30. © 2023 NTT DATA Group Corporation 30 Patroniの設定の定義先 Patroniの設定の定義先は3つ: • DCS • クラスタの全てのノードに適用される設定 • patronictlコマンドのedit-configまたはREST API経由で変更 • Patroni自体の設定のほか、PostgreSQLの設定も含まれる(次ページで解説) • 設定ファイル • patroni.yml • SIGHUP、patronictl reloadコマンド、またはREST API経由で変更 • DCS上の設定より優先される • 環境変数 • 設定ファイルで記載するパラメータについて環境変数で設定可能 [1] https://ja.wikipedia.org/wiki/Zalando
  • 31. © 2023 NTT DATA Group Corporation 31 PostgreSQLのパラメータの扱い • PostgreSQLの設定も基本的にPatroni経由で設定する必要があるので注意 • Patroniのpostgresql.confの扱い • オリジナルのpostgresql.confはpostgresql.base.confにリネーム • DCS上のPostgreSQLの設定をpostgresql.confに出力、 postgresql.base.confをinclude • さらに一部のパラメータをPostgreSQL起動時に指定 • クラスタを構成する全ノードで同じ値にすべきPostgreSQLのパラメータは、DCSに設定が 必要。具体的なパラメータはマニュアル[1]を参照 例. max_connections, max_locks_per_transaction, wal_levelなど [1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html postgres -D data/postgresql1 --config-file=/Users/tori/data_patroni/data/postgresql0/postgresql.conf --listen_addresses=127.0.0.1 --port=5432 … Patroniから起動されたpostgresプロセスのpsコマンド出力抜粋
  • 32. © 2023 NTT DATA Group Corporation 32 PostgreSQLのパラメータの扱い • クラスタを構成する全ノードで同じ値にすべきPostgreSQLのパラメータは、DCSに設定が 必要。具体的なパラメータはマニュアル[1]を参照 例. max_connections, max_locks_per_transaction, wal_levelなど • patroni.ymlのbootstrap.dcs.postgresql.parameters以下にPostgreSQLのパラメータ 値が列挙できるが、Patroni初回起動時のみ作用するので注意。初回起動以外は patronictl edit-configコマンドなどで変更が必要 • PatroniのパラメータによってPostgreSQLのパラメータが決まるものもあるので注意 例. postgresql.listen -> listen_addresses、port [1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
  • 33. © 2023 NTT DATA Group Corporation 33 PostgreSQLのパラメータの反映タイミング 反映にPostgreSQLの再起動が必要なパラメータ※は即時には反映せず、次回起動時に反 映される。該当インスタンスには、パラメータ反映までPatroni上pending_restartというフラグが 立てられる: ※contextがpostmasterのGUCパラメータ [1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html $ patronictl list + Cluster: batman (7302698360463234666) ------------------------------------------------------+ | Member | Host | Role | State | TL |Lag in MB | Pending restart | +-------------+--------------------+----------------+-----------+---+------------+------------------+ | postgresql0 | 127.0.0.1:15432 | Sync Standby | streaming | 13 | 0 | * | | postgresql1 | 127.0.0.1:15433 | Leader | running | 13 | | | | postgresql2 | 127.0.0.1:15434 | Replica | streaming| 13 | 0 | | +-------------+--------------------+----------------+------------+---+-----------+------------------+
  • 34. © 2023 NTT DATA Group Corporation 34 PostgreSQL管理についての注意 • PostgreSQLを再起動する際は、直接PostgreSQLを再起動するとF/Oが発生する可能 性あり。-> patronictl restartコマンドなどを利用する • PatroniのみにPostgreSQLを制御させる。Patroni以外がPostgreSQLを起動停止でき る場合、プライマリが2重起動などするおそれ 例. systemd [1] https://patroni.readthedocs.io/en/latest/patroni_configuration.html
  • 35. © 2023 NTT DATA Group Corporation 35 PostgreSQLの非同期レプリケーションに関する主なPatroni設定 • maximum_lag_on_failover • 範囲内のデータサイズで遅延している非同期レプリカをプライマリに昇格 • ただし、Patroniはリアルタイムでレプリケーションの遅延量を把握していないので、実際に はこれ以上のデータが失われる可能性がある点注意
  • 36. © 2023 NTT DATA Group Corporation 36 PostgreSQLの同期レプリケーションに関する主なPatroni設定 • synchronous_mode • 有効にすると、レプリカを同期レプリケーションとして選択 • プライマリが故障した場合、同期レプリカを昇格する。非同期レプリカが存在してもこちら は昇格させない • synchronous_modeをonにしても、同期レプリカが存在しない状況は発生する 例. 同期レプリカ故障後、適切な同期レプリカ候補が見つかっていないタイミング • この状況でプライマリが故障すると、プライマリに昇格できるノードが存在せず PostgreSQLクラスタは書き込みできなくなる • synchronous_mode_strict • 有効にすると、同期スタンバイが動作するまでPostgreSQLへの書き込みを禁止するこ とも可能
  • 37. © 2023 NTT DATA Group Corporation 37 05. まとめ 3
  • 38. © 2023 NTT DATA Group Corporation 38 • Patroniは、PostgreSQLのクラスタを構成できるHAソフトウェア • etcdなどのデータストアを利用してクラスタの状態を管理。3ノード以上のクラスタも構成可能 • 他のHAソフトウェアとは系切替をする障害が異なる点に注意 • PostgreSQLの設定やinitdbなどもPatroniが実施するため、通常のPostgreSQLと運用が 変わる点も注意 まとめ