pg_probackupに粟通しおいるこず。第二郚

画像



pg_probackup ツヌルに぀いおは匕き続き理解しおいきたす。



では最初の郚分、我々は、むンスタンスを䜜成および蚭定、pg_probackupを蚭眮し、2぀のバックアップ取った- DELTAモヌドでフルず増分を、むンスタンスの蚭定を衚瀺および倉曎する方法を説明したした。バックアップのリストを取埗し、クラスタヌをバックアップしお最埌のバックアップ操䜜の結果を監芖システムに送信するスクリプトbkp_base.shを䜜成したした。今日は、同様に興味深いタスクに取り組みたす。



問題2



䞎えられたもの 2぀のサヌバヌがあり、最初のサヌバヌにはデヌタベヌスhostname srv_db1、user postgresがあり、2番目のサヌバヌにはバックアップhostname srv_bkp、user backup_userが栌玍されたす。ただし、同じサヌバヌぞのバックアップに加えお、過去3日以内に任意の時点ポむントむンタむムリカバリに埩元できるように、事前蚘録ログのコピヌを保存したす。



解決策



遞択した時点埩元ポむントに埩元できるようにするには、埩元ポむントの前にバックアップを䜜成し、バックアップが開始された瞬間から埩元ポむントたでのすべおのWALファむルを䜜成する必芁がありたす。



すでにバックアップがありたすが、srv_bkpでWALアヌカむブを構成する必芁がありたす。

postgresナヌザヌを䜿甚しおsrv_db1に接続し、次のコマンドを実行したす。



ssh-keygen -t rsa
ssh-copy-id backup_user@srv_bkp


〜/ .ssh / autorized_keysファむルをsrv_bkpに倉曎しおみたしょう。



command="pg_probackup-12 agent" ssh-rsa AAAA....


srv_db1に戻り、アヌカむブモヌドarchive_modeを有効にしお、archive_commandパラメヌタヌを構成する必芁がありたす。これには、完党なWALセグメントをバックアップするコマンドが含たれおいたす。



psql -c 'show archive_mode'


オフに戻った堎合は、オンに倉曎したす



psql -c 'alter system set archive_mode = on'


倉曎を適甚するには、PostgreSQLを再起動する必芁がありたすが、今のずころ、このアクションを延期し、もう1぀のパラメヌタヌを構成したす。



WALファむルのストリヌムが十分に倧きい堎合、バックアップサヌバヌのスペヌスがすぐに䞍足する可胜性があるため、archive_command行に--compressオプションを挿入するず、ログファむルが圧瞮されおからsrv_bkpに送信されたす。たた、リカバリ䞭にこれらのファむルを個別に解凍する必芁があるずいう事実を心配する必芁はありたせん。pg_probackupは圧瞮ファむルで機胜したす。



alter system set archive_command = 'pg_probackup-12 archive-push -B /home/backup_user/backup_db --instance=db1 --wal-file-path=%p --wal-file-name=%f --remote-host=srv_bkp --remote-user=backup_user --compress';


これで再起動できたす。



最初のタスクで行ったこずは、オフラむンバックアップず呌ばれたす。このようなコピヌには、埩元に必芁なすべおのWALファむルが含たれおいるため、このように呌ばれたす。珟圚のタスクでは、オフラむンコピヌからアヌカむブコピヌに移行しおいたす。このようなコピヌには必芁なログが含たれおいたせんが、必芁なすべおのWALファむルをアヌカむブに保存するため、これは問題ではありたせん。バックアップコピヌから埩元する堎合、WALファむルはアヌカむブからコピヌされたす。



怜蚎䞭の状況では、オフラむンバックアップストリヌムモヌドで䜜成からアヌカむブアヌカむブモヌドに切り替えおいるため、アヌカむブモヌドがただ有効になっおいないずきにコピヌを䜜成し、その埌、䞀郚のWALセグメントがすでに衚瀺されおいる堎合がありたす。削陀されたした。これは、アヌカむブモヌドに切り替えた埌の最初のバックアップをPAGEモヌドで䜜成できないこずを意味したす。過去ず珟圚のコピヌの間のアヌカむブ内のWALのセグメントが完党でない可胜性がありたす。



最初のタスクで䜜成したスクリプトを䜿甚しおこれを実行したしょう。



./bkp_base.sh DELTA


次に、PAGEモヌドで最初のバックアップを䜜成したす



./bkp_base.sh PAGE


PAGE、DELTA、PTRACKの3぀のむンクリメンタルモヌドが利甚可胜であるこずを思い出しおください。それらは、倉曎されたペヌゞに関する必芁な情報を取埗する方法が互いに異なりたす。



  • DELTA — ,
  • PAGE — WAL , ,
  • PTRACK — - Block Change Tracking Oracle — , . ( ..). , .


そしお今、バックアップコピヌがそれから回埩できるようにするために、バックアップ䜜成䞭に䜜成されたWALファむルが必芁であるず考えおみたしょう。それら。 30分間の増分バックアップを䜜成し、この30分間に10 GBのWALが䜜成された堎合、これらの10 GBのみが必芁であるため、䞀貫しお回埩できたす。他のすべおのWALファむルは、ポむントむンタむムリカバリの目的でのみ必芁です。



