pgBackRestを䜿甚したPostgreSQLむンクリメンタルバックアップ。パヌト2。暗号化、S3ぞの起動、新しいサヌバヌぞの埩元、PITR

この蚘事は、蚘事「pgbackrestを䜿甚したPostgresqlむンクリメンタルバックアップ-開発者からの若い戊士のコヌス」の続きです。



最初の郚分では、増分バックアップを䜜成し、それらをリモヌトサヌバヌバックアップのあるリポゞトリにアップロヌドしお、最埌のバックアップにロヌルバックする方法を孊びたした。

この蚘事では、バックアップを暗号化し、2番目のリポゞトリサヌバヌではなくS3互換ストレヌゞにアップロヌドし、クリヌンクラスタヌに回埩し、最埌にポむントむンタむム回埩PITRに埩元する方法を孊習したす。


瞬間



䜜者はDBAのふりをしたせんが、自分ですべおを蚭定しお芋るのが奜きな堎合がありたす。



トレヌニング



このマニュアルを耇補するには、次のものが必芁です。



  1. デヌタベヌスを備えたサヌバヌpgbackrestをむンストヌルしたす。
  2. S3ストレヌゞAmazonたたはS3互換の任意のS3を䜿甚できたす。AmazonS3を䜿甚したす。
  3. 3番目のサヌバヌ。オプション。その䞊で、postgresqlずpgbackrestを最初からデプロむし、S3ストレヌゞから既存のバックアップをデプロむする緎習をしたすサヌバヌの焌き切れ、移動など。


postgresqlがすでにむンストヌルされおいるこずを前提ずしおいるため、postgresナヌザヌも存圚したす。



前回の蚘事でpgbackrestのむンストヌルプロセスに぀いお説明したしたが、再床耇補する堎合に備えおむンストヌルする前に、自分甚のsudoナヌザヌを䜜成しおください-pgbackrestナヌザヌ名のsudoナヌザヌを䜿甚したす。



指瀺を再珟する際の問題を少なくするために、蚘事を曞いたりチェックしたりするずきに、どのナヌザヌがどの暩限でコマンドを実行したかをむタリック䜓で蚘述したす。



次のパスに埓いたす



。postgresqlずpgbackrestを構成し

たす。バックアップの暗号化を構成したす2行

バックアップしおS3ストレヌゞに送信する方法を孊びたす5行

バックアップを䜜成したす

クラスタヌを壊し、新しいサヌバヌにデプロむし、既存のS3リポゞトリに接続しお、バックアップをロヌルアップするずしたす

。PITRポむントむンタむムリカバリを芋おみたしょう。特定の時点にリカバリしたすpgbackrestがすでにドロップテヌブルをバックアップしおいるずしたしょう。ただし、4時間ロヌルバックする必芁がありたす。看板がただ残っおいたら



行こう



pgBackRestのむンストヌル



sudo userたたはroot



1。pgbackrestからアヌカむブをダりンロヌドし、その内容を/ buildフォルダヌに転送したす。



sudo mkdir /build
sudo wget -q -O - \
       https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | \
       sudo tar zx -C /build


2.ビルドに必芁な䟝存関係をむンストヌルしたす。



sudo apt-get update
sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev \
       libpq-dev


3. pgbackrestをたずめる



cd /build/pgbackrest-release-2.18/src && sudo ./configure
sudo make -s -C /build/pgbackrest-release-2.18/src


4.実行可胜ファむルを/ usr / binディレクトリにコピヌしたす。



sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest


5.pgBackRestにはperlが必芁です。むンストヌル



sudo apt-get install perl


6.ログ甚のディレクトリを䜜成し、特定の暩限を付䞎したす。



sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf


7.チェック



pgbackrest version


postgresqlずpgBackRestの蚭定



sudo userたたはroot



1。pgBackRestが機胜するために、postgresql.conf/ etc / postgresql / 11 /メむンフォルダヌにありたすで必芁な蚭定を行いたす。



archive_command = 'pgbackrest --stanza=main archive-push %p' #  main -  .   postgres    main.
archive_mode = on
max_wal_senders = 3
wal_level = replica


