改訂履歴 版 改訂日 変更内容 /4/25 新規作成 ライセンス 本作品はCC-BYライセンスによって許諾されています ライセンスの内容を知りたい方はhttp://creativecommons.org/licenses/by/2.1/jp/でご確認ください 文書の内容 表記に関する

Similar documents
改訂履歴 版改訂日変更内容 /4/25 新規作成 ライセンス 本作品は CC-BY ライセンスによって許諾されています ライセンスの内容を知りたい方は でご確認ください 文書の内容 表記に関

PostgreSQL 9.0 のレプリケーションを使ってみよう SRA OSS, Inc. 日本支社佐藤友章 2010/12/11 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 1

Microsoft PowerPoint - MySQL-backup.ppt

PostgreSQL Plus 管理者ガイド

アジェンダ WG3について 現在までの活動内容紹介 位置づけ 活動概要 PGEConsへ寄せられたコメント エンタープライズで求められる非機能要件とは DBMSに求められる要件とは 2013年度の活動テーマ 実施体制 予定成果物 可用性 バックアップ 監視 実機運用例 まとめと今後の予定 2

Microsoft Word - nvsi_060132jp_datadomain_restoreDRAFT4.doc

Microsoft Word - qtsi_120246jp_rhev.doc

CLUSTERPRO for Linux PostgreSQL HowTo

今さら聞けない!? Oracle入門 ~後編~

<506F C392E30838C A B E E2E2E>

PGECons技術ドキュメントテンプレート Ver.3

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

日レセプラグイン

HeartCoreインストールマニュアル

ActiveImage Protector 2016 R2 for Express5800 / ftサーバ

PGECons技術ドキュメントテンプレート Ver.3

IPM Release 2.6 へのアップグ レード

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

CLUSTERPRO MC StorageSaver 2.2 for Linux リリースメモ 2017(Apr) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル 補足事項 注意事項

ドメインコントローラを冗長化していてもバックアップは必要です! Active Directory データベースの複製の仕組み DC1 2 変更された情報を定期的に他の DC に複製 DC2 同期 1 ドメインコントローラ (DC) で変更が行われる Active Directory データベース上で

