バックアップの管理は、手動で行うのは複雑でリスクの高い作業になる可能性があります。バックアップが必要な状況になりたくないので、バックアップが機能していないか、存在しないため、バックアップがバックアップポリシーに従って機能していることを知っておく必要があります。それは確かに大きな問題になるでしょう。したがって、ここでの最善の方法は、障害が発生した場合の問題を回避するために、テスト済みのバックアップ管理アプリケーションを使用することです。
PGHoardは、バックアップデータをクラウドオブジェクトストアに保存するPostgreSQLバックアップデーモンおよび復元システムです。 PostgreSQL 9.3以降をサポートし、現在サポートされている最新バージョンのPostgreSQL11までサポートします。現在のPGHoardバージョンは2.1.0で、2019年5月(1年前)にリリースされました。
ClusterControlは、データベースクラスター用のエージェントレスの管理および自動化ソフトウェアです。これは、ClusterControl UIから直接、またはClusterControl CLIを使用して、データベースサーバー/クラスターをデプロイ、監視、管理、およびスケーリングするのに役立ちます。バックアップ管理機能が含まれており、PostgreSQL 9.6、10、11、および12バージョンをサポートしています。現在のClusterControlバージョンは1.7.6で、先月、2020年4月にリリースされました。
このブログでは、PGHoardとClusterControlバックアップ管理機能を比較し、両方のシステムをインストールして使用する方法を説明します。このために、Ubuntu 18.04サーバーとPostgreSQL11を使用します(PGHoardを使用するためにサポートされている最新バージョンであるため)。同じデータベースサーバーにPGHoardをインストールし、ClusterControlにインポートします。
PGHoard
- クラウドオブジェクトストレージのサポート(AWS S3、Google Cloud、OpenStack Swift、Azure、Ceph)
- オブジェクトストレージから直接バックアップ復元、圧縮および暗号化
- ポイントインタイムリカバリ(PITR)
- オブジェクトストレージバックアップから新しいスタンバイを初期化し、複製ホットスタンバイとして自動的に構成します
これを使用する方法の1つは、別のバックアップマシンを用意することです。これにより、PGHoardはpg_receivexlogに接続して、データベースからWALファイルを受信できます。もう1つのモードは、pghoard_postgres_commandをPostgreSQLのarchive_commandとして使用することです。どちらの場合も、PGHoardはpg_basebackupを使用して定期的なベースバックアップを作成します。
ClusterControl
- バックアップと復元(同じノードまたは別のノードで)
- ポイントインタイムリカバリ(PITR)
- さまざまなバックアップ方法(論理、物理、完全、増分など)
これはバックアップ管理システムだけではないため、バックアップ関連の機能だけでなく、さまざまな重要な機能についても説明します。
- データベースのデプロイ/インポート:スタンドアロン、クラスター/レプリケーション、ロードバランサー
- スケーリング:ノードの追加/削除、レプリカの読み取り、クラスターのクローン作成、クラスター間のレプリケーション
- 監視:カスタムダッシュボード、障害検出、クエリモニター、パフォーマンスアドバイザ、アラームと通知、カスタムアドバイザの開発
- 自動リカバリ:ノードとクラスタのリカバリ、フェイルオーバー、高可用性環境
- 管理:構成管理、データベースパッチのアップグレード、データベースユーザー管理、クラウド統合、運用レポート、ProxySQL管理
- セキュリティ:キー管理、役割ベースのアクセス制御、LDAP / Active Directoryを使用した認証、SSL暗号化
推奨されるトポロジは、ClusterControlを実行するための個別のノードを用意して、障害が発生した場合に、自動回復およびフェイルオーバーのClusterControl機能(特に便利な機能)を利用できるようにすることです。 。
PGHoard
ドキュメントによると、PGHoardはPostgreSQLバージョン9.3以降をバックアップおよび復元できます。デーモンはPythonで実装され、CPythonバージョン3.5以降で動作します。要件に応じて、次のPythonモジュールが必要になる可能性があります。
- psycopg2でトランザクションログのメタデータを検索
- MicrosoftAzureオブジェクトストレージ用のazure
- AWS S3(またはCeph-S3)オブジェクトストレージのbotocore
- GoogleCloudオブジェクトストレージ用のgoogle-api-client
- バックアップの暗号化と復号化のための暗号化(バージョン0.8以降が必要)
- Snappyの圧縮と解凍のためのsnappy
- Zstandard(zstd)の圧縮と解凍のためのzstandard
- systemd統合のためのsystemd
- OpenStackSwiftオブジェクトストレージ用のswiftclient
- sftpオブジェクトストレージ用のparamiko
サポートされているオペレーティングシステムについては言及されていませんが、最新のLinux x86-64システムでテストされていますが、必要なモジュールを提供する他のプラットフォームで動作するはずです。
ClusterControl
ClusterControlサーバーには次のソフトウェアが必要です。
- MySQLサーバー/クライアント
- Apache Webサーバー(またはnginx)
- mod_rewrite
- mod_ssl
- .htaccessオーバーライドを許可する
- PHP(5.4以降)
- RHEL:php、php-mysql、php-gd、php-ldap、php-curl
- Debian:php5-common、php5-mysql、php5-gd、php5-ldap、php5-curl、php5-json
- Linuxカーネルセキュリティ(SElinuxまたはAppArmor)-無効にするか、許容モードに設定する必要があります
- OpenSSHサーバー/クライアント
- BASH(推奨:バージョン4以降)
- NTPサーバー-すべてのサーバーの時刻を1つのタイムゾーンで同期する必要があります
- socatまたはnetcat-バックアップのストリーミング用
そして、さまざまなオペレーティングシステムをサポートしています:
- Red Hat Enterprise Linux 6.x / 7.x / 8.x
- CentOS 6.x / 7.x / 8.x
- Ubuntu 12.04 / 14.04 / 16.04 / 18.04 LTS
- Debian 7.x / 8.x / 9.x / 10.x
ClusterControlがインストールスクリプト(install-cc)またはパッケージマネージャー(yum / apt)を介してインストールされている場合、すべての依存関係が自動的に満たされます。
PostgreSQLの場合、9.6 / 10.x / 11.x/12.xバージョンをサポートします。サポートされているデータベースの完全なリストは、ドキュメントにあります。
データベースノードへのパスワードなしのSSHアクセス(秘密鍵と公開鍵を使用)と特権OSユーザー(rootまたはsudoユーザーの場合があります)が必要です。
PGHoardのインストールプロセス
PostgreSQLデータベースが稼働していると想定しているので、残りのパッケージをインストールしましょう。 PGHoardはPythonパッケージであるため、必要なパッケージをインストールした後、pipコマンドを使用してインストールできます。
$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy
$ pip3 install pghoard
このインストールプロセスの一環として、このツールで動作するようにPostgreSQLインスタンスを準備する必要があります。このためには、postgresql.confを編集して、WALアーカイブを許可し、max_wal_sendersを増やす必要があります。
wal_level = logical
max_wal_senders = 4
archive_mode = on
archive_command = pghoard_postgres_command --mode archive --site default --xlog %f
この変更には、データベースの再起動が必要です:
$ service postgresql restart
それでは、PGHoardのデータベースユーザーを作成しましょう:
$ psql
CREATE USER pghoard PASSWORD 'Password' REPLICATION;
そして、pg_hba.confファイルに次の行を追加します。
host replication pghoard 127.0.0.1/32/32 md5
$ service postgresql reload
これを機能させるには、PGHoardのJSON構成ファイルを作成する必要があります。これについては、次の「使用法」セクションで説明します。
ClusterControlのインストールプロセス
ドキュメントに記載されているように、さまざまなインストール方法があります。手動インストールの場合、必要なパッケージは同じドキュメントに指定されており、すべてのプロセスのステップバイステップガイドがあります。
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
インストールスクリプトは、次のタスクを自動化しようとします。
- ローカルMySQLサーバーをインストールして構成します(ClusterControlが監視データを保存するために使用します)
- ApacheとSSLを構成する
- ClusterControlAPIURLとトークンを構成します
上記のスクリプトを実行すると、診断データの送信に関する質問が表示されます。
$ sudo ./install-cc
!!
Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported
Minimum system requirements: 2GB+ RAM, 2+ CPU cores
Server Memory: 1024M total, 922M free
MySQL innodb_buffer_pool_size set to 512M
Severalnines would like your help improving our installation process.
Information such as OS, memory and install success helps us improve how we onboard our users.
None of the collected information identifies you personally.
!!
=> Would you like to help us by sending diagnostics data for the installation? (Y/n):
次に、必要なパッケージのインストールを開始します。次の質問は、使用されるホスト名についてです:
=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):
ローカルデータベースがインストールされると、インストーラーはデータベースを保護し、入力する必要のあるルートパスワードを作成します。
=> Starting database. This may take a couple of minutes. Do NOT press any key.
Redirecting to /bin/systemctl start mariadb.service
=> Securing the MySQL Server ...
=> !! In order to complete the installation you need to set a MySQL root password !!
=> Supported special password characters: [email protected]#$%^&*()_+{}<>?
=> Press any key to proceed ...
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special characters: [email protected]#$%^&*()_+{}<>?
=> Enter a CMON user password:
=> ClusterControl installation completed!
Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.
Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://10.10.10.10/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.
UIに初めてアクセスするときは、30日間の無料試用期間に登録する必要があります。
30日間の無料試用期間が終了すると、インストールは自動的に次のように変換されます。商用ライセンスがない限り、コミュニティエディション。
PGHoardsの使用法
このツールをインストールした後、PGHoard構成でJSONファイル(pghoard.json)を作成する必要があります。これは例です:
{
"backup_location": "/var/lib/pghoard",
"backup_sites": {
"default": {
"nodes": [
{
"host": "127.0.0.1",
"password": "Password",
"port": 5432,
"user": "pghoard"
}
],
"object_storage": {
"storage_type": "local",
"directory": "./backups"
},
"pg_data_directory": "/var/lib/postgresql/11/main/"
}
}
}
この例では、バックアップを作成してローカルに保存しますが、クラウドアカウントを構成してそこに保存することもできます:
"object_storage": {
"aws_access_key_id": "AKIAQTUN************",
"aws_secret_access_key": "La8YZBvN********************************",
"bucket_name": "pghoard",
"region": "us-east-1",
"storage_type": "s3"
},
次に、このJSONファイルを使用してバックアップを実行します。
$ pghoard --short-log --config pghoard.json
INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'
INFO Creating a new basebackup for 'default' because there are currently none
INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057
INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'
INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s
INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s
INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s
INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s
127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -
INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s
INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s
INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s
INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s
INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s
INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s
127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -
INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0
INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s
INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s
「backup_location」ディレクトリ(この場合は/ var / lib / pghoard)に、現在の状態のpghoard_state.jsonファイルがあります。
$ ls -l /var/lib/pghoard
total 48
drwxr-xr-x 6 root root 4096 May 21 13:13 default
-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json
バックアップを含むサイトディレクトリ(この場合は「default /」と呼ばれます):
$ ls -l /var/lib/pghoard/default/
total 16
drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup
drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming
drwxr-xr-x 2 root root 4096 May 21 13:13 xlog
drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming
folloginコマンドを使用してバックアップリストを確認できます:
$ pghoard_restore list-basebackups --config pghoard.json
Available 'default' basebackups:
Basebackup Backup size Orig size Start time
---------------------------------------- ----------- ----------- --------------------
default/basebackup/2020-05-21_13-13_0 4 MB 23 MB 2020-05-21T13:13:31Z
ClusterControlの使用法
このため、PostgreSQLデータベースクラスターがClusterControlにインポートされているか、このシステムを使用してデプロイされていることを前提としています。
ClusterControlで、クラスターを選択し、[バックアップ]セクションに移動してから、[バックアップの作成]を選択します。
この例では、「バックアップのスケジュール」オプションを使用します。バックアップをスケジュールするときは、方法やストレージなどの一般的なオプションを選択するだけでなく、スケジュール/頻度も指定する必要があります。
バックアップを取得するサーバーという1つの方法を選択する必要があります、およびそれを保存したい場所。対応するボタンを有効にして、バックアップをクラウド(AWS、Google、またはAzure)にアップロードすることもできます。
次に、圧縮、暗号化、および保持の使用を指定する必要がありますあなたのバックアップの。この手順では、「バックアップの確認」機能を有効にして、バックアップを別のノードに復元することで、バックアップが使用可能であることを確認することもできます。
「クラウドへのバックアップのアップロード」オプションを有効にすると、次のようになります。クラウドプロバイダーと資格情報を指定するセクションを参照してください。クラウドアカウントをClusterControlと統合していない場合は、ClusterControl->統合->クラウドプロバイダーに移動して追加する必要があります。
バックアップセクションでは、バックアップの進行状況を確認できます。メソッド、サイズ、場所などの情報。
ClusterControlコマンドライン(s9s)
タスクのスクリプト作成と自動化、またはコマンドラインだけを使用する場合でも、ClusterControlにはs9sツールがあります。これは、データベースクラスターを管理するためのコマンドラインツールです。このツールを使用してバックアップを作成および一覧表示する方法の例を見てみましょう。
$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait
ClusterControlCLIのドキュメントセクションにその他の例と情報があります。
これらの言及されたバックアップ管理システムを比較した結論として、PGHoardはこのタスクのための無料ですが複雑なソリューションであると言えます。公式ドキュメントは少し貧弱なので、それがどのように機能し、どのように構成するかを理解するのに少し時間が必要です。また、最新のリリースは1年前であったため、少し古くなっているように見えます。さらに、ClusterControlは、バックアップ管理だけでなく、ユーザーフレンドリーで使いやすいUIを備えた、多くの機能を備えたオールインワンの管理システムです。コミュニティ(利用可能な機能が制限されています)と、30日間の無料試用期間のある有料バージョンがあります。ドキュメントは明確で完全であり、例と詳細情報が含まれています。