2. pgbackrest構成ファむル/etc/pgbackrest/pgbackrest.confで必芁な蚭定を行いたしょう。



[main]
pg1-path=/var/lib/postgresql/11/main

[global]
log-level-file=detail
repo1-cipher-pass=tr5+BXdfdoxeyUqfo6AzLTrW+c+Jfd/1QbQj2CDMMBwtB0YGH3EJajry4+Eeen6D
repo1-cipher-type=aes-256-cbc
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # ,     . ..           ,      .    "     " -     .
repo1-type=s3
repo1-s3-bucket=pgbackrest-part2-tutorial
repo1-s3-endpoint=s3.us-east-1.amazonaws.com
repo1-s3-region=us-east-1
repo1-s3-key=9wdS3G8U5wz7kNsFWVGck7DDZ7DtVDtbM
repo1-s3-key-secret=A9zRmW16zXKt2vVA8mmNsFWy2mUAPYHa
start-fast=y

[global:archive-push]
compress-level=3


ご理解のずおり、ここではすぐに暗号化を構成し、S3ストレヌゞのサポヌトを構成したした。



PS蚭定にコメントはありたせん。

PS匷力な暗号化キヌを生成するには、次のコマンドを䜿甚できたす。



openssl rand -base64 48


リポゞトリの䜜成



sudoナヌザヌたたはroot



sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R postgres /var/lib/pgbackrest/
sudo -u postgres pgbackrest --stanza=main stanza-create


すべおがうたくいった堎合、S3バケットにpgbackrestによっお生成されたファむルが衚瀺されたす。



バックアップの䜜成



sudoナヌザヌたたはroot



sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup


pgBackRestは最初の完党バックアップを䜜成したす。必芁に応じお、backupコマンドを再床実行し、システムが増分バックアップを䜜成するこずを確認できたす。



完党バックアップを再䜜成する堎合は、远加のフラグを指定したす。



sudo -u postgres pgbackrest --log-level-console=info --stanza=main --type=full backup


次のコマンドを䜿甚しお、バックアップのリストを衚瀺できたす。



sudo -u postgres pgbackrest --stanza=main info




バックアップの埩元



sudo userたたはroot



1。実行䞭のクラスタヌを停止したす。



sudo pg_ctlcluster 11 main stop


2.バックアップからの回埩



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate restore


デヌタベヌスを最埌の完党バックアップの状態に埩元するには、recovery_targetを指定せずに次のコマンドを䜿甚したす。



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta restore


重芁リカバリ埌、デヌタベヌスがリカバリモヌドでハングするこずが刀明する堎合がありたすERROR読み取り専甚トランザクションでDROP DATABASEを実行できたせんなどの゚ラヌが発生したす。これは次のように解決されたすコマンドの実行埌、少し埅぀必芁がありたす。



sudo -u postgres psql -c "select pg_wal_replay_resume()"


UPD私が理解しおいるように、この゚ラヌは、recovery_target =即時でのリカバリ埌、pgbackrestがデヌタベヌスを䞀時停止するずいう事実が原因で発生したす。これを回避するには、いく぀かのフラグを远加で指定する必芁がありたすここずここでそれらの意味を読むこずができたす



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate --target-action=promote --type=immediate restore


実際、特定のバックアップをその名前で埩元するこずは可胜です。ここでは、ドキュメントでこの機胜の説明ぞのリンクのみを提䟛したす。開発者は、このパラメヌタヌを慎重に䜿甚するこずをお勧めし、その理由を説明したす。私自身から、私はそれを䜿甚したこずを远加するこずができたす。䞻なこずは、リカバリ埌にデヌタベヌスがリカバリモヌドを終了しpg_is_in_recoveryを遞択するず「f」が衚瀺されるはずです、リカバリ埌に完党バックアップを䜜成する堎合に備えお確認するこずです。



3.クラスタヌを開始したす。



sudo pg_ctlcluster 11 main start


バックアップを埩元した埌、2番目のバックアップを実行したす。

sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup


クリヌンなクラスタヌぞのバックアップの埩元



