sql >> データベース >  >> RDS >> PostgreSQL

pghoardAlternatives-ClusterControlを使用したPostgreSQLバックアップ管理

    バックアップの管理は、手動で行うのは複雑でリスクの高い作業になる可能性があります。バックアップが必要な状況になりたくないので、バックアップが機能していないか、存在しないため、バックアップがバックアップポリシーに従って機能していることを知っておく必要があります。それは確かに大きな問題になるでしょう。したがって、ここでの最善の方法は、障害が発生した場合の問題を回避するために、テスト済みのバックアップ管理アプリケーションを使用することです。

    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

    最も重要な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

    このシステムの最も重要な機能のいくつかも見てみましょう。

      ユーザーフレンドリーなUI
    • バックアップと復元(同じノードまたは別のノードで)
    • バックアップのスケジュール バックアップからクラスターを作成する 自動バックアップ検証 圧縮 暗号化 自動クラウドアップロード
    • ポイントインタイムリカバリ(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が監視データを保存するために使用します)
    • パッケージマネージャーを介してClusterControlコントローラーパッケージをインストールおよび構成します パッケージマネージャーを介してClusterControlの依存関係をインストールする
    • ApacheとSSLを構成する
    • ClusterControlAPIURLとトークンを構成します
    • 最小限の構成オプションでClusterControlコントローラーを構成する 起動時にCMONサービスを有効にして起動します

    上記のスクリプトを実行すると、診断データの送信に関する質問が表示されます。

    $ 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 ...
    およびClusterControlで使用されるCMONユーザーパスワード:

    => 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日間の無料試用期間のある有料バージョンがあります。ドキュメントは明確で完全であり、例と詳細情報が含まれています。

    このブログがデータを安全に保つための最善の決定を下すのに役立つことを願っています。


    1. MMOゲームとデータベース設計

    2. 関数内のSELECTまたはINSERTは競合状態になりやすいですか?

    3. cxを使用してUnicodeを挿入できない-Oracle

    4. ダウンタイムなしでMySQLをAmazonEC2からオンプレミスデータセンターに移行する方法