Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
© 2020 NTT DATA Corporation 1 © 2020 NTT DATA Corporation
第15回 PostgreSQLアンカンファレンス@オンライン
オンライン物理バックアップの
排他モードと非排他モードについて
2020年7月30日
株式会社NTTデータ 藤井雅雄 @fujii_masao
© 2020 NTT DATA Corporation 2
藤井 雅雄 @fujii_masao
Database Technical Lead @ NTTデータ
データベース研究開発、PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション(非同期 / 同期 / カスケード / クォーラムコミット)
WAL圧縮、バックアップ進捗
pg_bigm(全文検索モジュール)コミッタ
自己紹介
© 2020 NTT DATA Corporation 3
本講演について
講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
以前のアンカンファレンスの講演資料は公開済です。
PostgreSQL 13 での pg_stat_statements の改善について
PostgreSQL 13 での pg_basebackup の改善について
PostgreSQL 13 での レプリケーション関連 の改善について
© 2020 NTT DATA Corporation 4
オンライン物理バックアップの
排他モードと非排他モードについて
© 2020 NTT DATA Corporation 5
PostgreSQLで利用できるバックアップ手法
バックアップ
論理バックアップ
(SQLダンプ)
pg_dump /
pg_dumpall
物理バックアップ
オフラインバックアップ
(コールドバックアップ)
独自スクリプト(pg_ctl
stop + rsyncなど)
オンラインバックアップ
(ホットバックアップ)
pg_basebackup
外部ツール(pg_rman、
Barmanなど)
独自スクリプト
(pg_start_backup +
pg_stop_backup)
排他モード
非排他モード
© 2020 NTT DATA Corporation 6
PostgreSQLで利用できるバックアップ手法
バックアップ
論理バックアップ
(SQLダンプ)
pg_dump /
pg_dumpall
物理バックアップ
オフラインバックアップ
(コールドバックアップ)
独自スクリプト(pg_ctl
stop + rsyncなど)
オンラインバックアップ
(ホットバックアップ)
pg_basebackup
外部ツール(pg_rman、
Barmanなど)
独自スクリプト
(pg_start_backup +
pg_stop_backup)
排他モード
非排他モード
今日取り上げるバックアップ手法
© 2020 NTT DATA Corporation 7
ご存じでしょうか?
非排他的な手法が推奨され、
排他的な手法は推奨されず、将来的に削除されます。
https://www.postgresql.jp/document/current/html/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP
© 2020 NTT DATA Corporation 8
排他モード
① バックアップモードの開始
$ psql -c "SELECT pg_start_backup('mybackup')"
② DBクラスタのバックアップ
OSコマンドやスナップショットなどを使って、DBクラスタと全テーブルスペースを物理的にバックアップ
$ cp -a $PGDATA /tblspc1 /tblspc2 /backup
③ バックアップモードの終了
$ psql -c "SELECT pg_stop_backup()"
© 2020 NTT DATA Corporation 9
非排他モード
① バックアップモードの開始
$ psql
=# SELECT pg_start_backup('mybackup', false, false)
② DBクラスタのバックアップ
OSコマンドやスナップショットなどを使って、DBクラスタと全テーブルスペースを物理的にバックアップ
$ cp -a $PGDATA /tblspc1 /tblspc2 /backup
③ バックアップモードの終了
=# SELECT pg_stop_backup(false);
④ backup_labelとtablespace_mapのバックアップ
pg_stop_backup()の戻り値の内容から
backup_labelとtablespace_mapの2つのファイルを作成して、バックアップに含める
・第3引数にfalseを指定
・pg_start_backupを実行したセッションを
pg_stop_backupまで維持
・第1引数にfalseを指定
・pg_start_backupを実行したセッションで
pg_stop_backupを実行
© 2020 NTT DATA Corporation 10
非排他モード
=# SELECT * FROM pg_stop_backup(false);
lsn | labelfile | spcmapfile
-----------+---------------------------------------------------------------+-------------------------------
0/3000138 | START WAL LOCATION: 0/3000028 (file 000000010000000000000003)+| 16386 /dav/head-pgsql/tblspc2+
| CHECKPOINT LOCATION: 0/3000060 +| 16385 /dav/head-pgsql/tblspc1+
| BACKUP METHOD: streamed +|
| BACKUP FROM: master +|
| START TIME: 2020-07-06 23:55:11 JST +|
| LABEL: mybackup +|
| START TIMELINE: 1 +|
| |
(1 row)
backup_label tablespace_map
④-2 backup_labelとtablespace_mapをバックアップに格納
$ mv backup_label tablespace_map /backup
④-1 pg_stop_backup()の戻り値からbackup_labelとtablespace_mapのファイルを作成
© 2020 NTT DATA Corporation 11
排他モードと非排他モードの比較
排他モード 非排他モード
利用可能なバージョン 8.0以降 9.6以降
バックアップの
同時実行可能数
1 複数
pg_start_backupと
pg_stop_backupを
実行するセッション
同じまたは異なるセッション
 バックアップ中のセッション断による影響はない
 pg_stop_backupを忘れるとバックアップ
