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

PostgreSQLのディザスタリカバリにBarmanを使用する

    一般的に、PostgreSQLのバックアップと復元のオプションとして利用できる強力なツールがたくさんあるはずです。 Barman、PgBackRest、BARTは、このコンテキストでいくつか例を挙げます。私たちの注意を引いたのは、Barmanが生産展開と市場動向に迅速に追いついているツールであるということでした。

    Dockerベースの展開であっても、バックアップを別のクラウドストレージに保存する必要がある場合でも、高度にカスタマイズ可能なディザスタリカバリアーキテクチャのニーズがある場合でも、Barmanはそのようなすべての場合に非常に強力な候補です。

    このブログでは、展開についてほとんど想定せずにBarmanについて説明していますが、どのような場合でも、これは可能な機能セットのみと見なす必要があります。 Barmanは、このブログでキャプチャできるものをはるかに超えており、「PostgreSQLインスタンスのバックアップと復元」を検討する場合はさらに調査する必要があります。

    DR対応の導入の前提条件

    RPO =0は一般的にコストがかかります。同期スタンバイサーバーの導入はそれを満たすことがよくありますが、プライマリサーバーのTPSに影響を与えることがよくあります。

    PostgreSQLと同様に、Barmanは、RPOとパフォーマンスのニーズを満たすために多数の展開オプションを提供します。展開の単純さ、RPO=0またはほぼゼロのパフォーマンスへの影響を考えてください。バーマンはすべてに適合します。

    バックアップと復元のアーキテクチャのディザスタリカバリソリューションを確立するために、次の展開を検討しました。

    図1:Barmanを使用したPostgreSQLの展開 2つのサイトがあります(一般的には災害復旧サイトの場合)-Site-XおよびSite-Y。

    Site-Xには次のものがあります:

    • PostgreSQLサーバーインスタンスpgServerをホストする1台のサーバー「pgServer」と1台のOSユーザー「postgres」
        スーパーユーザーロール「bmuser」をホストするPostgreSQLインスタンス
    • Barmanバイナリをホストする1台のサーバー「bServer」とOSユーザー「bmuser」
    サイト-Yには次のものがあります:

    • Barmanバイナリをホストする1台のサーバー「geobServer」とOSユーザー「bmuser」
    この設定には複数の種類の接続が含まれます。

    • 「bServer」と「pgServer」の間:
      • BarmanからPostgreSQLインスタンスへの管理プレーン接続
      • BarmanからPostgreSQLインスタンスへの実際のベースバックアップを実行するためのrsync接続
      • PostgreSQLインスタンスからBarmanへのbarman-wal-archiveを使用したWALアーカイブ
      • バーマンでpg_receivexlogを使用したWALストリーミング
    • 「bServer」と「geobserver」の間:
      • 地理レプリケーションを提供するためのBarmanサーバー間の同期
    接続優先 サーバー間の主な接続ニーズはssh経由です。パスワードなしにするために、sshキーが使用されます。 sshキーを確立して交換しましょう。

    pgServerの場合:

    [email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
    
    [email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    
    [email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

    bServerの場合:

    [email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
    
    [email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    
    [email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

    geobServerの場合:

    [email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
    
    [email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    
    [email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

    PostgreSQLインスタンスの構成

    postgresインスタンスを再構成する必要がある主なものは2つあります。ベースディレクトリと、その後に生成されるWAL/トランザクションログです。 Barmanサーバーはそれらをインテリジェントに追跡します。必要なのは、バーマンがこれらのアーティファクトを収集するために適切なフィードが生成されるようにすることです。

    postgresql.confに次の行を追加します。

    listen_addresses = '172.25.130.180'     #as per above deployment assumption
    
    wal_level = replica                     #or higher 
    
    archive_mode = on
    
    archive_command = 'barman-wal-archive -U bmuser bserver pgserver %p'

    アーカイブコマンドは、WALがpostgresインスタンスによってアーカイブされるときに、barman-wal-archiveユーティリティがそれをBarmanサーバーに送信することを保証します。したがって、barman-cliパッケージは「pgServer」で利用できるようにする必要があることに注意してください。 barman-wal-archiveユーティリティを使用したくない場合は、rsyncを使用する別のオプションがあります。

    以下をpg_hba.confに追加します:

    host     all                    all     172.25.130.186/32     md5
    
    host     replication            all     172.25.130.186/32     md5

    基本的に、「bmserver」からこのpostgresインスタンスへのレプリケーションと通常の接続を許可しています。

    インスタンスを再起動し、bmuserというスーパーユーザーロールを作成します:

    [email protected]$ pg_ctl restart
    
    [email protected]$ createuser -s -P bmuser 

    必要に応じて、bmuserをスーパーユーザーとして使用することも避けられます。このユーザーに割り当てられた特権が必要になります。上記の例では、パスワードとしてbmuserも使用しました。ただし、PostgreSQLインスタンスの構成が必要な限り、これでほぼすべてです。

    バーマン構成

    Barmanの構成には、次の3つの基本コンポーネントがあります。

      グローバル構成 サーバーレベルの構成 バーマンを実行するユーザー

    この場合、Barmanはrpmを使用してインストールされるため、グローバル構成ファイルは次の場所に保存されています:

    /etc/barman.conf

    サーバーレベルの構成をbmuserホームディレクトリに保存したかったため、グローバル構成ファイルには次の内容が含まれていました。

    [barman]
    
    barman_user = bmuser
    
    configuration_files_directory = /home/bmuser/barman.d
    
    barman_home = /home/bmuser
    
    barman_lock_directory = /home/bmuser/run
    
    log_file = /home/bmuser/barman.log
    
    log_level = INFO
    プライマリバーマンサーバーの構成

    上記の展開では、プライマリBarmanサーバーをPostgreSQLインスタンスが保持されているのと同じデータセンター/サイトに保持することにしました。同じ利点は、必要な場合の遅延が少なく、回復が速いことです。言うまでもなく、PostgreSQLサーバーでも必要なコンピューティングやネットワーク帯域幅のニーズは少なくなります。

    BarmanがpgServer上のPostgreSQLインスタンスを管理できるようにするには、次の内容の構成ファイル(pgserver.confという名前)を追加する必要があります。

    [pgserver]
    
    description =  "Example pgserver configuration"
    
    ssh_command = ssh [email protected]
    
    conninfo = host=pgserver user=bmuser dbname=postgres
    
    backup_method = rsync
    
    reuse_backup = link
    
    backup_options = concurrent_backup
    
    parallel_jobs = 2
    
    archiver = on
    
    archiver_batch_size = 50
    
    path_prefix = "/usr/pgsql-12/bin"
    
    
    
    streaming_conninfo = host=pgserver user=bmuser dbname=postgres
    
    streaming_archiver=on
    
    create_slot = auto

    そして、PostgreSQLインスタンスのbmuserのクレデンシャルを含む.pgpassファイル:

    echo 'pgserver:5432:*:bmuser:bmuser' > ~/.pgpass 

    重要な構成項目をもう少し理解するには:

    • ssh_command :rsyncが実行される接続を確立するために使用されます
    • conninfo :Barmanがpostgresサーバーとの接続を確立できるようにする接続文字列
    • reuse_backup :より少ないストレージで増分バックアップを可能にするため
    • backup_method :ベースディレクトリのバックアップを取る方法
    • path_prefix :pg_receivexlogバイナリが保存されている場所
    • streaming_conninfo :WALのストリーミングに使用される接続文字列
    • create_slot :postgresインスタンスによってスロットが作成されたことを確認するには
    パッシブバーマンサーバー構成 地理複製サイトの構成は非常に簡単です。必要なのは、このパッシブノードサイトがレプリケーションを実行するためのssh接続情報だけです。

    興味深いのは、このようなパッシブノードがミックスモードで動作できることです。つまり、アクティブなBarmanサーバーとして機能してPostgreSQLサイトのバックアップを実行し、並行して他のBarmanサーバーのレプリケーション/カスケードサイトとして機能することができます。

    この場合、Barmanのこのインスタンス(Site-Y上)は単なるパッシブノードである必要があるため、必要なのはファイル/home/bmuser/barman.d/pgserver.confを作成することだけです。次の構成で:

    [pgserver]
    
    description =  "Geo-replication or sync for pgserver"
    
    primary_ssh_command = ssh [email protected]

    キーが交換され、このノードのグローバル構成が前述のように行われることを前提としています。構成はほぼ完了しています。

    これが最初のバックアップと復元です

    bserverで、WALを受信するためのバックグラウンドプロセスがトリガーされていることを確認します。次に、サーバーの構成を確認します。

    [email protected]$ barman cron
    
    [email protected]$ barman check pgserver
    すべてのサブステップでチェックがOKである必要があります。そうでない場合は、/ home / bmuser/barman.logを参照してください。

    Barmanでバックアップコマンドを発行して、WALを適用できるベースデータがあることを確認します。

    [email protected]$ barman backup pgserver

    「geobmserver」で、次のコマンドを実行してレプリケーションが実行されていることを確認します。

    [email protected]$ barman cron 
    
    [email protected]$ barman list-backup pgserver

    cronはcrontabファイルに挿入する必要があります(存在しない場合)。簡単にするために、ここでは示していません。最後のコマンドは、バックアップフォルダがgeobmserverにも作成されていることを示します。

    次に、Postgresインスタンスで、ダミーデータを作成しましょう:

    [email protected]$ psql -U postgres -c "CREATE TABLE dummy_data( i INTEGER);"
    
    [email protected]$ psql -U postgres -c "insert into dummy_data values ( generate_series (1, 1000000 ));"

    PostgreSQLインスタンスからのWALのレプリケーションは、次のコマンドを使用して確認できます。

    [email protected]$ psql -U postgres -c "SELECT * from pg_stat_replication ;”

    Site-Yでインスタンスを再作成するには、最初にWALレコードが切り替えられていることを確認します。または、この例では、クリーンなリカバリを作成します。

    [email protected]$ barman switch-xlog --force --archive pgserver

    Site-Xで、スタンドアロンのPostgreSQLインスタンスを起動して、バックアップが正常かどうかを確認しましょう。

    [email protected]$ barman cron 
    
    barman recover --get-wal pgserver latest /tmp/data

    次に、必要に応じてpostgresql.confファイルとpostgresql.auto.confファイルを編集します。次に、この例で行われた変更について説明します。

    • postgresql.conf :listen_addressesは、デフォルトでlocalhostになるようにコメントされています
    • postgresql.auto.conf :restore_commandからsudbmuserを削除しました

    / tmp / dataにこのデータを表示し、レコードの存在を確認します。

    結論 これは氷山の一角にすぎませんでした。バーマンは、それが提供する機能のためにこれよりもはるかに深いです-例えば。同期スタンバイ、フックスクリプトなどとして機能します。言うまでもなく、本番環境のニーズに合わせて構成するには、ドキュメント全体を検討する必要があります。


    1. SQL Server 2016:クエリ結果をCSVファイルに保存

    2. EntityFrameworkでのMySQLの使用

    3. テーブルの開始日と終了日からのPostgresのGenerate_series

    4. MySQL –ランダム番号を生成する方法