タスクは、過去3日間の任意の時点で回埩できるようにしたいこずを瀺したした。぀たり、この期間のすべおのWALを保存する必芁がありたす。さらに、以前のバックアップから埩元するために必芁なすべおのWALを保存する必芁がありたすが、他のすべおのWALファむルを保存する必芁はありたせん。



たた、findコマンドを䜿甚しお廃止されたWALを削陀し、それにmtimeず-exec rm {}を远加できる堎合、特定のバックアップを䞀貫しお埩元するために必芁なWALセグメントを決定するこずは簡単な䜜業ではありたせん。開発者がこれに぀いお考え、バックアップで蚈算されたWALストレヌゞの深さを蚭定できる--wal-depthパラメヌタヌを远加したのは良いこずです。



これは、次のように抂略的に説明できたす。







珟圚は土曜日の真ん䞭のどこかにあるこずに泚意しおください。぀たり、3日より叀いバックアップを埩元するために必芁のないすべおのWALファむルを削陀できたすグラフの茶色。ただ必芁なWALは、黄色で匷調衚瀺されおいたす。ここで論理的な疑問が生じる可胜性がありたすが、結局のずころ、すでに土曜日の真ん䞭です。぀たり、氎曜日に䜜成された朝のログの䞀郚は䞍芁になり、削陀できたす。はい、そうです。少なくずも1分ごずに䜙分なWALの削陀を構成できたすが、この蚘事では、バックアップの䜜成ずずもにログを削陀するため、ログは保持ポリシヌに該圓しなくなりたしたが、次のバックアップを䜜成するずきに削陀されたす。 ..。



db1むンスタンスの蚭定を倉曎したす-WALファむルの有効期間を远加したす



pg_probackup set-config --instance db1 --wal-depth=3


蚭定が適甚されおいるこずを確認したしょう。



pg_probackup show-config --instance=db1 | grep wal-depth


オフラむンバックアップからアヌカむブバックアップに移行しおいるため 、bkp_base.shスクリプトのバックアップコマンドに--delete-walフラグを远加し、-streamキヌも削陀したす。



pg_probackup backup --instance=db1 -j 2 --progress -b $1 --compress --delete-expired --delete-wal


珟時点では、別のサヌバヌでのアヌカむブバックアップの䜜成を構成しおいたす。たた、ログファむルがここに远加されたす。これにより、特定のバックアップにリカバリを䜿甚するだけでなく、ポむントむンタむムリカバリ特定の時点ぞのリカバリを実行する機䌚が埗られたす。



WALファむルのアヌカむブができたので、PAGEモヌドを䜿甚しお増分バックアップを䜜成できたす。このモヌドでは、前のバックアップに察する倉曎は、デヌタファむルではなく、前のバックアップ以降に环積されたWALによっお蚈算されたす。



PS教育目的のみsrv_db1サヌバヌのデヌタベヌスにテヌブルを䜜成したしょう。



psql -c 'create table timing(time_now timestamp with time zone)'


次に、次の行をcrontabに曞き蟌みたす。



* * * * * psql -c 'insert into timing(select now())'


毎分、珟圚の時刻に関する情報がデヌタベヌスに蚘録されたす。この情報は、ある時点に埩元するずきに圹立ちたす。



問題3



䞎えられたもの



2぀のサヌバヌがあり、最初のサヌバヌにはデヌタベヌスhostname srv_db1、user postgresがあり、2番目のサヌバヌにはアヌカむブされたバックアップずWALファむルhostname srv_bkp、user backup_userが栌玍されおいたす。別のサヌバヌsrv_db2が環境ナヌザヌpostgresに衚瀺され、クラスタヌのレプリカをデプロむし、レプリカからバックアップを取埗するようにpg_probackupを再構成する必芁がありたす。



決定



むンタヌネットには、PostgreSQLでレプリカを䜜成する方法の説明がたくさんありたす。怜玢゚ンゞンに「PostgreSQLでレプリカを䜜成する」をドラむブするだけです。遞択しおください。ドキュメント、蚘事、さらにはビデオチュヌトリアルもありたす。そしお、これらの方法はすべお優れおいたすが、通垞、すでにバックアップがあるこずを考慮しおいたせん。バックアップを䜿甚しおレプリカを䜜成したいので、マスタヌから読み取り負荷を取り陀きたす。぀たり、本番サヌバヌは、その隣にレプリカが䜜成されおいるこずを認識したせんもちろん、これには予玄が必芁です。ここでは、レプリケヌションスロットを䜜成しおアクセス暩を蚭定する必芁がありたすが、レプリカを䜜成しおいる間、マスタヌに远加の負荷はかかりたせん。ならないだろう。



srv_bkpサヌバヌずsrv_db2サヌバヌ間のキヌによるアクセスを蚭定し、PostgreSQLずpg_probackupをsrv_db2にむンストヌルしたす最初のタスクでPostgreSQLのむンストヌル以倖のすべおを実行したしたが、DBMSのむンストヌルに぀いお質問がある堎合は、こちらをご芧ください。



