TR-5000:『PostgreSQL Database Backup、Recovery、and Clone on ONTAP with SnapCenter』
ネットアップ、Niyaz Mohamed、Allen Cao氏
このソリューションでは、パブリッククラウドまたはオンプレミスのONTAPストレージで、NetApp SnapCenterデータベース管理UIツールを使用してPostgreSQLデータベースのバックアップ、リカバリ、クローニングの概要と詳細を確認できます。
目的
NetApp SnapCenter ソフトウェアは、使いやすいエンタープライズプラットフォームで、アプリケーション、データベース、ファイルシステム全体でデータ保護をセキュアに調整、管理できます。ストレージシステムでのアクティビティの監視と規制の機能を犠牲にすることなく、これらのタスクをアプリケーション所有者にオフロードすることで、バックアップ、リストア、クローンのライフサイクル管理を簡易化します。ストレージベースのデータ管理を活用することで、パフォーマンスと可用性が向上し、テストと開発の時間が短縮されます。
このドキュメントでは、非常に使いやすいSnapCenter UIツールを使用して、パブリッククラウドまたはオンプレミスのNetApp ONTAPストレージでPostgreSQLデータベースの保護と管理を行う方法を紹介します。
この解決策 は、次のユースケースに対応します。
-
パブリッククラウドまたはオンプレミスのNetApp ONTAPストレージに導入されたPostgreSQLデータベースのバックアップとリカバリ
-
PostgreSQLデータベースのSnapshotやクローンコピーを管理して、アプリケーション開発期間を短縮し、データのライフサイクル管理を強化します。
対象者
この解決策 は、次のユーザーを対象としています。
-
NetApp ONTAPストレージにPostgreSQLデータベースを導入するデータベース管理者。
-
データベースソリューションアーキテクト。NetApp ONTAPストレージでPostgreSQLワークロードのテストを実施したいと考えています。
-
NetApp ONTAPストレージにPostgreSQLデータベースを導入して管理したいストレージ管理者。
-
NetApp ONTAPストレージ上にPostgreSQLデータベースを構築したいアプリケーション所有者。
解決策 のテストおよび検証環境
この解決策のテストと検証は、最終的な導入環境とは一致しない可能性があるラボ環境で実行しました。を参照してください 導入にあたって考慮すべき主な要因 を参照してください。
アーキテクチャ
ハードウェアおよびソフトウェアコンポーネント
* ハードウェア * |
||
NetApp AFF A220 |
バージョン9.12.1P2 |
ディスクシェルフDS224-12、IOM12Eモジュール、24ディスク/ 12TiB |
VMware vSphereクラスタ |
バージョン6.7 |
NetApp HCI H410CコンピューティングESXiノード×4 |
ソフトウェア |
||
Red Hat Linux |
RHEL Linux 8.6(LVM)- x64 Gen2 |
テスト用にRedHatサブスクリプションを導入 |
Windows Serverの場合 |
2022データセンター、AE Hotpatch-x64 Gen2 |
SnapCenterサアハノホスト |
PostgreSQL データベース |
バージョン14.13 |
HammerDB TPCCスキーマが格納されたPostgreSQL DBクラスタ |
SnapCenter サーバ |
バージョン6.0 |
ワークグループの導入 |
JDKを開く |
バージョンjava-11-openjdk |
DB VMでのSnapCenterプラグインの要件 |
NFS |
バージョン 3.0 以降 |
データとログを別 々 のマウントポイントに分離 |
Ansible |
コア2.16.2 |
Python 3.6.8 |
ラボ環境でのPostgreSQLデータベースの設定
* サーバ * |
* データベース * |
* DBストレージ* |
psql01 |
プライマリデータベースサーバ |
/pgdata、/pglogs ONTAPストレージへのNFSボリュームマウント |
psql02 |
クローンデータベースサーバ |
/pgdata_clone、/pglogs_clone ONTAPストレージへのNFSシンクローンボリュームマウント |
導入にあたって考慮すべき主な要因
-
* SnapCenterの導入。* SnapCenterは、Windowsドメインまたはワークグループ環境に導入できます。ドメインベースの展開の場合、ドメインユーザーアカウントはドメイン管理者アカウントであるか、ドメインユーザーがSnapCenterホスティングサーバー上のローカル管理者のグループに属している必要があります。
-
名前解決。 SnapCenterサーバーは、管理対象の各ターゲットデータベースサーバーホストのIPアドレスに名前を解決する必要があります。各ターゲット・データベース・サーバ・ホストは、SnapCenterサーバ名をIPアドレスに解決する必要があります。DNSサーバを使用できない場合は、ローカルホストファイルに名前を追加して解決します。
-
リソースグループの設定。 SnapCenterのリソースグループは、一緒にバックアップできる同様のリソースを論理的にグループ化したものです。これにより、大規模なデータベース環境でのバックアップジョブの数が削減され、簡易化されます。
-
*フルデータベースバックアップとアーカイブログバックアップを別 々 に実行します。*フルデータベースバックアップには、データボリュームとログボリュームの整合グループSnapshotが含まれます。フルデータベースSnapshotを頻繁に作成すると、ストレージ消費量は増加しますが、RTOは向上します。もう1つの方法は、フルデータベーススナップショットの頻度を減らし、アーカイブログのバックアップを頻繁に行うことです。これにより、ストレージ消費量が削減され、RPOが向上しますが、RTOが延長される可能性があります。バックアップスキームを設定する際には、RTOとRPOの目標を考慮してください。ボリューム上のSnapshotバックアップの数には制限(1023)もあります。
-
*権限委譲。*必要に応じて、SnapCenter UIに組み込まれているロールベースのアクセス制御を利用して、アプリケーションチームやデータベースチームに権限を委譲できます。
解決策 の導入
以降のセクションでは、パブリッククラウドまたはオンプレミスのNetApp ONTAPストレージでのSnapCenterの導入、設定、およびPostgreSQLデータベースのバックアップ、リカバリ、クローニングの手順を詳しく説明します。
導入の前提条件
Details
-
導入環境では、ONTAPストレージ上で2つの既存のPostgreSQLデータベースが実行されている必要があります。1つはプライマリDBサーバとして、もう1つはクローンDBサーバとして実行されます。ONTAPへのPostgreSQLデータベースの導入については、TR-4956:『"AWS FSX/EC2におけるPostgreSQL高可用性導入とディザスタリカバリの自動化"looking for the PostgreSQL automated deployment playbook on primary instance』を参照してください。
-
NetApp SnapCenter UIツールを最新バージョンで実行するようにWindowsサーバをプロビジョニングします。詳細については、次のリンクを参照してください。"SnapCenter サーバをインストールします"
SnapCenterのインストールとセットアップ
Details
SnapCenterのインストールと設定に進む前に、オンラインを使用することをお勧めし"SnapCenter ソフトウェアのドキュメント"ます。ONTAPでPostgreSQL用SnapCenterソフトウェアをインストールしてセットアップする手順の概要を以下に示します。
-
SnapCenter Windowsサーバから'から最新のJava JDKをダウンロードしてインストールし"デスクトップアプリケーション用Javaの取得"ますWindowsファイアウォールをオフにします。
-
SnapCenter Windowsサーバから、SnapCenter 6.0 Windowsの前提条件をダウンロードしてインストールまたは更新します。PowerShell-PowerShell-7.4.3-win-x64.msiおよび.Net hosting package-dotnet-hosting-8.0.6-win
-
SnapCenter Windowsサーバから、最新バージョン(現在は6.0)のSnapCenterインストール実行ファイルをNetAppサポートサイトからダウンロードしてインストールします"NetApp |サポート"。
-
データベースDB VMから、管理者ユーザとそのsudo Privileges(パスワードなし)に対してsshパスワードレス認証を有効にします
admin
。 -
データベースDB VMから、Linuxファイアウォールデーモンを停止および無効にします。java-11-openjdkをインストールします。
-
SnapCenter Windowsサーバからブラウザを起動し、ポート8146を使用してWindowsローカル管理者ユーザまたはドメインユーザのクレデンシャルを使用してSnapCenterにログインします。
-
レビュー
Get Started
オンラインメニュー。 -
インチ
Settings-Global Settings
、チェックHypervisor Settings
[更新]をクリックします。 -
必要に応じて、
Session Timeout
SnapCenter UIの場合は、希望する間隔に移動します。 -
必要に応じて、SnapCenterにユーザを追加します。
-
。
Roles
タブには、さまざまなSnapCenterユーザに割り当てることができる組み込みロールが表示されます。カスタムロールは、必要な権限を持つ管理者ユーザが作成することもできます。 -
で
Settings-Credential
、SnapCenter管理ターゲットのクレデンシャルを作成します。このデモのユースケースでは、DBサーバVMへのログイン用のLinuxユーザadminと、PostgreSQLアクセス用のpostgresクレデンシャルを使用します。クレデンシャルを作成する前にPostgreSQLユーザpostgresパスワードをリセットしてください。 -
`Storage Systems`タブで、ONTAPクラスタ管理者のクレデンシャルを指定してを追加し `ONTAP cluster`ます。Azure NetApp Filesの場合は、容量プールアクセス用のクレデンシャルを作成する必要があります。
-
タブから
Hosts
、PostgreSQL DB VMを追加します。これにより、Linux上でPostgreSQL用のSnapCenterプラグインがインストールされます。 -
DBサーバVMにホストプラグインをインストールすると、ホスト上のデータベースが自動検出され、タブに表示されます
Resources
。
データベースバックアップ
Details
最初に自動検出されたPostgreSQLクラスタでは、クラスタ名の横に赤いロックが表示されます。前のセクションでSnapCenterのセットアップ中に作成されたPostgreSQLデータベースクレデンシャルを使用してロックを解除する必要があります。次に、バックアップポリシーを作成して適用し、データベースを保護する必要があります。最後に、手動またはスケジューラによるバックアップを実行して、Snapshotバックアップを作成します。次のセクションでは、ステップバイステップの手順を示します。
-
PostgreSQLクラスタのロックを解除します。
-
タブに移動し
Resources`ます。このタブには、データベースVMにSnapCenterプラグインがインストールされた後に検出されたPostgreSQLクラスタが表示されます。最初はロックされ、データベースクラスタのが `Overall Status`と表示されます `Not protected
。 -
クラスタ名をクリックし、 `Configure Credentials`クレデンシャル設定ページを開きます。
-
以前のSnapCenterセットアップで作成したクレデンシャルを選択します
postgres
。 -
クレデンシャルを適用すると、クラスタのロックが解除されます。
-
-
PostgreSQLバックアップポリシーを作成します。
-
に移動し
Setting
Polices
、をクリックして `New`バックアップポリシーを作成します。 -
バックアップポリシーの名前を指定します。
-
ストレージタイプを選択します。ほとんどのシナリオでは、デフォルトのバックアップ設定で問題ありません。
-
バックアップ頻度とSnapshotの保持期間を定義
-
データベースボリュームをセカンダリサイトにレプリケートする場合に、セカンダリレプリケーションを選択するオプション。
-
概要を確認し、 `Finish`バックアップポリシーを作成します。
-
-
バックアップポリシーを適用してPostgreSQLデータベースを保護します。
-
タブに戻り
Resource
、クラスタ名をクリックしてPostgreSQLクラスタ保護ワークフローを起動します。 -
デフォルトを使用し `Application Settings`ます。このページのオプションの多くは、自動検出されたターゲットには適用されません。
-
作成したバックアップポリシーを適用します。必要に応じてバックアップスケジュールを追加します。
-
バックアップの通知が必要な場合は、Eメール設定を指定します。
-
概要を確認し、 `Finish`バックアップポリシーを実装します。これで、PostgreSQLクラスタが保護されました。
-
バックアップは、バックアップスケジュールに従って実行されるか、クラスタバックアップトポロジから実行されます。をクリックすると、 `Backup Now`手動のオンデマンドバックアップがトリガーされます。
-
タブからバックアップジョブを監視し `Monitor`ます。通常、大規模なデータベースのバックアップには数分かかります。このテストケースでは、1TBに近いデータベースボリュームのバックアップに約4分かかりました。
-
データベースリカバリ
Details
このデータベースリカバリのデモでは、PostgreSQLデータベースクラスタのポイントインタイムリカバリを紹介します。まず、SnapCenterを使用して、ONTAPストレージ上にデータベースボリュームのSnapshotバックアップを作成します。次に、データベースにログインし、テストテーブルを作成し、タイムスタンプを書き留めて、テストテーブルをドロップします。次に、削除されたテーブルをリカバリするためにテストテーブルが作成されたときのタイムスタンプまで、バックアップからリカバリを開始します。次に、SnapCenter UIを使用したPostgreSQLデータベースのポイントインタイムリカバリのワークフローと検証の詳細を示します。
-
ユーザとしてPostgreSQLにログインし `postgres`ます。テストテーブルを作成してドロップします。
postgres=# \dt Did not find any relations. postgres=# create table test (id integer, dt timestamp, event varchar(100)); CREATE TABLE postgres=# \dt List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | test | table | postgres (1 row) postgres=# insert into test values (1, now(), 'test PostgreSQL point in time recovery with SnapCenter'); INSERT 0 1 postgres=# select * from test; id | dt | event ----+----------------------------+-------------------------------------------------------- 1 | 2024-10-08 17:55:41.657728 | test PostgreSQL point in time recovery with SnapCenter (1 row) postgres=# drop table test; DROP TABLE postgres=# \dt Did not find any relations. postgres=# select current_time; current_time -------------------- 17:59:20.984144+00
-
`Resources`タブで、データベースバックアップのページを開きます。リストアするSnapshotバックアップを選択します。次に、ボタンをクリックし `Restore`てデータベースリカバリワークフローを起動します。ポイントインタイムリカバリを実行するときのバックアップのタイムスタンプをメモします。
-
を選択します
Restore scope
。現時点では、完全なリソースは唯一のオプションです。 -
で
Recovery Scope
、リカバリがロールアップされるタイムスタンプを選択し `Recover to point in time`て入力します。 -
では
PreOps
、リストア/リカバリ処理の前にデータベースに対してスクリプトを実行するか、そのまま黒くすることができます。 -
では
PostOps
、リストア/リカバリ処理後にデータベースに対してスクリプトを実行するか、そのまま黒くすることができます。 -
必要に応じてEメールで通知
-
ジョブの概要を確認し、 `Finish`リストアジョブを開始します。
-
[Running job]をクリックして開きます。
Job Details
ウィンドウ。ジョブステータスは、Monitor
タブ。 -
ユーザとしてPostgreSQLにログインし
postgres
、テストテーブルがリカバリされたことを確認します。[postgres@psql01 ~]$ psql psql (14.13) Type "help" for help. postgres=# \dt List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | test | table | postgres (1 row) postgres=# select * from test; id | dt | event ----+----------------------------+-------------------------------------------------------- 1 | 2024-10-08 17:55:41.657728 | test PostgreSQL point in time recovery with SnapCenter (1 row) postgres=# select now(); now ------------------------------- 2024-10-08 18:22:33.767208+00 (1 row)
データベースクローン
Details
SnapCenterを使用したPostgreSQLデータベースクラスタクローンでは、ソースデータベースデータボリュームのSnapshotバックアップから新しいシンクローンボリュームを作成します。さらに重要なのは、他の方法と比べて短時間(数分)で本番環境のデータベースのクローンコピーを作成して開発やテストに役立てることです。これにより、ストレージコストが大幅に削減され、データベースアプリケーションのライフサイクル管理が向上します。次のセクションでは、SnapCenter UIを使用したPostgreSQLデータベースクローンのワークフローについて説明します。
-
をクリックしてクローンプロセスを検証します。もう一度、テストテーブルに行を挿入します。次に、バックアップを実行してテストデータをキャプチャします。
postgres=# insert into test values (2, now(), 'test PostgreSQL clone to a different DB server host'); INSERT 0 1 postgres=# select * from test; id | dt | event ----+----------------------------+----------------------------------------------------- 2 | 2024-10-11 20:15:04.252868 | test PostgreSQL clone to a different DB server host (1 row)
-
`Resources`タブで、データベースクラスタバックアップページを開きます。テストデータを含むデータベースバックアップのSnapshotを選択します。次に、ボタンをクリックし `clone`てデータベースクローンワークフローを起動します。
-
ソースDBサーバ以外の別のDBサーバホストを選択してください。ターゲットホストで未使用のTCPポート543xを選択します。
-
クローニング処理の前後に実行するスクリプトを入力します。
-
必要に応じてEメールで通知
-
概要を確認し、 `Finish`クローニングプロセスを開始します。
-
[Running job]をクリックして開きます。
Job Details
ウィンドウ。ジョブステータスは、Monitor
タブ。 -
クローンデータベースはすぐにSnapCenterに登録されます。
-
ターゲットDBサーバホスト上のクローンデータベースクラスタを検証します。
[postgres@psql01 ~]$ psql -d postgres -h 10.61.186.7 -U postgres -p 5433 Password for user postgres: psql (14.13) Type "help" for help. postgres=# select * from test; id | dt | event ----+----------------------------+----------------------------------------------------- 2 | 2024-10-11 20:15:04.252868 | test PostgreSQL clone to a different DB server host (1 row) postgres=# select pg_read_file('/etc/hostname') as hostname; hostname ---------- psql02 + (1 row)
追加情報の参照先
このドキュメントに記載されている情報の詳細については、以下のドキュメントや Web サイトを参照してください。
-
SnapCenter ソフトウェアのドキュメント
-
TR-4956:『Automated PostgreSQL High Availability Deployment and Disaster Recovery in AWS FSX/EC2』