モードは終了しない(次回のバックアップ取得
が失敗する)
同じセッション
 セッション断によりバックアップが失敗する
(pg_start_backupからやり直し)
 セッションが切れればバックアップモードは終了
する
backup_labelと
tablespace_mapの
作成
pg_start_backupがDBクラスタ内に作成
 DBクラスタをバックアップすれば、各ファイルは
自動的にバックアップに含まれる
 バックアップ中にPostgreSQLがクラッシュす
ると、クラッシュリカバリが失敗する可能性があ
る(backup_labelがDBクラスタ内にある状
態でクラッシュリカバリが始まるため)
pg_stop_backupからユーザが作成
 ユーザが各ファイルをバックアップに含める必要
がある
 左記のリカバリ失敗の可能性はない(DBクラ
スタ内にbackup_labelは存在しないため)
© 2020 NTT DATA Corporation 12
排他モードでバックアップ中にクラッシュした場合のリカバリ失敗について
pg_start_backup
CHECKPOINT
1
2
3
4
5
? WALファイル
凡例
クラッシュ
CHECKPOINT
pg_stop_backup
各操作とWAL生成の流れ
クラッシュリカバリでは
最新CHECKPOINT
以降のWALを適用
backup_labelがある状態で
クラッシュリカバリが始まると、
pg_start_backup以降の
WALを適用
• backup_labelが
pg_start_backup以降
のWAL適用を指示
 ②~④のWALが削除済だと
リカバリ失敗
 未削除の場合もリカバリ時間