CLUSTERPRO MC RootDiskMonitor CLUSTERPRO MC StorageSaver for BootDisk 仮想環境 ( ゲスト OS) での設定手順 (Linux 版 Windows 版 ) 2017(Apr) NEC Corporation 仮想環境 ( ゲスト

CLUSTERPRO MC StorageSaver 1.1 for Linux リリースメモ 2015(Jun) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル 補足事項 注意事項

OracleDBA(パフォーマンスチューニング(SQL編) - コピー

Arcserve Replication/High Availability 製品の仕組み

AIP2016 Oracleバックアップ・復旧ガイド

SVF Ver 環境設定 パッチについて

AIP2016 Oracleバックアップ・復旧ガイド

DHCPサーバのクラスタ化

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

NEC Express5800 シリーズ COBOL Media V1 セットアップカード SL438730B01-2

今さら聞けない!? Oracle入門 ~前編~

CLUSTERPRO MC RootDiskMonitor 1.1 for Linux リリースメモ 2013(Sep) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル

Microsoft Word - nvsi_080188jp_r1_netvault_oracle_rac_backup_complemental_guide_j_174x217.doc

Stepguide15_shisa_guard.indd

NEC COBOL Media V2.0 セットアップカード SL438740B01-1

Microsoft Word - nvsi_100222jp_oracle_exadata.doc

Microsoft Word - nvsi_090203_r1_sanboot_vaultdr.doc

SecureAssist Enterprise Portal アップグレードガイド Version 対応版 パッケージのダウンロード アップグレード全体の流れ アップグレード作業の詳細手順

Apache2.2(mod_ssl) は ECDSA 鍵について非対応となっております 1-2. 証明書のインストール Apache(mod_ssl) への証明書のインストール方法について記述します 事前準備 事前準備として サーバ証明書 中間 CA 証明書を取得してください 事前準備

CLUSTERPRO MC ProcessSaver 2.1 for Linux リリースメモ 2016(Mar) NEC Corporation ライセンス パッケージのインスト ル セットアップ マニュアル 障害発生時の手順 補足事項 注意事項

Microsoft Word - nvsi_090196_r1_vaultdr_offline_rhel_dualpath.doc

はじめに このドキュメントではftServerに関する障害調査を行う際に 必要となるログ データの取得方法を説明しています ログ データの取得には 初期解析用のデータの取得方法と 詳細な調査を行うときのデータ取得方法があります 特別な理由でOS 側のログが必要となった場合には RHELログの取得につ

Linux修正適用手順書

FUJITSU Storage ETERNUS BE50 S2 運用ガイド Symantec Backup Exec 2014 修正適用編

JPUG 仕組み分科会 テキスト pgpool-ii のオンラインリカバリの概要 本稿は 2008 年 12 月発売の 技術評論社 WEB+DB PRESS vol. 48 の 特集 3 PostgreSQL 大規模運用 の草稿を 編集したものである

HeartCoreインストールマニュアル(PHP版)

PostgreSQL 9.3パーティションの効果検証

WebSAM Storage ReplicationNavigator WebSAM Storage ReplicationNavigator Oracle RAC Option 本製品を販売する場合 事前に下記問い合わせ先へご連絡をお願いします < 問い合わせ先 > 8. 問い合わせ窓口 を参照し

4. 環境変数の設定実行にあたり 次のように環境変数を設定する必要があります 1)SJIS ロケールの指定コマンド例 )export LANG=ja_JP.sjis 2)MQ 環境の指定コマンド例 ). /opt/mqm/bin/setmqenv s 3)COBOL 実行環境の指定コマンド例 ).

目次 1. はじめに 本文書の目的 前提条件 略語 事前準備 ホスト名の名前解決 Linux 版パッケージ システム要件 ソフトウェア要件 パッケージ構成

XEN 仮想マシンの移植 Islandcenter.jp 2009/04/14 既に作成済みの XEN 仮想マシンを移植する方法を説明します 仮想マシンイメージは 通常 /var/lib/xen/image/myvmachine に作成されていますが このファイルを tar 圧縮してリムーバブルメデ

インストールガイド