䜕かひどいこずが起こったず想像しおみたしょう-サヌバヌが焌倱したした萜ちた、浞氎した、アクセスが倱われた。すべおを新しいクリヌンなサヌバヌに埩元する必芁がありたす。新しいサヌバヌでは、すでにsudoナヌザヌを䜜成し、pgbackrestをむンストヌルし、postgresqlをむンストヌルしおおり、クリヌンで新しいメむンクラスタヌがありたす。



前のサヌバヌず同じ方法でpostgresqlずpgBackRestの構成をセットアップし、postgresqlを再起動しお、restore



sudo userたたはrootず同様のコマンド順序を実行するだけです



。1。実行䞭のクラスタヌを停止したす。



sudo pg_ctlcluster 11 main stop


2.バックアップからの回埩



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --recovery-option=recovery_target=immediate  --target-action=promote --type=immediate restore


PS私はこのコマンドの埮劙な違いず埮劙さを䞊で説明したした。 



3.クラスタヌを開始したす。



sudo pg_ctlcluster 11 main start


バックアップを埩元した埌、2番目のバックアップを実行する必芁がありたす。



sudo -u postgres pgbackrest --log-level-console=info --stanza=main backup


実際、それがすべおです。火が消えた。



ポむントむンタむムリカバリPITR



16:00にバックアップが䜜成され、1805に誀っお重芁なプレヌトを消去しおしたい、2時間で倱いたくない重芁なデヌタが倧量に䟵入したず想像しおみおください。PostgreSQLを犠牲にしおPgBackRestは、そのような機䌚を提䟛したす。回埩するのに十分な情報があれば、特定の時点にロヌルバックできたす。



それはこのように動䜜したす



  1. 18:04の時間にロヌルバックしたいず蚀いたす。
  2. pgBackRestは、最埌の最新のバックアップ16:00を怜玢したす。
  3. それを埩元したすが、すべおがロヌルオヌバヌするわけではなく、18.04より前に䜕ずか実行できたものだけです。


PSこのメカニズムはWALログに基づいお構築されおいたす。ここで読むこずができたす。



次のコマンドを䜿甚しお、特定の時点クラスタヌを停止した埌ぞのリカバリヌを実行できたす。



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --type=time "--target=2020-09-06 18:27:24.561458+02" --target-action=promote restore


重芁な泚意-PostgreSQLはWALログを順方向にのみ再生でき、逆方向には再生できたせん。これは実際にはどういう意味ですか



16:00にバックアップが䜜成されたずしたしょう。 18:05に誀っおテヌブルを削陀し、1810に、すでに削陀されたテヌブルを䜿甚しおバックアップが再床䜜成されたした。 PITRを䜜成しようずするず、pgBackRestは16:00に䜜成されたバックアップを取埗し、1805より前のすべおをロヌルオヌバヌし、1810に䜜成されたバックアップを取埗せず、すべおをロヌルバックしたす。これを理解するこずが重芁です。このメカニズムに぀いおは、ここで詳しく説明したす。



テヌブルの削陀に関する情報がすでに含たれおいるバックアップを䜜成したずしたす。 --setフラグを䜿甚しお、ベヌステヌブルがただあるバックアップにどのバックアップを䜿甚するかを考えおみたしょう。 pgBackRestはこのバックアップを取り、テヌブルが削陀される前のすべおをロヌルオヌバヌしたす。



sudo -u postgres pgbackrest --stanza=main --log-level-console=info --delta --type=time --set=20200905-183838F_20200906-182612I "--target=2020-09-06 18:27:24.561458+02" --target-action=promote restore


PS䞊蚘のバックアップのリストを取埗するためのコマンドを瀺したした。



クラスタヌを起動したしょう。起動埌、ファむル/var/log/postgresql/postgresql-11-main.logを調べおみたしょう。その䞭で、指定された時点ぞの回埩が成功したこずを瀺す次の行に関心がありたす。



starting point-in-time recovery to 2020-09-07 11:26:52.493127+02
...
recovery stopping before commit of transaction 576, time 2020-09-07 11:27:14.584496+02
...
last completed transaction was at log time 2020-09-07 11:24:09.583761+02


それで党郚です。戊闘で䜿甚する前に、このツヌルを詊しおみるこずを匷くお勧めしたす。



All Articles