が長くなる
© 2020 NTT DATA Corporation 13
ご存じでしょうか?
非排他的な手法が推奨され、
排他的な手法は推奨されず、将来的に削除されます。
https://www.postgresql.jp/document/current/html/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP
© 2020 NTT DATA Corporation 14
排他モードを削除するパッチ
v14で排他モードを削除するパッチが提案されている
Remove deprecated exclusive backup mode
https://commitfest.postgresql.org/28/1913/
削除についてまだ議論中だが、v14で削除となる可能性が高い(ように見える)
• リカバリ失敗のリスクを危険視する開発者が多い
• 排他モードを利用中のユーザがいるため削除に反対する意見もあるが少数
• 「排他モードは将来的に削除」とv9.6で明記してから、v14リリース時には5年経過済
排他モードが削除されても問題ないでしょうか?
© 2020 NTT DATA Corporation 15
排他モードの削除に備えて
1. pg_basebackupまたは外部ツールに移行できるのであれば移行する
2. 独自スクリプトを改修して、非排他モードに移行する
3. (排他モードの必要性を強くコミュニティで主張して、排他モードを削除させない)
© 2020 NTT DATA Corporation 16
排他モードから非排他モードへの移行例
$ psql -c "SELECT pg_start_backup('test')"
$ cp -a /pgdata/data /backup
$ psql -c "SELECT pg_stop_backup()"
$ psql -f backup.sql
SELECT pg_start_backup('test', false, false);
¥! cp -a /pgdata/data /backup
SELECT
pg_file_write('/tmp/backup_label', labelfile, false),
pg_file_write('/tmp/tablespace_map', spcmapfile, false)
FROM pg_stop_backup(false);
¥! mv /tmp/backup_label /tmp/tablespace_map /backup/data
排
他
モ
ー
ド
非
排
他
モ
ー
ド
・同一セッション内でpg_start_backupと
pg_stop_backupを簡単に実行できるように、
バックアップのすべての操作をpsql内で実行する
・OSコマンドはpsqlメタコマンドの¥!を介して実行
・pg_stop_backupからのbackup_labelと
tablespace_mapの作成には、
pg_file_write関数を使う
・pg_file_write関数を使うにはadminpackの
エクステンションをCREATE EXTENSIONする
必要がある(セキュリティ上の問題がないかは要確認)
© 2020 NTT DATA Corporation 17
まとめ
pg_start_backupとpg_stop_backupを使ったバックアップには
排他モードと非排他モードがある
排他モードは将来的に削除される予定 (v14で削除の可能性がある)
© 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2020 NTT DATA Corporation 1 © 2020 NTT DATA Corporation 第15回 PostgreSQLアンカンファレンス@オンライン オンライン物理バックアップの 排他モードと非排他モードについて 2020年7月30日 株式会社NTTデータ 藤井雅雄 @fujii_masao
  • 2. © 2020 NTT DATA Corporation 2 藤井 雅雄 @fujii_masao Database Technical Lead @ NTTデータ データベース研究開発、PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション(非同期 / 同期 / カスケード / クォーラムコミット) WAL圧縮、バックアップ進捗 pg_bigm(全文検索モジュール)コミッタ 自己紹介
  • 3. © 2020 NTT DATA Corporation 3 本講演について 講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech 以前のアンカンファレンスの講演資料は公開済です。 PostgreSQL 13 での pg_stat_statements の改善について PostgreSQL 13 での pg_basebackup の改善について PostgreSQL 13 での レプリケーション関連 の改善について
  • 4. © 2020 NTT DATA Corporation 4 オンライン物理バックアップの 排他モードと非排他モードについて
  • 5. © 2020 NTT DATA Corporation 5 PostgreSQLで利用できるバックアップ手法 バックアップ 論理バックアップ (SQLダンプ) pg_dump / pg_dumpall 物理バックアップ オフラインバックアップ (コールドバックアップ) 独自スクリプト(pg_ctl stop + rsyncなど) オンラインバックアップ (ホットバックアップ) pg_basebackup 外部ツール(pg_rman、 Barmanなど) 独自スクリプト (pg_start_backup + pg_stop_backup) 排他モード 非排他モード
  • 6. © 2020 NTT DATA Corporation 6 PostgreSQLで利用できるバックアップ手法 バックアップ 論理バックアップ (SQLダンプ) pg_dump / pg_dumpall 物理バックアップ オフラインバックアップ (コールドバックアップ) 独自スクリプト(pg_ctl stop + rsyncなど) オンラインバックアップ (ホットバックアップ) pg_basebackup 外部ツール(pg_rman、 Barmanなど) 独自スクリプト (pg_start_backup + pg_stop_backup) 排他モード 非排他モード 今日取り上げるバックアップ手法
  • 7. © 2020 NTT DATA Corporation 7 ご存じでしょうか? 非排他的な手法が推奨され、 排他的な手法は推奨されず、将来的に削除されます。 https://www.postgresql.jp/document/current/html/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP
  • 8. © 2020 NTT DATA Corporation 8 排他モード ① バックアップモードの開始 $ psql -c "SELECT pg_start_backup('mybackup')" ② DBクラスタのバックアップ OSコマンドやスナップショットなどを使って、DBクラスタと全テーブルスペースを物理的にバックアップ $ cp -a $PGDATA /tblspc1 /tblspc2 /backup ③ バックアップモードの終了 $ psql -c "SELECT pg_stop_backup()"
  • 9. © 2020 NTT DATA Corporation 9 非排他モード ① バックアップモードの開始 $ psql =# SELECT pg_start_backup('mybackup', false, false) ② DBクラスタのバックアップ OSコマンドやスナップショットなどを使って、DBクラスタと全テーブルスペースを物理的にバックアップ $ cp -a $PGDATA /tblspc1 /tblspc2 /backup ③ バックアップモードの終了 =# SELECT pg_stop_backup(false); ④ backup_labelとtablespace_mapのバックアップ pg_stop_backup()の戻り値の内容から backup_labelとtablespace_mapの2つのファイルを作成して、バックアップに含める ・第3引数にfalseを指定 ・pg_start_backupを実行したセッションを pg_stop_backupまで維持 ・第1引数にfalseを指定 ・pg_start_backupを実行したセッションで pg_stop_backupを実行
  • 10. © 2020 NTT DATA Corporation 10 非排他モード =# SELECT * FROM pg_stop_backup(false); lsn | labelfile | spcmapfile -----------+---------------------------------------------------------------+------------------------------- 0/3000138 | START WAL LOCATION: 0/3000028 (file 000000010000000000000003)+| 16386 /dav/head-pgsql/tblspc2+ | CHECKPOINT LOCATION: 0/3000060 +| 16385 /dav/head-pgsql/tblspc1+ | BACKUP METHOD: streamed +| | BACKUP FROM: master +| | START TIME: 2020-07-06 23:55:11 JST +| | LABEL: mybackup +| | START TIMELINE: 1 +| | | (1 row) backup_label tablespace_map ④-2 backup_labelとtablespace_mapをバックアップに格納 $ mv backup_label tablespace_map /backup ④-1 pg_stop_backup()の戻り値からbackup_labelとtablespace_mapのファイルを作成
  • 11. © 2020 NTT DATA Corporation 11 排他モードと非排他モードの比較 排他モード 非排他モード 利用可能なバージョン 8.0以降 9.6以降 バックアップの 同時実行可能数 1 複数 pg_start_backupと pg_stop_backupを 実行するセッション 同じまたは異なるセッション  バックアップ中のセッション断による影響はない  pg_stop_backupを忘れるとバックアップ モードは終了しない(次回のバックアップ取得 が失敗する) 同じセッション  セッション断によりバックアップが失敗する (pg_start_backupからやり直し)  セッションが切れればバックアップモードは終了 する backup_labelと tablespace_mapの 作成 pg_start_backupがDBクラスタ内に作成  DBクラスタをバックアップすれば、各ファイルは 自動的にバックアップに含まれる  バックアップ中にPostgreSQLがクラッシュす ると、クラッシュリカバリが失敗する可能性があ る(backup_labelがDBクラスタ内にある状 態でクラッシュリカバリが始まるため) pg_stop_backupからユーザが作成  ユーザが各ファイルをバックアップに含める必要 がある  左記のリカバリ失敗の可能性はない(DBクラ スタ内にbackup_labelは存在しないため)
  • 12. © 2020 NTT DATA Corporation 12 排他モードでバックアップ中にクラッシュした場合のリカバリ失敗について pg_start_backup CHECKPOINT 1 2 3 4 5 ? WALファイル 凡例 クラッシュ CHECKPOINT pg_stop_backup 各操作とWAL生成の流れ クラッシュリカバリでは 最新CHECKPOINT 以降のWALを適用 backup_labelがある状態で クラッシュリカバリが始まると、 pg_start_backup以降の WALを適用 • backup_labelが pg_start_backup以降 のWAL適用を指示  ②~④のWALが削除済だと リカバリ失敗  未削除の場合もリカバリ時間 が長くなる
  • 13. © 2020 NTT DATA Corporation 13 ご存じでしょうか? 非排他的な手法が推奨され、 排他的な手法は推奨されず、将来的に削除されます。 https://www.postgresql.jp/document/current/html/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP
  • 14. © 2020 NTT DATA Corporation 14 排他モードを削除するパッチ v14で排他モードを削除するパッチが提案されている Remove deprecated exclusive backup mode https://commitfest.postgresql.org/28/1913/ 削除についてまだ議論中だが、v14で削除となる可能性が高い(ように見える) • リカバリ失敗のリスクを危険視する開発者が多い • 排他モードを利用中のユーザがいるため削除に反対する意見もあるが少数 • 「排他モードは将来的に削除」とv9.6で明記してから、v14リリース時には5年経過済 排他モードが削除されても問題ないでしょうか?
  • 15. © 2020 NTT DATA Corporation 15 排他モードの削除に備えて 1. pg_basebackupまたは外部ツールに移行できるのであれば移行する 2. 独自スクリプトを改修して、非排他モードに移行する 3. (排他モードの必要性を強くコミュニティで主張して、排他モードを削除させない)
  • 16. © 2020 NTT DATA Corporation 16 排他モードから非排他モードへの移行例 $ psql -c "SELECT pg_start_backup('test')" $ cp -a /pgdata/data /backup $ psql -c "SELECT pg_stop_backup()" $ psql -f backup.sql SELECT pg_start_backup('test', false, false); ¥! cp -a /pgdata/data /backup SELECT pg_file_write('/tmp/backup_label', labelfile, false), pg_file_write('/tmp/tablespace_map', spcmapfile, false) FROM pg_stop_backup(false); ¥! mv /tmp/backup_label /tmp/tablespace_map /backup/data 排 他 モ ー ド 非 排 他 モ ー ド ・同一セッション内でpg_start_backupと pg_stop_backupを簡単に実行できるように、 バックアップのすべての操作をpsql内で実行する ・OSコマンドはpsqlメタコマンドの¥!を介して実行 ・pg_stop_backupからのbackup_labelと tablespace_mapの作成には、 pg_file_write関数を使う ・pg_file_write関数を使うにはadminpackの エクステンションをCREATE EXTENSIONする 必要がある(セキュリティ上の問題がないかは要確認)
  • 17. © 2020 NTT DATA Corporation 17 まとめ pg_start_backupとpg_stop_backupを使ったバックアップには 排他モードと非排他モードがある 排他モードは将来的に削除される予定 (v14で削除の可能性がある)
  • 18. © 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。