(Microsoft Word - Compiere3.0Windows\203C\203\223\203X\203g\201[\203\213\203K\203C\203h.doc)

PostgreSQLによる クラスタ運用および負荷分散術 SRA OSS, Inc. 日本支社 OSS事業本部 星合 拓馬

HAクラスタで PostgreSQLを高可用化 (後編) ~ レプリケーション編 ~

PostgreSQL の特徴 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 2

DIRECTIONS

3.システム管理(SQL版)_xlsx

変更履歴 項番版数内容更新日 版新規作成 2013 年 11 月 18 日 1

Copyright 2007, 2008 Hewlett-Packard Development Company, L.P. Windows は米国 Microsoft Corporation の米国およびその他の国における登録商標です 本書の内容は 将来予告なしに変更されることがあります HP 製

Microsoft PowerPoint - ShadowProtectIT手順書_ ppt

ESMPRO/ServerManager Ver. 6 変更履歴

異種DBMSからPostgreSQLへの移行ガイド

はじめに PostgreSQL/PowerGres サポート & 保守サービス でサポート対象になっているサードパーティ製のソフトを紹介 pgfouine pgbadger( 今後サポート対象にする予定 ) PgFincore pg_reorg pg_rman pg_bulkload pg_stat

A : kerl kerl Erlang/OTP Erlang/OTP 2 2 Elixir/Phoenix URL 2 PDF A.2 Bash macos.bash_profile exp

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ

JP1 Version 11

Microsoft Word - retrospect_competitive_q413_jpyen.docx

改版履歴 版数改版履歴改版年月日 1.0 新規作成 2015/03/31 Page 2 NEC Corporation 2015

CLUSTERPRO MC StorageSaver istorage M シリーズ使用時の設定手順 (HP-UX 版 Linux 版 Windows 版 ) 2013(Apr) NEC Corporation istorage M シリーズを使用する場合の StorageSaver 設定手順 (H

フォーマット/メンテナンスガイド

Microsoft Word - Retrospect Competitive Analysis 2_10 JPYEN.docx

Windows Small Business Server 2011 Essentialsバックアップ容量節減ガイド

intra-mart WebPlaform / AppFramework

CLUSTERPRO MC StorageSaver 1.2 for Linux はじめての StorageSaver (vsphere 対応版 ) 2014(Mar) NEC Corporation はじめに 製品概要 監視の設定と実践 付録 おわりに

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

産直くん 9 リピートくん 9 バックアップ リストア作業チェックリスト バックアップ リストア作業項目一覧 作業項目作業目安時間概要 00 バックアップ リストア作業を行う前に 産直くん 9 リピートくん 9 のバックアップ リストア作業を円滑に行うための確認事項をまとめています 1. バックアッ

CLUSTERPRO MC StorageSaver istorage M シリーズ使用時の設定手順 (HP-UX 版 Linux 版 Windows 版 ) 2013(Sep) NEC Corporation istorage M シリーズを使用する場合の StorageSaver 設定手順 (H

HDL-H へデータ移行する ネットワーク接続ハードディスク HDL-H シリーズ H/XR/XV 移行パッケージ ご注意 事前に本パッケージの追加をおこなってください パッケージの追加方法は 画面で見るマニュアル をご覧くだ さい INDEX 移行前の確認...2 移行する...3 移行結果を確認

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

UEFI環境におけるWindows Serverバックアップのシステム回復手順

Microsoft PowerPoint - 運用事例に学ぶPostgreSQL_発表版_修正.ppt

日医標準レセプトソフト クラウド版の構築手順

スライド 1

appli_HPhi_install

薬剤在庫管理ソフト - インストール・バージョンアップ手順書

アーカイブ機能インストールマニュアル

Slide 1

<4D F736F F D2081A F815B A838A815B83588CB48E862E646F63>

Microsoft Word - PDFHS _ doc

BMR for NVBU NIC bnx2.ko SVR/CLNT 上での SCSI megaraid_sas.ko 自動認識デバイス Partition 構成 (RHEL6.0 uefi/lvm 構成の場合 ) Partition1 /boot/efi EFI 200MB Partition2 /

SigmaSystemCenter ネットワークアダプタ冗長化構築資料 第 3 版

Calpont InfiniDBマルチUM同期ガイド

スライド 1

ソフトウェアエンジニアリング - 機能 #54

はじめに 本書は Express5800/ft サーバに Red Hat Enterprise Linux 6 Server 及び ft Server Control Software がインストールされており OS がインストールされている内蔵ディス クに空き容量がある場合に 追加でボリュームを作

<MW-400k > InterSec/MW400k アップデート適用手順書 2017 年 8 月 1 版

Transcription:

2013年活動報告書 Appendix 2 バックアップ検証(シングルサーバ編) PostgreSQLエンタープライズ コンソーシアム WG3(設計運用WG)

改訂履歴 版 改訂日 変更内容 1.0 2014/4/25 新規作成 ライセンス 本作品はCC-BYライセンスによって許諾されています ライセンスの内容を知りたい方はhttp://creativecommons.org/licenses/by/2.1/jp/でご確認ください 文書の内容 表記に関する誤り ご要望 感想等につきましては PGEConsのサイトを通じてお寄せいただきますようお願いいたします サイトURL https://www.pgecons.org/contact/ Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red HatおよびShadowman logoは 米国およびその他の国におけるRed Hat,Inc.の商標または登録商標です PostgreSQLは PostgreSQL Community Association of Canadaのカナダにおける登録商標およびその他の国における商標です 2

はじめに 本検証はシングル構成でPostgreSQLを運用中に障 害が発生し それを復旧する手順等の実機検証です 検証するシナリオは以下の3つです データが壊れたとき 論理バックアップからリストアするシナ リオ オペレーションミスでデータを削除した場合 削除された データをPoint In Time Recoveryでリカバリするシナリオ データ更新中のサーバの電源が落ちたとき 再起動しWAL から自動ロールフォワードするシナリオ 3

目次 クラッシュリカバリ 論理バックアップ リストア オンラインバックアップ リカバリ 付録:ストレージローカルコピー 4

検証環境 環境 インストールディレクトリ : /usr/local/pgsql/ データディレクトリ : /disk1/data WALディレクトリ : /disk2/pg_xlog ARCHIVEファイル配置ディレクトリ : /disk3/pg_xlog ユーザ名 : postgres PostgreSQL : PostgreSQL 9.3.0 OS : Red Hat Enterprise Linux Server 6.2 (64-bit x86) 環境変数 $PATH : /usr/local/pgsql/bin を追加 $PGDATA : /disk1/data 5

クラッシュリカバリ 6

シナリオ(1/2) システム構成 シングル構成 システム概要 更新処理中のシステム バックアップ 週に一度 休日にバックアップ 7

シナリオ(2/2) 検証の流れ CHECKPOINTの間隔を調整 checkpoint_segments = 1000 checkpoint_timeout = 1h データ更新中に電源断を実施 後で確認できるように決まったデータを更新 サーバ再起動 PostgreSQL再起動 更新したデータを確認 8

検証結果 結果 再起動時ロールフォワードして最終トランザクションまでのデータが 反映されている 電源断のような障害のときデータが復旧される [postgres@pgecons1 pg_log]$ cat postgresql-2013-10-10_142041.log [2013-10-10 14:20:41 JST]LOG: database system was interrupted; last known up at 2013-10-10 12:36:17 JST [2013-10-10 14:20:41 JST]LOG: database system was not properly shut down; automatic recovery in progress [2013-10-10 14:20:41 JST]LOG: redo starts at 135/7B000090 [2013-10-10 14:20:52 JST]LOG: redo done at 135/D7FFD2C8 [2013-10-10 14:20:52 JST]LOG: last completed transaction was at log time 2013-10-10 14:11:59.994082+09 testdb=# select * from pgbench_history order by mtime desc; tid bid aid delta mtime filler --------+-------+-----------+-------+----------------------------+-------58045 7647 521189773 1435 2013-10-10 14:11:59.993444 93451 9583 409026996-4937 2013-10-10 14:11:59.992281 63657 9706 494699262 2752 2013-10-10 14:11:59.990973 43897 461 239405160 2752 2013-10-10 14:11:59.989828 20564 3888 764911388-3846 2013-10-10 14:11:59.989503 46136 3762 945423791 3273 2013-10-10 14:11:59.988407 60703 4469 858075989-2745 2013-10-10 14:11:59.988401 9

論理バックアップ リストア 10

シナリオ(1/2) システム構成 シングル構成 システム概要 参照系システム 更新は土日のバッチ処理のみ バックアップ 毎週更新処理完了後pg_dumpを利用して全体の論理バッ クアップを取得 11

シナリオ(2/2) 検証のイメージ ある週の火曜日から 時々エラーが発生するようになった データが壊れた可能性が高いが壊れたデータの特定がで きてない カスタム形式でバックアップを取得している 正しかった時点のデータをリストアしたい 12

検証手順概要 pgbenchで初期データ投入 バックアップ取得 pg_dump データに異常が発生したと仮定し データ削除 dropdbでデータをデータベースごと削除 createdbで再生性 リストア pg_restore 13

初期データ pgbenchで初期データを投入 [postgres@server ~]$ pgbench -is 1000 testdb creating tables... 100000 of 1000000 tuples (10%) done (elapsed 0.19 s, remaining 1.71 s). 200000 of 1000000 tuples (20%) done (elapsed 0.38 s, remaining 1.54 s). 14

バックアップ取得 バックアップ [postgres@server ~]$ pg_dump -Fc testdb > /disk4/backup/backup.dump [postgres@server ~]$ ls /disk4/backup/ -lh 合計 272M -rw-rw-r-- 1 postgres postgres 272M 3月 10 17:22 backup.dump 15

論理バックアップの特徴 データは以下のようにデータベースを検索した結果を保存する pg_dump実行時のスナップショットデータ オプションで圧縮形式で取得するのが一般的 pg_dumpはクライアントとしてデータを取得するので 取得ができ ればデータが壊れてない可能性が非常に高い ただし バックアップ取得時点以後の更新分はリカバリできない --- PostgreSQL database dump -SET statement_timeout = 0; SET client_encoding = 'SQL_ASCII'; SET standard_conforming_strings = on; 584 585 586 \. 1 1 1 0 0 0 例 データが壊れている際にpg_dumpを取得した例 (プレーンテキストで取得した場合) テーブルのデータファイルが壊れている場合 pg_dump 時にエラーになる もしも この状態で物理バックアップをとっても データファイルの破損に気が付かない pg_dump: Dumping the contents of table "pgbench_accounts" failed: PQgetCopyData() failed. pg_dump: Error message from server: pg_dump: The command was: COPY public.pgbench_accounts (aid, bid, abalance, filler) TO stdout; 16

リストア リストア [postgres@server ~]$ dropdb testdb [postgres@server ~]$ createdb testdb [postgres@server ~]$ pg_restore -d testdb /disk4/backup/backup.dump リストアの確認 testdb=# \d List of relations Schema Name Type Owner --------+------------------+-------+---------public pgbench_accounts table postgres public pgbench_branches table postgres public pgbench_history table postgres public pgbench_tellers table postgres (4 rows) testdb=# select * from pgbench_accounts; aid bid abalance filler ----------+-----+---------+------------------------------------------------------------------------------------1 1 0 2 1 0 17

バックアップとリストア時間の目安について データサイズとバックアップ リストア所要時間の例 データ量に比例して線形で増加するため見積もりは簡単 バックアップ時間よりもリストア時間の方が長い 18

オンラインバックアップ リカバリ 19

シナリオ(1/2) システム構成 シングル構成 システム概要 更新系システム 毎月新しいテーブルを生成しその月の売上を記録 1年前のデータをtruncateで削除 バックアップ PITRによる物理バックアップ アーカイブモードはONで運用中 20

シナリオ(2/2) 検証のイメージ オペレーションミスで今月の売上データをtruncateしてし まった ベースバックアップ+アーカイブログの取得により運用中 truncateした時刻が分かっている なるべく最新のデータ に戻したい 21

検証手順概要(1/2) 初期データ投入 ベースバックアップ取得 pg_start_backup() tarでデータディレクトリを取得 pg_stop_backup() データ更新(初期データの1/10) tableをtruncate (オペレーションミス) 22

検証手順概要(2/2) サーバ停止 ベースバックアップからリストア recovery.confを作成してリカバリ時刻を指定 サーバスタート 23

archive_mode設定 archive_mode設定 #postgresql.confの設定# wal_level = archive # minimalは使えない archive_mode = on archive_command = 'test! -f /disk3/archive/%f && cp %p /disk3/archive/%f' #archiveはdataと違うディスクに保管したほうがいい #testでチェックしてからarchiveする(上書きされないように) #%p : archiveするファイルのパス名 #%f : archiveするファイルのファイル名 archive_timeout = 0 #時間で強制WAL切り替え(必須ではない) 0の場合強制切り替えなし [postgres@cyprus data]$ pg_ctl restart waiting for server to shut down... done server stopped server starting 環境変数に$PGDATAを登録してない場合は-Dオプションで データディレクトリを指定する必要がある 24

初期データ pgbenchで初期データを投入 [postgres@server ~]$ pgbench -is 1000 testdb creating tables... 100000 of 1000000 tuples (10%) done (elapsed 0.19 s, remaining 1.71 s). 200000 of 1000000 tuples (20%) done (elapsed 0.38 s, remaining 1.54 s). 25

バックアップ取得 pg_start_backupによるベースバックアップ [postgres@server pgsql]$ psql testdb testdb=# select pg_start_backup('basebackup.tar'); testdb=# \q [postgres@server pgsql]$ tar cf /disk4/backup/basebackup.tar /disk1/data [postgres@server pgsql]$ ll -h /disk4/backup/ 合計 14.7G -rw-rw-r-- 1 postgres postgres 14.7G 2月 20 11:27 basebackup.tar [postgres@server pgsql]$ psql testdb testdb=# select pg_stop_backup(); testdb=# \q 26

データ更新 データを更新 [postgres@server ~]$ pgbench -c 100 -j 10 -t 250 testdb starting vacuum...end. transaction type: TPC-B (sort of) データ更新を確認 testdb=# select * from pgbench_history ; tid bid aid delta mtime filler -----+-----+-------+-------+----------------------------+-------7 1 3578 1839 2014-02-20 12:50:39.677176 4 1 95175-4885 2014-02-20 12:50:39.690841 6 1 80955-3258 2014-02-20 12:50:39.699467 1 1 98961-929 2014-02-20 12:50:39.707503 10 1 14484-1023 2014-02-20 12:50:39.715925 9 1 36463 4403 2014-02-20 12:50:39.724406 10 1 72578-4197 2014-02-20 12:50:39.732842 27

障害発生 オペレーションミスによるデータ削除 testdb=# truncate pgbench_history; TRUNCATE TABLE testdb=# select * from pgbench_history ; tid bid aid delta mtime filler -----+-----+-----+-------+-------+-------(0 rows) 28

リカバリ サーバ停止後recovery.confを作成 サーバを開始することでリカバリ 環境変数に$PGDATAを登録してない場合は-Dオプションで データディレクトリを指定する必要がある [postgres@server [postgres@server [postgres@server [postgres@server [postgres@server pgsql]$ pgsql]$ pgsql]$ pgsql]$ pgsql]$ pg_ctl stop mv /disk1/data /disk1/data_crash_backup tar xf /disk4/backup/basebackup.tar -C /disk1 rm -rf /disk2/pg_xlog/* mkdir /disk2/pg_xlog/archive_status #recovery.confの設定# restore_command = cp /disk3/archive/base/log/%f %p recovery_target_time = YYYY-MM-DD hh:mm:ss.ff #復旧したい時間を書く [postgres@server pgsql]$ pg_ctl start 環境変数に$PGDATAを登録してない場合は-Dオプションで データディレクトリを指定する必要がある 29

リカバリ結果の確認 データが戻ったことを確認 testdb=# select * from pgbench_history ; tid bid aid delta mtime filler -----+-----+-------+-------+----------------------------+-------7 1 3578 1839 2014-02-20 12:50:39.677176 4 1 95175-4885 2014-02-20 12:50:39.690841 6 1 80955-3258 2014-02-20 12:50:39.699467 1 1 98961-929 2014-02-20 12:50:39.707503 10 1 14484-1023 2014-02-20 12:50:39.715925 9 1 36463 4403 2014-02-20 12:50:39.724406 10 1 72578-4197 2014-02-20 12:50:39.732842 30

注意点 postgresql.confファイルはwalで復旧しないので 変更があれば別途バックアップが必要 念のため元のデータは削除するより mvで退避して おくことを推奨 31

バックアップとリカバリ時間の目安について データサイズとバックアップ リカバリ所要時間の例 ロールフォワード時間は更新データ量に比例するため定期的に新しいベース バックアップを取得する必要がある ロールフォワードするログの量はDBサイズの1/10で実施 ベースバックアップからのリストア時間 ベースバックアップ取得時間 32

付録 ストレージローカルコピー 33

ストレージローカルコピーの仕組み 正ボリューム 業務で使用する領域 通常時 データ 更新 バックアップ時 データ 更新 副ボリューム バックアップ用領域 ミラーリング 正ボリューム データをハードウェアデ バイスのブロックレベル でミラーリングし 正ボ リュームと副ボリューム で同じデータを保持 OS ファイルシステ ムとは無関係な操作 副ボリューム ミラーリングを解除 ス プリットという し 副 ボリュームを別サーバー などからテープや別ディ スクにバックアップ ミラーリングを解除 スプリット バックアップ バックアップ完了後は再度ミラーリング状態に 34

スプリットとリストアの注意点(1/2) スプリット時にファイルに追記するなど ファイルサイズが変更される処理中 のファイルがあると タイミングによってはファイルの不整合が発生する可能 性があります 例えばext4ファイルシステムで ファイル拡張が発生するwrite()の場合 ファイルの実データ部分を更新 サイズ拡張 ファイルのメタデータ サイズ情報 を更新 という順序で処理が行われます ストレージによるスプリットは OSやファイルシステムとは無関係に行われる ため 非常にレアケースですが ① ②の間でスプリットが行われることがあ ります 正ボリューム 副ボリューム ファイル A write() write()完了前に スプリット 副ボリュームではファイル Aのメタデータが更新され ていない状態 正ボリューム側はスプリッ ト後にwrite()が完了し 正 常となっている状態 35

スプリットとリストアの注意点 2/2 前頁の副ボリュームをバックアップしている状態で 正ボリュームに障害が発 生したため そのバックアップをリストアするケースを考えてみます 正ボリュームのデータの内容はストレージの機能により 副ボリュームと同じ 状態になります 正ボリューム 副ボリューム ファイル A 副ボリュームから 正ボリュームへデータを同期 このとき 正ボリューム上のファイルAは実データとメタデータが不整合を起 36 こしている状態ですので 正ボリュームをファイルシステムとしてマウントす ると fsckなどによりファイルaは削除されることになります 36

PostgreSQLのバックアップとの関連 PostgreSQLではバックアップ取得のために pg_start_backup() を実行しても データファイルへの書き込みが停止するわけではありませんので バックアッ プ中にデータファイルのサイズが拡張することも発生します PostgreSQLで は ブロック 8KB 単位という小さな単位でファイルが拡張するため 拡張 の頻度が高い そのため PostgreSQLのバックアップにストレージローカルコピーを利用する 場合 pg_start_backup()を行っても 前述のとおり 副ボリューム中にファイ ルの実データとメタデータと不整合を起こしたデータファイルが存在する可能 性があります その副ボリュームを正ボリュームにリストアした場合 不整合を起こしていた データファイルは削除されてしまいます データファイル自体が消失した場合 はPostgreSQLの機能 たとえばWALなど ではリカバリすることができませ ん ファイルに書き込みがある状態で ストレージローカルコピーをバックアップ として利用するには このような危険性があります この危険性を排除するた めには 現在のPostgreSQLではファイルに書き込みが発生しない状態で スト レージローカルコピーを行う必要があります 37

参考 他のデータベースでは ストレージローカルコピーによりファイルの不整合が発生する主な原因は ス プリット時にファイルの拡張 あるいは縮小 が起こることにより ファイル の実データ部分のサイズと メタデータ上のサイズが一致しない状態になるこ とです したがって スプリット時にファイルの拡張や縮小が起こらなければ ファイ ル自体への書き込みがあっても 不整合が発生する危険はほぼないものと考え られます そのため 事前にデータファイルを必要なサイズで確保できる データファイルが自動的に拡張および縮小しないように設定できる という特徴を持つデータベースでは ファイルに書き込みがある状態でも ス トレージローカルコピーをバックアップとして利用することができると考えら れます 38