SlideShare a Scribd company logo
© 2025 NTT DATA Japan Corporation
つくって壊して直して学ぶ
Database on Kubernetes
2025/5/23
株式会社NTTデータ
小林 隆浩、加藤 慎也
れ
© 2025 NTT DATA Japan Corporation 2
今日話すこと
⚫ Database(PostgreSQL) on Kubernetesを構築する際に気にするべきポイントや、
実際の運用で発生するかも知れない障害とその対応を紹介する。
• 「壊して」というより「壊れて学ぶ」のやり方
⚫ Operatorはここ数年で進化したが、やはりDBには固有の運用があり、理解が難しい。
• 例えば、バックアップやリストア
• 急なDBクラスターの停止、など
⚫ Kubernetesのストレージ周りの機能を使いながら、Database on Kubernetesを運用する際に
そうした機能をどう活かすかについても、一緒に学んでいこう。
© 2025 NTT DATA Japan Corporation 3
アジェンダ
1. はじまり - DB on Kubernetesは突然に -
2. つくって学ぶDatabase on Kubernetes
3. 壊して直して学ぶDatabase on Kubernetes
4. 問い合わせ#1 「晴れ時々エラー!?」
5. 問い合わせ#2 「生き返らないクラスター!?」
6. 問い合わせ#3 「消えないで!テーブル!?」
7. まとめ
© 2025 NTT DATA Japan Corporation 4
© 2025 NTT DATA Japan Corporation
1.
はじまり
© 2025 NTT DATA Japan Corporation 5
Database on Kubernetesは突然に
⚫ カトウ君に上司の藤井さんから依頼が届いているようです!
(今回の登場人物)
藤井さん
カトウ君 こばさん
ポスグレチーム
アプリケーションチーム
依頼
問い合わせ
© 2025 NTT DATA Japan Corporation 6
データベース要件の確認
制定日:2024/8/1
0 DB種別 ■ PostgreSQL □ MySQL □ Oracle(ライセンスは持ち込みのみ) ※必須
1 インスタンス数 □ 1 (冗長性なし。開発環境での利用を想定) ※必須
□ 2 (冗長性あり。非同期を前提とするため、ラグ・データ損失を許容)
■ 3 (冗長性あり。同期を前提とするため、データ損失はゼロ)
2 バックアップ □ コールドバックアップ ※必須
□ オンラインバックアップ
■ オンラインバックアップ+アーカイブログ (PITRに対応可能)
3 保持期間 30 日間 ※必須
4 申請日 西暦 2025 年 4 月 1 日 ※必須
5 申請承認者 ※必須
金融第一事業部 部長 xxxxx
6 記入者 事業部等・担当名 金融第一事業部 ※必須
氏名 yyyyy ※必須
7 連絡先 事業部等・担当名
■ 記入者と同じ場合はこちらをチェック
2024.8版
DBクラスター 作成申請書
担当・グループ名 役職 氏名 担当・グループ名
© 2025 NTT DATA Japan Corporation 7
想定するPostgreSQLの構成
⚫ 3インスタンスで同期レプリケーションを構成し、バックアップとアーカイブを取得する。
プライマリ スタンバイ① スタンバイ②
Data WAL
アーカ
イブ
WAL Data WAL Data
更新 参照
WALをスタンバイに転送
①、②のうち1台に、同
期レプリケーションが完了
すればOK
定期的にWALをアーカイブ
バック
アップ
© 2025 NTT DATA Japan Corporation 8
(参考)RDSのMulti-AZ DB Cluster
⚫ 3インスタンスの構成。
⚫ それぞれのインスタンスが、別AZ
に配置される。
⚫ Write以外のインスタンスでも、
読み取りクエリの処理が可能。
但し、更新ラグが発生する。
⚫ エンドポイントは下記の3種類。
• Read/Write
• Readのみ
• 個別インスタンス
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html#multi-az-db-clusters-concepts-overview
© 2025 NTT DATA Japan Corporation 9
© 2025 NTT DATA Japan Corporation
2.
つくって学ぶ
Database on Kubernetes
© 2025 NTT DATA Japan Corporation 10
KubernetesにおけるPostgreSQL Operatorとは
⚫ Kubernetes上でのデータベース運用を補助する機能が実装されている。
• レプリケーションを使った高可用性構成、障害時切り替え等をYAMLで簡単に設定できる。
• バックアップ/リストアも設定可能で、クラウドストレージと連携できる。
PostgreSQL Operator
プライマリ スタンバイ スタンバイ
プライマリ向けService
© 2025 NTT DATA Japan Corporation 11
PostgreSQL Operatorの比較
⚫ PostgreSQL向けにも複数のOperatorが存在。今回はCloudNativePGを利用する。
名称 開発主体 ライセンス 備考
PGO Crunchy Data Apache 2.0 *
• 古参Operatorの1つ。機能は十分揃っている。
• 従来のPostgreSQL向けOSSを組み合わせた構成。
• コンテナイメージの商用利用が実質できない。
postgres-operator Zalando MIT
• 古参Operatorの1つ。機能は十分揃っている。
• 従来のPostgreSQL向けOSSを組み合わせた構成。
• Kubernetesに詳しいエンジニアが利用しやすい。
CloudNativePG EDB Apache 2.0
• PostgreSQL開発で有名なEDBによるOperator。
• EDBが提供されているマネージドサービス内部でも利用されている。
• 2025年、CNCF Sandbox Projectに。
StackGres OnGres AGPL 3
• 充実した管理UIを提供。
• ライセンスがネックとなる可能性あり。
Percona Operator
for PostgreSQL
Percona Apache 2.0
• MySQLやPostgreSQLの開発で有名なPerconaのOperator。
• PGOをフォークして開発。完全OSSでの利用が可能。
• 比較的新しいOperator。
© 2025 NTT DATA Japan Corporation 12
PostgreSQL on Kubernetesのシステム構成
⚫ GKE上でCloudNativePGを用いて、以下の構成のPostgreSQL on Kubernetesを構築する。
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
WALをGCSにアーカイブ
© 2025 NTT DATA Japan Corporation 13
(例)PostgreSQLクラスター用のYAML
⚫ 3インスタンス
⚫ 同期レプリケーションの設定
⚫ データストレージ
⚫ WAL用のストレージ
⚫ バックアップ設定
© 2025 NTT DATA Japan Corporation 14
© 2025 NTT DATA Japan Corporation
3.
壊して直して学ぶ
Database on Kubernetes
© 2025 NTT DATA Japan Corporation 15
①壊して直して学ぶ:Podの障害
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
Primary Podの障害
© 2025 NTT DATA Japan Corporation 16
①Primary Podの疑似障害
⚫ クラスタの状態を確認
⚫ Primary Podを削除
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-1 0/6055A58 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-2 0/6055A58 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn
test-db-3 0/6055A58 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
$ kubectl delete pod test-db-1
pod "test-db-1" deleted
© 2025 NTT DATA Japan Corporation 17
①Primary Pod障害の確認と復旧
⚫ CloudNativePGのログ
⚫ クラスタの状態を確認
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-2 0/70066E0 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn
test-db-1 0/70066E0 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-3 0/70066E0 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
{"level":"info","ts":"2025-05-19T00:54:27.598548554Z","msg":"Current primary isn't healthy, initiating a
failover","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluste
r":{"name":"test-db","namespace":"default"},"namespace":"default","name":"test-
db","reconcileID":"a90e0a46-6bf1-4f36-9dca-b83f6bb5567e"}
{"level":"info","ts":"2025-05-19T00:54:27.740028855Z","msg":"Failing over",
"controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name"
:"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"a90e0a46-6bf1-
4f36-9dca-b83f6bb5567e","newPrimary":"test-db-2"}
© 2025 NTT DATA Japan Corporation 18
②壊して直して学ぶ:Podの障害
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
Standby Podの障害
© 2025 NTT DATA Japan Corporation 19
②Standby Podの疑似障害
⚫ クラスタの状態を確認
⚫ Standby Podを削除
$ kubectl delete pod test-db-1
pod "test-db-1" deleted
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn
test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
© 2025 NTT DATA Japan Corporation 20
②Standby Pod障害の確認と復旧
⚫ CloudNativePGのログ
⚫ クラスタの状態を確認
{“level”:“info”,"ts":"2025-05-19T01:06:20.510661896Z","msg":"Creating new Pod to reattach a PVC",
"controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name"
:"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"9812324d-b86d-
4d21-a43d-39fb6ac7f77b","pod":"test-db-1","pvc":"test-db-1"}
{"level":"info","ts":"2025-05-19T01:06:31.80588422Z","msg":"Setting replica label",
"controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name"
:"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"eb962e67-b7a2-
4ba0-9bce-29b5c4de5049","pod":"test-db-1"}
{"level":"info","ts":"2025-05-19T01:06:37.768017501Z","msg":"Cluster has become healthy",
"controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name"
:"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"c47b81a5-dc5b-
4c9c-9673-edfbd7dfac6e"}
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn
test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
© 2025 NTT DATA Japan Corporation 21
⚫ CloudNativePGはデフォルトでノード障害に耐えられる設定となっている。
ゾーン
障害に備えたPodの配置戦略(podAntiAffinity)
ノード
P
S
S
ゾーン
ノード
P
ゾーン
S
S
ノード
P
S
S
ノード障害で全滅 ノード障害に耐性 ゾーン障害に耐性
enablePodAntiAffinity:true
topologyKey:kubernetes.io/hostname
enablePodAntiAffinity:false enablePodAntiAffinity:true
topologyKey:topology.kubernetes.io/zone
© 2025 NTT DATA Japan Corporation 22
⚫ 特定のラベルをもつノードにスケジューリングする。
⚫ データベースは特定HWが設定されたノードにスケジューリングしたい場合などに有用。
• DB高速化のためにメモリ増強、高速SSDを搭載など
• 今後はGPU搭載なども要件として登場するかもしれない
性能も考慮したPodの配置戦略(nodeSelector)
nttdata.com/role: db nttdata.com/role: app
© 2025 NTT DATA Japan Corporation 23
CloudNativePGでの設定方法
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pgcluster-prod
spec:
affinity:
enablePodAntiAffinity: true
topologyKey: kubernetes.io/hostname
podAntiAffinityType: required
nodeSelector:
nttdata.com/role: db
⚫ podAntiAffinityを有効化
⚫ ホスト名で分散
⚫ 条件を満たすことが必須
⚫ データベース用ノードに
⚫ GKEノードプールに
ラベルを設定済み
© 2025 NTT DATA Japan Corporation 24
③壊して直して学ぶ:Nodeの障害
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
Primary Podが存在するノードの障害
© 2025 NTT DATA Japan Corporation 25
③Nodeの疑似障害
⚫ クラスタの状態を確認
⚫ Primary Podのあるノードを削除
$ kubectl delete node gke-cluster-bb3caaa1-2swn
node "gke-cluster-kato-default-pool-bb3caaa1-2swn" deleted
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn
test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
© 2025 NTT DATA Japan Corporation 26
③Node障害の確認と復旧
⚫ CloudNativePGのログ
⚫ クラスタの状態を確認
{"level":"info","ts":"2025-05-19T01:33:40.453415481Z","msg":"Current primary isn't healthy, initiating a
failover","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluste
r":{"name":"test-db","namespace":"default"},"namespace":"default","name":"test-
db","reconcileID":"3e4c576c-1e4a-4b0d-9bd0-3fd129e86716"}
{"level":"info","ts":"2025-05-19T01:33:40.718655379Z","msg":"Failing over",
"controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name"
:"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"3e4c576c-1e4a-
4b0d-9bd0-3fd129e86716","newPrimary":"test-db-1"}
$ kubectl cnpg status test-db
Instances status
Name Current LSN Replication role Status QoS Manager Version Node
---- ----------- ---------------- ------ --- --------------- ----
test-db-1 0/B000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv
test-db-2 0/B000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-td3t
test-db-3 0/B000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
z
© 2025 NTT DATA Japan Corporation 27
ここまでのまとめ
⚫ PostgreSQL Operatorは複数あるので、要件に合わせて選択しましょう。
• 机上での比較だとあまり差異がわからないので、実際に使ってみることも重要
⚫ すべての障害への対策は不可能だが、何が許容できる・できないかを整理することが重要。
• Pod障害/ノード障害/ゾーン障害/リージョン障害
• RPO/RTO
⚫ パフォーマンスの観点からデータベースPodはアプリケーションPodとは
別のノードにスケジューリングすることも考える。
• 大容量メモリ・高いIO性能/低遅延・広帯域の安定したネットワークが必要
• 他Podとのリソース競合を避ける
© 2025 NTT DATA Japan Corporation 28
© 2025 NTT DATA Japan Corporation
4.
#1 晴れ時々エラー
© 2025 NTT DATA Japan Corporation 29
#1 エラーになったり、ならなかったり?
(更新時にエラーが発生している画面)
(同じ画面、同じレコードでも成功することもある)
(エラー時のサーバ側ログ)
© 2025 NTT DATA Japan Corporation 30
#1 アプリケーションと動作確認時の接続経路
⚫ PoC的な位置づけで、本番時の接続と異なる経路でテストを行っていた。
APL
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
動作確認
?
© 2025 NTT DATA Japan Corporation 31
#1 Serviceの比較
(CloudNativePGが生成したService) (外部からの接続用に作成したService)
© 2025 NTT DATA Japan Corporation 32
#1 Podのラベルを確認する
⚫ プライマリを指すためのSelectorは cnpg.io/instanceRole=primary
⚫ cnpg.io/podRole=instance は全てのインスタンスを指す。
⚫ cnpg.io/podRole=instance も「読取可能な何処かに繋がる」エンドポイントで使われている。
(プライマリPodのラベル) (スタンバイPodのラベル)
© 2025 NTT DATA Japan Corporation 33
#1 まとめ
⚫ データベースのクラスターにおいて、各インスタンスの役割理解は重要。
⚫ Database on Kubernetesでは、それらの役割はLabelで表現され、Operatorが管理する。
• カスタムエンドポイントを追加する場合には、Operatorの仕様を理解しないと、
今回のようにトラブルが発生する可能性あり。
⚫ Read/Write、Read、ReadOnlyなどのエンドポイントは、殆どのOperatorで生成されるため、
アプリケーションはどのクエリを何処に投げるかをきちんと考えて設計する。
• 全てRead/Writeというのも良くない。
• Readを分散するために、ReadOnlyエンドポイントの活用は重要。
© 2025 NTT DATA Japan Corporation 34
© 2025 NTT DATA Japan Corporation
5.
#2 生き返らないクラスター
© 2025 NTT DATA Japan Corporation 35
#2 PostgreSQLクラスターの状態を確認
⚫ エラーの原因!?
⚫ プライマリが落ちて、
スタンバイも昇格していない
© 2025 NTT DATA Japan Corporation 36
#2 CloudNativePGでWAL領域があふれると、
⚫ 基本的に同じディスク構成となるため、フェイルオーバしてもそちらもあふれる。
⚫ そのため、CloudNativePGではWALあふれでフェイルオーバしない仕様となっている。
プライマリ スタンバイ① スタンバイ②
Data WAL WAL Data WAL Data
この仕様がない場合、プライマリからスタンバイへフェイルオーバして、切り替わり先で障害が発生する。
それが再度フェイルオーバを引き起こし、クラスター内でぱたぱた切り替わるような状態となる。
DBではもっとも避けるべき状況の1つ。
© 2025 NTT DATA Japan Corporation 37
#2 PVC/PVのResizeとは
⚫ Volume拡張では、PVに対応するストレージの拡張だけではなく、コンテナ内のファイル
システムで利用できるサイズも拡張される。
Snapshot
Snapshot
Snapshot
RW
R
RO
P
S
S
© 2025 NTT DATA Japan Corporation 38
#2 PVCの拡張作業
$ kubectl patch pvc production-db-2-wal -p "{¥"spec¥":{¥"resources¥":{¥"requests¥":{¥"storage¥": ¥"5Gi¥"}}}}"
• PVCの確認。WAL用PVCは全て2Gi。
• kubectl patchでPVCを拡張PVCの確認。
• PVC、PVともに拡張されていることを確認。
© 2025 NTT DATA Japan Corporation 39
#2 まとめ
⚫ データベースで高可用性構成を組んでも、フェイルオーバされないケースは存在する。
• (今回のような)ディスクあふれのケース
• 全インスタンスに関わる致命的なパラメータの誤り
⚫ そうした際、Kubernetesリソースを変更する正しい手順を理解しておくことは重要。
• ボリューム拡張では、PVのサイズを直接編集してはいけない。
• ファイルシステムの拡張等、一連の処理が動かない可能性あり
• PVCのサイズを拡張し、以降はKubernetesおよびCSIドライバーが担当。
⚫ こんなことにならないように、そもそもディスク使用量の監視をしましょう。
© 2025 NTT DATA Japan Corporation 41
© 2025 NTT DATA Japan Corporation
6.
#3 消えないで!テーブル!?
© 2025 NTT DATA Japan Corporation 42
⚫ 過去の任意の時点の状態にデータベースをリカバリする機能
⚫ ベースバックアップとWAL(更新ログ)を組み合わせて実現
#3 PITR(Point-In-Time Recovery)とは
ベースバックアップ
WAL(更新ログ)
この時点にリカバリ
ベースバックアップにWALを適用することでリカバリ
© 2025 NTT DATA Japan Corporation 43
#3 CloudNativePGにおけるPITRの注意点
⚫ ベースバックアップの保存先として、
オブジェクトストレージとVolumeSnapshot
を選択できる。
⚫ インプレースのPITRはサポートしておらず
新規クラスターとしてリカバリされる
バックアップ
既存クラスター 新規クラスター
バックアップ
クラスター
クラスター
Snapshot
VolumeSnapshot
インプレースリカバリ
新規クラスターとしてリカバリ
© 2025 NTT DATA Japan Corporation 44
#3 バックアップ設定とテーブル削除日時
⚫ 毎日0時00分00秒にVolumeSnapshotを取得
⚫ 2025年5月23日15時00分01秒にテーブル削除
⚫ オブジェクトストレージにWALを保存
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: production-db-backup
spec:
schedule: "0 0 0 * * *"
backupOwnerReference: self
cluster:
name: production-db
5月22日
0時00分00秒
5月23日
0時00分00秒
5月23日
15時00分01秒
Volume
Snapshot
Volume
Snapshot
テーブル
削除
backup.yaml
© 2025 NTT DATA Japan Corporation 45
#3 リカバリのフロー
production-db
のバックアップ
削除したテーブルの
ダンプファイル
1. 新規クラスター
をテーブル削除
直前にPITR
production-db
recovery-db
2. テーブルデータを
pg_dumpで抽出
3. 抽出したデータを
元のクラスターに
pg_restoreで復旧
⚫ pg_dump:PostgreSQLデータベースのバックアップを取得するツール
⚫ pg_restore:pg_dumpで作成したバックアップをリストアするツール
© 2025 NTT DATA Japan Corporation 46
#3 リカバリー用DBのYAML
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: recovery-db
spec:
instances: 1
bootstrap:
recovery:
backup:
name: production-db-backup
recoveryTarget:
targetTime: "2025-05-23 15:00:00.000000+09"
recovery-db.yaml
⚫ テーブルデータを抽出する
だけなので1インスタンスで作成
⚫ bootstrapセクションに
バックアップとリストアの情報を設定
⚫ 新規クラスター名
© 2025 NTT DATA Japan Corporation 47
#3 PITR実行時のログ
⚫ recovery-dbのログ
⚫ recovery-dbの状態
$ kubectl logs recovery-db-1
{"level":"info","ts":"2025-05-
20T12:20:03.561931773Z","logger":"postgres","msg":"record","logging_pod":"recovery-db-
1","record":{"log_time":"2025-05-20 12:20:03.561
UTC","process_id":"26","session_id":"682c7373.1a","session_line_num":"3","session_start_time":"2025-05-20
12:20:03 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000",
"message":"redo starts at 0/3000028","backend_type":"startup","query_id":"0"}}
…
{"level":"info","ts":"2025-05-
20T12:20:03.562299787Z","logger":"postgres","msg":"record","logging_pod":"recovery-db-
1","record":{"log_time":"2025-05-20 12:20:03.561
UTC","process_id":"26","session_id":"682c7373.1a","session_line_num":"5","session_start_time":"2025-05-20
12:20:03 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000",
"message":"redo done at 0/30000F8 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00
s","backend_type":"startup","query_id":"0"}}
$ kubectl get pod recovery-db-1
NAME READY STATUS RESTARTS AGE
recovery-db-1 1/1 Running 0 35s
© 2025 NTT DATA Japan Corporation 48
#3 pg_dump/pg_restore
ベースバックアップ
WAL(更新ログ)
pg_dump
pg_restore
customers.dump
© 2025 NTT DATA Japan Corporation 49
#3 正常にリストアできているかを確認
⚫ customersテーブルのレコード数を取得
⚫ 今回は1つのテーブルをリストアするだけで復旧したが、複数のテーブルをリストアしたり、
テーブル間の整合性を保ちつつリカバリーするなど、様々な復旧パターンがある。
$ psql –c "SELECT COUNT(*) FROM customers"
count
-------
1352
(1 row)
© 2025 NTT DATA Japan Corporation 50
#3 まとめ
⚫ オペミスが発生しにくい設定をしたうえで、リカバリできるようにしておくことが重要。
• 自動コミット機能をオフにして、ロールバックできるようにする(PostgreSQL限定)。
• オペミスをしたとしても、リカバリできるように手順をドキュメント化しておく。
⚫ バックアップ・リカバリの適切な手段は環境や要件によって異なる。
• それぞれの環境や要件に合わせた適切な方法を確認しておく。
• バックアップを取得するだけではなく、リカバリまで必ず確認しておく。
⚫ CloudNativePGではインプレースのPITRは不可。
• 他のトランザクションデータを消してしまったりするので、
そもそもIn-placeのリカバリは避けるべきケースが多い。
© 2025 NTT DATA Japan Corporation 51
© 2025 NTT DATA Japan Corporation
7.
まとめ
© 2025 NTT DATA Japan Corporation 52
エピローグ
⚫ 色々と対応はおわったはずですが、、、
(あらためて今回の登場人物)
藤井さん
カトウ君 こばさん
ポスグレチーム
アプリケーションチーム
依頼
問い合わせ
記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot (20)

PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
PDF
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
NTT DATA Technology & Innovation
 
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
NTT DATA Technology & Innovation
 
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
NTT DATA Technology & Innovation
 
PPTX
Sql server のバックアップとリストアの基礎
Masayuki Ozawa
 
PDF
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
 
PDF
使ってみませんか?pg_hint_plan
NTT DATA OSS Professional Services
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
NTT DATA Technology & Innovation
 
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
NTT DATA Technology & Innovation
 
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
NTT DATA Technology & Innovation
 
Sql server のバックアップとリストアの基礎
Masayuki Ozawa
 
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
 
使ってみませんか?pg_hint_plan
NTT DATA OSS Professional Services
 

Similar to つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料) (20)

PDF
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
PDF
SQL Server エンジニア のための コンテナ入門(k8s編)
Tomoyuki Oota
 
PDF
SQL Server コンテナ入門(Kubernetes編)
Tomoyuki Oota
 
PDF
ゆるふわLinux-HA 〜PostgreSQL編〜
Taro Matsuzawa
 
PDF
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
 
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
Insight Technology, Inc.
 
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
NTT DATA Technology & Innovation
 
PDF
Let's scale-out PostgreSQL using Citus (Japanese)
Noriyoshi Shinoda
 
PPTX
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
kubernetes(GKE)環境におけるdatadog利用
Koichi HARUNA
 
PDF
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
PDF
Postgresql on kubernetesへの道
t8kobayashi
 
PDF
PostgreSQL UDF in Rust(Jpn) ver.2
Katsumi INOUE
 
PDF
20190314 PGStrom Arrow_Fdw
Kohei KaiGai
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
NTT DATA Technology & Innovation
 
PostgreSQL9.3新機能紹介
NTT DATA OSS Professional Services
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
SQL Server エンジニア のための コンテナ入門(k8s編)
Tomoyuki Oota
 
SQL Server コンテナ入門(Kubernetes編)
Tomoyuki Oota
 
ゆるふわLinux-HA 〜PostgreSQL編〜
Taro Matsuzawa
 
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
Insight Technology, Inc.
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
NTT DATA Technology & Innovation
 
Let's scale-out PostgreSQL using Citus (Japanese)
Noriyoshi Shinoda
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
kubernetes(GKE)環境におけるdatadog利用
Koichi HARUNA
 
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
Postgresql on kubernetesへの道
t8kobayashi
 
PostgreSQL UDF in Rust(Jpn) ver.2
Katsumi INOUE
 
20190314 PGStrom Arrow_Fdw
Kohei KaiGai
 
Ad

More from NTT DATA Technology & Innovation (20)

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
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
 
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
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
 
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
 
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
Ad

Recently uploaded (13)

PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PDF
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
PDF
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
PDF
安尾 萌, 森野 穣, 松下 光範. 災害情報収集におけるSNSのメディア特性に関する一検討, 人工知能学会第30回インタラクティブ情報アクセスと可視化マ...
Matsushita Laboratory
 
PDF
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
第3回デジタル理学療法研究会学術大会シンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」の講演資料.
Matsushita Laboratory
 
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
漁船に搭載されている電子装備と漁法について_VRC海洋学研究会_海のLT会発表資料
Yuuitirou528 default
 
安尾 萌, 森野 穣, 松下 光範. 災害情報収集におけるSNSのメディア特性に関する一検討, 人工知能学会第30回インタラクティブ情報アクセスと可視化マ...
Matsushita Laboratory
 
第3回デジタル理学療法学会のシンポジウム「デジタル理学療法の組織活用:教育・管理・研究を繋ぐ新たな地平」での話題提供
Matsushita Laboratory
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 

つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)

  • 1. © 2025 NTT DATA Japan Corporation つくって壊して直して学ぶ Database on Kubernetes 2025/5/23 株式会社NTTデータ 小林 隆浩、加藤 慎也 れ
  • 2. © 2025 NTT DATA Japan Corporation 2 今日話すこと ⚫ Database(PostgreSQL) on Kubernetesを構築する際に気にするべきポイントや、 実際の運用で発生するかも知れない障害とその対応を紹介する。 • 「壊して」というより「壊れて学ぶ」のやり方 ⚫ Operatorはここ数年で進化したが、やはりDBには固有の運用があり、理解が難しい。 • 例えば、バックアップやリストア • 急なDBクラスターの停止、など ⚫ Kubernetesのストレージ周りの機能を使いながら、Database on Kubernetesを運用する際に そうした機能をどう活かすかについても、一緒に学んでいこう。
  • 3. © 2025 NTT DATA Japan Corporation 3 アジェンダ 1. はじまり - DB on Kubernetesは突然に - 2. つくって学ぶDatabase on Kubernetes 3. 壊して直して学ぶDatabase on Kubernetes 4. 問い合わせ#1 「晴れ時々エラー!?」 5. 問い合わせ#2 「生き返らないクラスター!?」 6. 問い合わせ#3 「消えないで!テーブル!?」 7. まとめ
  • 4. © 2025 NTT DATA Japan Corporation 4 © 2025 NTT DATA Japan Corporation 1. はじまり
  • 5. © 2025 NTT DATA Japan Corporation 5 Database on Kubernetesは突然に ⚫ カトウ君に上司の藤井さんから依頼が届いているようです! (今回の登場人物) 藤井さん カトウ君 こばさん ポスグレチーム アプリケーションチーム 依頼 問い合わせ
  • 6. © 2025 NTT DATA Japan Corporation 6 データベース要件の確認 制定日:2024/8/1 0 DB種別 ■ PostgreSQL □ MySQL □ Oracle(ライセンスは持ち込みのみ) ※必須 1 インスタンス数 □ 1 (冗長性なし。開発環境での利用を想定) ※必須 □ 2 (冗長性あり。非同期を前提とするため、ラグ・データ損失を許容) ■ 3 (冗長性あり。同期を前提とするため、データ損失はゼロ) 2 バックアップ □ コールドバックアップ ※必須 □ オンラインバックアップ ■ オンラインバックアップ+アーカイブログ (PITRに対応可能) 3 保持期間 30 日間 ※必須 4 申請日 西暦 2025 年 4 月 1 日 ※必須 5 申請承認者 ※必須 金融第一事業部 部長 xxxxx 6 記入者 事業部等・担当名 金融第一事業部 ※必須 氏名 yyyyy ※必須 7 連絡先 事業部等・担当名 ■ 記入者と同じ場合はこちらをチェック 2024.8版 DBクラスター 作成申請書 担当・グループ名 役職 氏名 担当・グループ名
  • 7. © 2025 NTT DATA Japan Corporation 7 想定するPostgreSQLの構成 ⚫ 3インスタンスで同期レプリケーションを構成し、バックアップとアーカイブを取得する。 プライマリ スタンバイ① スタンバイ② Data WAL アーカ イブ WAL Data WAL Data 更新 参照 WALをスタンバイに転送 ①、②のうち1台に、同 期レプリケーションが完了 すればOK 定期的にWALをアーカイブ バック アップ
  • 8. © 2025 NTT DATA Japan Corporation 8 (参考)RDSのMulti-AZ DB Cluster ⚫ 3インスタンスの構成。 ⚫ それぞれのインスタンスが、別AZ に配置される。 ⚫ Write以外のインスタンスでも、 読み取りクエリの処理が可能。 但し、更新ラグが発生する。 ⚫ エンドポイントは下記の3種類。 • Read/Write • Readのみ • 個別インスタンス https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html#multi-az-db-clusters-concepts-overview
  • 9. © 2025 NTT DATA Japan Corporation 9 © 2025 NTT DATA Japan Corporation 2. つくって学ぶ Database on Kubernetes
  • 10. © 2025 NTT DATA Japan Corporation 10 KubernetesにおけるPostgreSQL Operatorとは ⚫ Kubernetes上でのデータベース運用を補助する機能が実装されている。 • レプリケーションを使った高可用性構成、障害時切り替え等をYAMLで簡単に設定できる。 • バックアップ/リストアも設定可能で、クラウドストレージと連携できる。 PostgreSQL Operator プライマリ スタンバイ スタンバイ プライマリ向けService
  • 11. © 2025 NTT DATA Japan Corporation 11 PostgreSQL Operatorの比較 ⚫ PostgreSQL向けにも複数のOperatorが存在。今回はCloudNativePGを利用する。 名称 開発主体 ライセンス 備考 PGO Crunchy Data Apache 2.0 * • 古参Operatorの1つ。機能は十分揃っている。 • 従来のPostgreSQL向けOSSを組み合わせた構成。 • コンテナイメージの商用利用が実質できない。 postgres-operator Zalando MIT • 古参Operatorの1つ。機能は十分揃っている。 • 従来のPostgreSQL向けOSSを組み合わせた構成。 • Kubernetesに詳しいエンジニアが利用しやすい。 CloudNativePG EDB Apache 2.0 • PostgreSQL開発で有名なEDBによるOperator。 • EDBが提供されているマネージドサービス内部でも利用されている。 • 2025年、CNCF Sandbox Projectに。 StackGres OnGres AGPL 3 • 充実した管理UIを提供。 • ライセンスがネックとなる可能性あり。 Percona Operator for PostgreSQL Percona Apache 2.0 • MySQLやPostgreSQLの開発で有名なPerconaのOperator。 • PGOをフォークして開発。完全OSSでの利用が可能。 • 比較的新しいOperator。
  • 12. © 2025 NTT DATA Japan Corporation 12 PostgreSQL on Kubernetesのシステム構成 ⚫ GKE上でCloudNativePGを用いて、以下の構成のPostgreSQL on Kubernetesを構築する。 Snapshot Snapshot Snapshot RW R RO P S S WALをGCSにアーカイブ
  • 13. © 2025 NTT DATA Japan Corporation 13 (例)PostgreSQLクラスター用のYAML ⚫ 3インスタンス ⚫ 同期レプリケーションの設定 ⚫ データストレージ ⚫ WAL用のストレージ ⚫ バックアップ設定
  • 14. © 2025 NTT DATA Japan Corporation 14 © 2025 NTT DATA Japan Corporation 3. 壊して直して学ぶ Database on Kubernetes
  • 15. © 2025 NTT DATA Japan Corporation 15 ①壊して直して学ぶ:Podの障害 Snapshot Snapshot Snapshot RW R RO P S S Primary Podの障害
  • 16. © 2025 NTT DATA Japan Corporation 16 ①Primary Podの疑似障害 ⚫ クラスタの状態を確認 ⚫ Primary Podを削除 $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-1 0/6055A58 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-2 0/6055A58 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn test-db-3 0/6055A58 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm $ kubectl delete pod test-db-1 pod "test-db-1" deleted
  • 17. © 2025 NTT DATA Japan Corporation 17 ①Primary Pod障害の確認と復旧 ⚫ CloudNativePGのログ ⚫ クラスタの状態を確認 $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-2 0/70066E0 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn test-db-1 0/70066E0 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-3 0/70066E0 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm {"level":"info","ts":"2025-05-19T00:54:27.598548554Z","msg":"Current primary isn't healthy, initiating a failover","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluste r":{"name":"test-db","namespace":"default"},"namespace":"default","name":"test- db","reconcileID":"a90e0a46-6bf1-4f36-9dca-b83f6bb5567e"} {"level":"info","ts":"2025-05-19T00:54:27.740028855Z","msg":"Failing over", "controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name" :"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"a90e0a46-6bf1- 4f36-9dca-b83f6bb5567e","newPrimary":"test-db-2"}
  • 18. © 2025 NTT DATA Japan Corporation 18 ②壊して直して学ぶ:Podの障害 Snapshot Snapshot Snapshot RW R RO P S S Standby Podの障害
  • 19. © 2025 NTT DATA Japan Corporation 19 ②Standby Podの疑似障害 ⚫ クラスタの状態を確認 ⚫ Standby Podを削除 $ kubectl delete pod test-db-1 pod "test-db-1" deleted $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
  • 20. © 2025 NTT DATA Japan Corporation 20 ②Standby Pod障害の確認と復旧 ⚫ CloudNativePGのログ ⚫ クラスタの状態を確認 {“level”:“info”,"ts":"2025-05-19T01:06:20.510661896Z","msg":"Creating new Pod to reattach a PVC", "controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name" :"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"9812324d-b86d- 4d21-a43d-39fb6ac7f77b","pod":"test-db-1","pvc":"test-db-1"} {"level":"info","ts":"2025-05-19T01:06:31.80588422Z","msg":"Setting replica label", "controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name" :"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"eb962e67-b7a2- 4ba0-9bce-29b5c4de5049","pod":"test-db-1"} {"level":"info","ts":"2025-05-19T01:06:37.768017501Z","msg":"Cluster has become healthy", "controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name" :"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"c47b81a5-dc5b- 4c9c-9673-edfbd7dfac6e"} $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
  • 21. © 2025 NTT DATA Japan Corporation 21 ⚫ CloudNativePGはデフォルトでノード障害に耐えられる設定となっている。 ゾーン 障害に備えたPodの配置戦略(podAntiAffinity) ノード P S S ゾーン ノード P ゾーン S S ノード P S S ノード障害で全滅 ノード障害に耐性 ゾーン障害に耐性 enablePodAntiAffinity:true topologyKey:kubernetes.io/hostname enablePodAntiAffinity:false enablePodAntiAffinity:true topologyKey:topology.kubernetes.io/zone
  • 22. © 2025 NTT DATA Japan Corporation 22 ⚫ 特定のラベルをもつノードにスケジューリングする。 ⚫ データベースは特定HWが設定されたノードにスケジューリングしたい場合などに有用。 • DB高速化のためにメモリ増強、高速SSDを搭載など • 今後はGPU搭載なども要件として登場するかもしれない 性能も考慮したPodの配置戦略(nodeSelector) nttdata.com/role: db nttdata.com/role: app
  • 23. © 2025 NTT DATA Japan Corporation 23 CloudNativePGでの設定方法 apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: pgcluster-prod spec: affinity: enablePodAntiAffinity: true topologyKey: kubernetes.io/hostname podAntiAffinityType: required nodeSelector: nttdata.com/role: db ⚫ podAntiAffinityを有効化 ⚫ ホスト名で分散 ⚫ 条件を満たすことが必須 ⚫ データベース用ノードに ⚫ GKEノードプールに ラベルを設定済み
  • 24. © 2025 NTT DATA Japan Corporation 24 ③壊して直して学ぶ:Nodeの障害 Snapshot Snapshot Snapshot RW R RO P S S Primary Podが存在するノードの障害
  • 25. © 2025 NTT DATA Japan Corporation 25 ③Nodeの疑似障害 ⚫ クラスタの状態を確認 ⚫ Primary Podのあるノードを削除 $ kubectl delete node gke-cluster-bb3caaa1-2swn node "gke-cluster-kato-default-pool-bb3caaa1-2swn" deleted $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-2 0/9000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-2swn test-db-1 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-3 0/9000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm
  • 26. © 2025 NTT DATA Japan Corporation 26 ③Node障害の確認と復旧 ⚫ CloudNativePGのログ ⚫ クラスタの状態を確認 {"level":"info","ts":"2025-05-19T01:33:40.453415481Z","msg":"Current primary isn't healthy, initiating a failover","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluste r":{"name":"test-db","namespace":"default"},"namespace":"default","name":"test- db","reconcileID":"3e4c576c-1e4a-4b0d-9bd0-3fd129e86716"} {"level":"info","ts":"2025-05-19T01:33:40.718655379Z","msg":"Failing over", "controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name" :"test-db","namespace":"default"},"namespace":"default","name":"test-db","reconcileID":"3e4c576c-1e4a- 4b0d-9bd0-3fd129e86716","newPrimary":"test-db-1"} $ kubectl cnpg status test-db Instances status Name Current LSN Replication role Status QoS Manager Version Node ---- ----------- ---------------- ------ --- --------------- ---- test-db-1 0/B000000 Primary OK BestEffort 1.25.1 gke-cluster-bb3caaa1-hdsv test-db-2 0/B000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-td3t test-db-3 0/B000000 Standby (sync) OK BestEffort 1.25.1 gke-cluster-bb3caaa1-zpcm z
  • 27. © 2025 NTT DATA Japan Corporation 27 ここまでのまとめ ⚫ PostgreSQL Operatorは複数あるので、要件に合わせて選択しましょう。 • 机上での比較だとあまり差異がわからないので、実際に使ってみることも重要 ⚫ すべての障害への対策は不可能だが、何が許容できる・できないかを整理することが重要。 • Pod障害/ノード障害/ゾーン障害/リージョン障害 • RPO/RTO ⚫ パフォーマンスの観点からデータベースPodはアプリケーションPodとは 別のノードにスケジューリングすることも考える。 • 大容量メモリ・高いIO性能/低遅延・広帯域の安定したネットワークが必要 • 他Podとのリソース競合を避ける
  • 28. © 2025 NTT DATA Japan Corporation 28 © 2025 NTT DATA Japan Corporation 4. #1 晴れ時々エラー
  • 29. © 2025 NTT DATA Japan Corporation 29 #1 エラーになったり、ならなかったり? (更新時にエラーが発生している画面) (同じ画面、同じレコードでも成功することもある) (エラー時のサーバ側ログ)
  • 30. © 2025 NTT DATA Japan Corporation 30 #1 アプリケーションと動作確認時の接続経路 ⚫ PoC的な位置づけで、本番時の接続と異なる経路でテストを行っていた。 APL Snapshot Snapshot Snapshot RW R RO P S S 動作確認 ?
  • 31. © 2025 NTT DATA Japan Corporation 31 #1 Serviceの比較 (CloudNativePGが生成したService) (外部からの接続用に作成したService)
  • 32. © 2025 NTT DATA Japan Corporation 32 #1 Podのラベルを確認する ⚫ プライマリを指すためのSelectorは cnpg.io/instanceRole=primary ⚫ cnpg.io/podRole=instance は全てのインスタンスを指す。 ⚫ cnpg.io/podRole=instance も「読取可能な何処かに繋がる」エンドポイントで使われている。 (プライマリPodのラベル) (スタンバイPodのラベル)
  • 33. © 2025 NTT DATA Japan Corporation 33 #1 まとめ ⚫ データベースのクラスターにおいて、各インスタンスの役割理解は重要。 ⚫ Database on Kubernetesでは、それらの役割はLabelで表現され、Operatorが管理する。 • カスタムエンドポイントを追加する場合には、Operatorの仕様を理解しないと、 今回のようにトラブルが発生する可能性あり。 ⚫ Read/Write、Read、ReadOnlyなどのエンドポイントは、殆どのOperatorで生成されるため、 アプリケーションはどのクエリを何処に投げるかをきちんと考えて設計する。 • 全てRead/Writeというのも良くない。 • Readを分散するために、ReadOnlyエンドポイントの活用は重要。
  • 34. © 2025 NTT DATA Japan Corporation 34 © 2025 NTT DATA Japan Corporation 5. #2 生き返らないクラスター
  • 35. © 2025 NTT DATA Japan Corporation 35 #2 PostgreSQLクラスターの状態を確認 ⚫ エラーの原因!? ⚫ プライマリが落ちて、 スタンバイも昇格していない
  • 36. © 2025 NTT DATA Japan Corporation 36 #2 CloudNativePGでWAL領域があふれると、 ⚫ 基本的に同じディスク構成となるため、フェイルオーバしてもそちらもあふれる。 ⚫ そのため、CloudNativePGではWALあふれでフェイルオーバしない仕様となっている。 プライマリ スタンバイ① スタンバイ② Data WAL WAL Data WAL Data この仕様がない場合、プライマリからスタンバイへフェイルオーバして、切り替わり先で障害が発生する。 それが再度フェイルオーバを引き起こし、クラスター内でぱたぱた切り替わるような状態となる。 DBではもっとも避けるべき状況の1つ。
  • 37. © 2025 NTT DATA Japan Corporation 37 #2 PVC/PVのResizeとは ⚫ Volume拡張では、PVに対応するストレージの拡張だけではなく、コンテナ内のファイル システムで利用できるサイズも拡張される。 Snapshot Snapshot Snapshot RW R RO P S S
  • 38. © 2025 NTT DATA Japan Corporation 38 #2 PVCの拡張作業 $ kubectl patch pvc production-db-2-wal -p "{¥"spec¥":{¥"resources¥":{¥"requests¥":{¥"storage¥": ¥"5Gi¥"}}}}" • PVCの確認。WAL用PVCは全て2Gi。 • kubectl patchでPVCを拡張PVCの確認。 • PVC、PVともに拡張されていることを確認。
  • 39. © 2025 NTT DATA Japan Corporation 39 #2 まとめ ⚫ データベースで高可用性構成を組んでも、フェイルオーバされないケースは存在する。 • (今回のような)ディスクあふれのケース • 全インスタンスに関わる致命的なパラメータの誤り ⚫ そうした際、Kubernetesリソースを変更する正しい手順を理解しておくことは重要。 • ボリューム拡張では、PVのサイズを直接編集してはいけない。 • ファイルシステムの拡張等、一連の処理が動かない可能性あり • PVCのサイズを拡張し、以降はKubernetesおよびCSIドライバーが担当。 ⚫ こんなことにならないように、そもそもディスク使用量の監視をしましょう。
  • 40. © 2025 NTT DATA Japan Corporation 41 © 2025 NTT DATA Japan Corporation 6. #3 消えないで!テーブル!?
  • 41. © 2025 NTT DATA Japan Corporation 42 ⚫ 過去の任意の時点の状態にデータベースをリカバリする機能 ⚫ ベースバックアップとWAL(更新ログ)を組み合わせて実現 #3 PITR(Point-In-Time Recovery)とは ベースバックアップ WAL(更新ログ) この時点にリカバリ ベースバックアップにWALを適用することでリカバリ
  • 42. © 2025 NTT DATA Japan Corporation 43 #3 CloudNativePGにおけるPITRの注意点 ⚫ ベースバックアップの保存先として、 オブジェクトストレージとVolumeSnapshot を選択できる。 ⚫ インプレースのPITRはサポートしておらず 新規クラスターとしてリカバリされる バックアップ 既存クラスター 新規クラスター バックアップ クラスター クラスター Snapshot VolumeSnapshot インプレースリカバリ 新規クラスターとしてリカバリ
  • 43. © 2025 NTT DATA Japan Corporation 44 #3 バックアップ設定とテーブル削除日時 ⚫ 毎日0時00分00秒にVolumeSnapshotを取得 ⚫ 2025年5月23日15時00分01秒にテーブル削除 ⚫ オブジェクトストレージにWALを保存 apiVersion: postgresql.cnpg.io/v1 kind: ScheduledBackup metadata: name: production-db-backup spec: schedule: "0 0 0 * * *" backupOwnerReference: self cluster: name: production-db 5月22日 0時00分00秒 5月23日 0時00分00秒 5月23日 15時00分01秒 Volume Snapshot Volume Snapshot テーブル 削除 backup.yaml
  • 44. © 2025 NTT DATA Japan Corporation 45 #3 リカバリのフロー production-db のバックアップ 削除したテーブルの ダンプファイル 1. 新規クラスター をテーブル削除 直前にPITR production-db recovery-db 2. テーブルデータを pg_dumpで抽出 3. 抽出したデータを 元のクラスターに pg_restoreで復旧 ⚫ pg_dump:PostgreSQLデータベースのバックアップを取得するツール ⚫ pg_restore:pg_dumpで作成したバックアップをリストアするツール
  • 45. © 2025 NTT DATA Japan Corporation 46 #3 リカバリー用DBのYAML apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: recovery-db spec: instances: 1 bootstrap: recovery: backup: name: production-db-backup recoveryTarget: targetTime: "2025-05-23 15:00:00.000000+09" recovery-db.yaml ⚫ テーブルデータを抽出する だけなので1インスタンスで作成 ⚫ bootstrapセクションに バックアップとリストアの情報を設定 ⚫ 新規クラスター名
  • 46. © 2025 NTT DATA Japan Corporation 47 #3 PITR実行時のログ ⚫ recovery-dbのログ ⚫ recovery-dbの状態 $ kubectl logs recovery-db-1 {"level":"info","ts":"2025-05- 20T12:20:03.561931773Z","logger":"postgres","msg":"record","logging_pod":"recovery-db- 1","record":{"log_time":"2025-05-20 12:20:03.561 UTC","process_id":"26","session_id":"682c7373.1a","session_line_num":"3","session_start_time":"2025-05-20 12:20:03 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000", "message":"redo starts at 0/3000028","backend_type":"startup","query_id":"0"}} … {"level":"info","ts":"2025-05- 20T12:20:03.562299787Z","logger":"postgres","msg":"record","logging_pod":"recovery-db- 1","record":{"log_time":"2025-05-20 12:20:03.561 UTC","process_id":"26","session_id":"682c7373.1a","session_line_num":"5","session_start_time":"2025-05-20 12:20:03 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000", "message":"redo done at 0/30000F8 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s","backend_type":"startup","query_id":"0"}} $ kubectl get pod recovery-db-1 NAME READY STATUS RESTARTS AGE recovery-db-1 1/1 Running 0 35s
  • 47. © 2025 NTT DATA Japan Corporation 48 #3 pg_dump/pg_restore ベースバックアップ WAL(更新ログ) pg_dump pg_restore customers.dump
  • 48. © 2025 NTT DATA Japan Corporation 49 #3 正常にリストアできているかを確認 ⚫ customersテーブルのレコード数を取得 ⚫ 今回は1つのテーブルをリストアするだけで復旧したが、複数のテーブルをリストアしたり、 テーブル間の整合性を保ちつつリカバリーするなど、様々な復旧パターンがある。 $ psql –c "SELECT COUNT(*) FROM customers" count ------- 1352 (1 row)
  • 49. © 2025 NTT DATA Japan Corporation 50 #3 まとめ ⚫ オペミスが発生しにくい設定をしたうえで、リカバリできるようにしておくことが重要。 • 自動コミット機能をオフにして、ロールバックできるようにする(PostgreSQL限定)。 • オペミスをしたとしても、リカバリできるように手順をドキュメント化しておく。 ⚫ バックアップ・リカバリの適切な手段は環境や要件によって異なる。 • それぞれの環境や要件に合わせた適切な方法を確認しておく。 • バックアップを取得するだけではなく、リカバリまで必ず確認しておく。 ⚫ CloudNativePGではインプレースのPITRは不可。 • 他のトランザクションデータを消してしまったりするので、 そもそもIn-placeのリカバリは避けるべきケースが多い。
  • 50. © 2025 NTT DATA Japan Corporation 51 © 2025 NTT DATA Japan Corporation 7. まとめ
  • 51. © 2025 NTT DATA Japan Corporation 52 エピローグ ⚫ 色々と対応はおわったはずですが、、、 (あらためて今回の登場人物) 藤井さん カトウ君 こばさん ポスグレチーム アプリケーションチーム 依頼 問い合わせ