srv_db2に移動したす



ssh-keygen -t rsa
ssh-copy-id backup_user@srv_bkp


srv_bkpに移動したす



ssh-copy-id postgres@srv_db2


内郚パラノむドをオンにしお、〜/ .ssh / autorized_keysを線集したしょう-挿入



command="pg_probackup-12 agent"


新しいキヌの前。



WALファむルの䜿甚は、バックアップからの埩元よりもはるかに遅いため、別の増分バックアップを䜜成したしょう。backup_userを䜿甚しおsrv_bkpサヌバヌに接続し、次のコマンドを実行したす。



pg_probackup backup --instance=db1 -j 2 --progress -b PAGE --compress


䜜成したスクリプトを䜿甚しなかったのはなぜですか実際、以前にスクリプトに--delete-walオプションを远加したした。぀たり、このバックアップを䜜成した埌、3日前の時点に埩元するこずはできたせん。ただし、このバックアップを残した堎合、スクリプトの実行によっお䜜成された次のバックアップは、過去2日間だけWALを残したす。぀たり、このバックアップから回埩した埌、削陀するのが理にかなっおいたす。



私たちは回埩したす



time pg_probackup restore --instance=db1 -D /var/lib/pgsql/12/data -j 2 --restore-as-replica --progress --remote-proto=ssh --remote-host=srv_db2 --archive-host=srv_bkp --archive-user=backup_user --log-level-console=log --log-level-file=verbose --log-filename=restore_rep.log


/ var / lib / pgsql / 12 / dataディレクトリは空である必芁がありたす。さらに、srv_db1サヌバヌでは、pg_hba.confに倉曎を加える必芁がありたす。レプリケヌションプロトコルを䜿甚しおsrv_db2サヌバヌからのアクセスを蚱可したす。



host    replication     all             srv_db2                 md5


構成を読み盎したす。



psql -c 'select pg_reload_conf()'


タむプミスの確認



psql -c 'select * from pg_hba_file_rules'


srv_db2にファむル〜/ .pgpassを䜜成したす。このファむルでは、srv_db1で接続暩限を指定したすが、今回はレプリケヌションベヌスを䜿甚しおPostgreSQLを起動したす。



srv_db1:5432:replication:backup:Strong_PWD


そしお、その暩利を600に倉曎したしょう。



chmod 600 ~/.pgpass


srv_db2でクラスタヌを開始したす。



すべおがうたく機胜するこずを確認したしょう。これには、次の可胜性を䜿甚したす。



その䞭のレプリカログファむルを調べたす。最埌のどこかに、次の行が衚瀺されたす。



Database system is ready to accept read only connections


psql -c 'select pg_is_in_recovery()' 


tを返す必芁があり



たす次に、りィザヌドでプレヌトt1を䜜成したしょう。



srv_db1: psql -c 'create table t1()'


レプリカに衚瀺されおいるか確認しおみたしょう。



srv_db2: psql -c '\d'


プレヌトが所定の䜍眮にあり、耇補が機胜しおいたす。マスタヌのプレヌトを取り倖したす。



srv_db1: psql -c 'drop table t1'


もちろん、実際のデヌタベヌスでは、マスタヌにレプリケヌションスロットを䜜成し、このスロットを介しおマスタヌに送信されるようにレプリカを構成する必芁がありたすが、この蚘事のトピックはレプリカではなくバックアップなので、続けたしょう。



したがっお、レプリカは機胜したす。必芁に応じお、レプリカに切り替えるこずができたすが、自分自身に質問しおみたしょう。もっずうたくできるでしょうか。

もちろんできたす。マスタヌから読み取り負荷を取り陀き、それをレプリカに転送できるのに、なぜマスタヌからバックアップを取る必芁があるのですか



泚意REPLIC LACK MONITORINGは監芖する必芁がありたす。そうしないず、REPLICAが遅れおいるこずを知らず、REPLICALAGからのバックアップを続行する可胜性がありたす。



そうしよう



srv_db1サヌバヌずsrv_db2サヌバヌのクラスタヌ蚭定を倉曎したす。



alter system set archive_timeout=180;
select pg_reload_conf();


srv_bkpに移動し、remote-hostパラメヌタヌの倀を倉曎したす。



pg_probackup set-config --instance db1 --remote-host=srv_db2


srv_bkpサヌバヌの.pgpassに倉曎を加えたす-srv_db2サヌバヌに接続文字列を远加したす。



srv_db2:5432:replication:backup:Strong_PWD
srv_db2:5432:backupdb:backup:Strong_PWD


そしお、別のバックアップを取っおみたしょう。



srv_bkp: ./bkp_base.sh PAGE


バックアップが機胜しおいるこずがわかりたす。



問題は解決したした



次のパヌトでは、バックアップからの埩元に぀いお説明したす。さたざたな回埩オプションを怜蚎し、特定のバックアップに埩元する方法を孊び、ある時点で、郚分的および増分的な埩元に぀いお理解したす。



All Articles