α’αα
αααα»αααΆα’αααα’αα·ααααααα αααα»ααααααααΌα αα·αααααΎα’ααααααααααΆαα½αααΌαααααΆααα·αααααααααααα»αααΆαααΆα’αααααααΎααααΆααααα»αααααα αααα»ααα·αααααΎαα»αααΆα’αααααααααααααααααααααα ααΊαα·αααΌαααΆ dba ααα ααα»ααααβ¦
ααΆααΆαααΎαα‘αΎαααααααα»αααααΌααααα αααΆαααααα»ααα»αααααΌαααααΆααα·αααααα postgresql α ααααΆαααα - ααααΆααααααααΎ SSH α αΎαααααΌαααααΆααααΆα’αααΈαααααΎαααΆαααααα·αα αΆαααΆα ααα»ααα»αα ααΎααΎαααααΎα’αααΈαα αααα»αααααΈαααααα? ααααΌαα αΎα ααΎααα»α pgdump α αΌααα αααα»α cron ααααα»ααα»αα’αααΈαααααααααΆααα αααα»ααααααααΆαααΆαααααΆαααααα α αΎαααααα·αααΎααΎαααΆααααΆαααααα»α ααΎαααααΎαααααααΆαααααα ααααααααααΆαα
ααΎααααααΆαααααΆαααΊααΆααααα ααΆααααααΆα ααΌαααααΆααα·ααααααααααΌαααΆαααααααααααΆααΉαααΎαα‘αΎααααα αα +- 100 MB αααα»ααα½αααααα ααΆααΆααα·αααΆαααααααΆααααΈααΈαααΈαααααΆα αααααααααΆααααΆααΎααααΈααααα»ααα»αα’αααΈααααααααΆαααΆαα½α pgdump ααΉααααΆαααΆααα αααααΊααΆαααααααααααΆαααααα»ααα»ααααααααααα½αααααααααα
αα½αα±ααα
αΆααα’αΆαααααα? ααΌαααααΆααααααααΆααααααΆα
ααΆαααααα»ααα»αααααααααΊααΆααααααααααΆαααααα»ααα»ααα αααααααα·ααααα―αααΆααααααααΆααα’ααααααΌαααΆαα αααααα ααα»ααααααΆαααα―αααΆαααααΈααα»ααααα α αΎαααΆααΆαααααΆααααααΌαα αΆααααΆααααΈααΆααααααΎαα αααΆααα ααααααΈαα»αααα
ααΌα ααΆα’αααα’αα·ααααααααΆαααααααααα·αααΆαααααα (αα αααααα) ααΎααααΈαααααΈααΆααααα»αααααΆααα postgres αααα»αα ααααααααααααΌαα»ααααααααα ααΆααΆααααααΎαααΆαα, α’αααααΉα, ααΌα ααΆαα αααα»α AWS, DigitalOcean: α’αααααΆαα α»α αααΌαα»ααα½α - α’αααααα½αααΆαααΆαα αααα, α’αααααΆαα α»α ααΈααΈα - α’ααααααα αααΆαααααα»ααα»α, ααΈααΈ - α’αααααααα’αααΈααααααααΆααααα‘αααααα·αααΈαααΈααααα αααα»ααα·αααΆαααααΎααααΌαα»α α¬α§ααααα GUI αααααααααα’αΆαααα ααααα·αααΎα’αααααααΆαααα½α (α₯ααα·αααααα¬ααα) αααααα’αααΈααΆαα αααα»αααα·αααααα
αααααΆααααΈα αααΌα ααααααα»αααΆαααααΎαα§αααααααΈα pgbarman ΠΈ pgbackrest. αααα»αααααΆαααααα·αααΆαααααααααΆαα½αα―αααΆαααΈαα½ααα (α―αααΆααα·α αα½α ααΆαα αααα»αααΆαααααΆααΆααααααααΆαα’αααΈαααααααααΆαααΆαααααα ααααΆαα αΆαα) ααα»ααααααΆαα½αααΉαα―αααΆαααΈααΈα α―αααΆαααΆααααααα ααΆααααΎ ααα»αααααα·αααααααααααΆααα»ααα·ααααα·ααα ααΎααααΈααααα½αααΆαααΆαααααα’ααααααααααααα»αααΉααα·α αα ααΆαααααααααααΆ α’ααααααααααααΌαααΆααααααα
αααααΆααααΈα’αΆαα’αααααααα α’αααααΉααααααΈαααααααααΎαααΆαααααα»ααα»ααααααα αααααΆαα»ααα½αααΆαα αααΆαααΈαααααΈα ααααΆα (ααααΆααααΆαα½αααΆαααααα»ααα»α) αα·αααααΆααα½αααΆα‘αΎααα·ααααα»αααααΈααΆααααααα·αααααα α¬αααα αΆαααααααααα ααΎαααΆαααΈαααα
ααΆααααα α
ααΎααααΈααα·αααααα ααααΆαα‘αΎααα·α α’αααααΉαααααΌαααΆα VPS ααΈαα ααΈαα½αααΉαααΆαααααααααα»α (ααααΆαααααααΆαααααα»ααα»αααΉαααααΌαααΆααααααΆαα»α) αα·αααΈααΈαααΆααα·ααααΆαααΈααααααα½αα―αααΆαα½α postgres (αααα»αααααΈαααααααα»ααααα 11 αα postgres) α
ααΆααααΌαααΆαααααααααΆαα ααΎ server αααααΆα postgres α’αααααΆα root α’αααααααΎααααΆαα sudo α’αααααααΎααααΆαα postgres αα·α postgres αααα½αααΆααααΌαααΆαααα‘αΎα (α’αααααααΎααααΆαα postgres ααααΌαααΆααααααΎααααααααααααααααα·αα αααααα‘αΎα postgresql) α αΎααα ααΎ repository server ααΆα root αα·α sudo user (αα αααα»αααααα ααααΆαα αααααα’αααααααΎ pgbackrest ααΉαααααΌαααΆαααααΎ) α
ααΌα ααααααΎααααΈα±ααα’αααααΆααααα αΆαα·α ααΆααα αααααα·αααΆαααααΆαα‘αΎααα·α αααα»ααααααααΆα’ααααααααα ααααααααΆ ααΆαα½αααΉαα’αααααααΎααααΆααααΆ αα·αααΆαα½ααα·αααα·α’αααΈ ααααααα»αααΆαααααα·ααααα·ααΆααααααααΆ ααααααα»αααααα αα·ααα·αα·αααα’αααααα
ααΆαααα‘αΎα pgbackrest
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
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 pgbackrest:pgbackrest /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 pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
7. αα·αα·αααα
pgbackrest version
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo α¬ root)α
ααααΎαααΆαααααΆαααα‘αΎα pgbackrest αα ααΎαααΆαααΈααααααααΆα postgres ααΊααααααααααΆαα ααΉαααααΎαααΆαααα‘αΎααα ααΎααααΆαα (ααΆα pgbackrest ααααΌαααααα‘αΎααα ααΎαααΆαααΈαααααΆααααΈα) ααα»αααααα αααα»ααααΆααααααΈ 6 ααΆααααααααΆααΈααΈααα·αα α»αααααα:
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
αααα½αβααα:
sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
ααΆαααα‘αΎαα’αααααααααααΆααααΆαααΈαααααΆαααα SSH αααααααΆαααΆααααααααΆαα
ααΎααααΈα±αα pgbackrest ααααΎαααΆαααΆαααααΉαααααΌα α αΆαααΆα αααααΌαααααααα ααΆααααααααα’αααααααααααΆααααΆαααΈααα postgres αα·αααααΆαααααααααΎα―αααΆααααααΉαα
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
αααααΎαααΌαααααΉαα
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
ααΌααααααααα! ααΎαααααΎαααΆαααΆααααααααΆααΆαααΎαααααααΆα sudo α
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo α¬ root)α
αααααΎαααΌαααααΉαα
sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa
-t rsa -b 4096 -N ""
ααααΆαα (α’αααααααΎααααΆαα sudo)α
α ααααααααΆααΆααααααααααΆαααΈααα postgres αα αααΆαααΈαααααααΆααα
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<postgres_server_ip> cat /var/lib/postgresql/.ssh/id_rsa.pub) |
sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys
αα ααα αΆααααα’αααααΉαααααΌαααΆααα½αααααΆααααααααΆαααααααΆααα’αααααααΎ root α α’αααααααΌααααα αΌαααΆααααααααΆααααααα’αααααααΎ root αααααΆαααΈααα postgres!
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo)α
α ααααααααΆααΆαααααααααααΆαααα ααΆαααααΆαααΈααααααααααΎ postgresα
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' &&
echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' &&
sudo ssh root@<repository_server_ip> cat /home/pgbackrest/.ssh/id_rsa.pub) |
sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys
αα ααα αΆααααα’αααααΉαααααΌαααΆααα½αααααΆααααααααΆαααααααΆααα’αααααααΎ root α α’αααβααααΌαβαααα αΌαβααΆαααβαααααΆααβαααΆαβαα·αβααααΆααβααααβα’αααβααααΎ root ααβααααΆαα!
αααα»ααα·αα·ααα:
ααααΆαα (α’αααααααΎααααΆααααΆ root αααααΆααααΆαααα·αα»αααααααΆααα·ααααα)α
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
αααΆαααΈααα Postgres (α’αααααααΎααααΆααααΆ root αααααΆααααΆαααα·αα»αααααααΆααα·ααααα)α
sudo -u postgres ssh pgbackrest@<repository_server_ip>
ααΎαβααααΆααβααΆβααΎαβα’αΆα βα αΌαβααΆαβαααβααααΆαβαααα αΆα
ααΆαααα‘αΎααααΆαααΈααα postgres
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo α¬ root)α
1. ααΌαα’αα»ααααΆαα±αααααααΎαααΆαααΈααα postgres ααΈ IPs ααΆααααα α ααΎααααΈααααΎααΌα αααααααααα½αα―αααΆα postgresql.conf (ααΆαααΈααΆαααα /etc/postgresql/11/main folder) αααααααααααΆαααα ααΆα
listen_addresses = '*'
ααααα·αααΎαααααΆααααααααααΆααα½α α αΎα αα·ααααα ααααα· α¬αααααααααααααΆαααΆααααααααΆ '*'α
αα αααα»αα―αααΆα pg_hba.conf (ααΆαααΈααΆαααα αααα»αααα―αααΆα /etc/postgresql/11/main) αααααααααααΆααααΆααααααα
hostssl all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5
αααααΆαααααα:
hostssl/host - ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· SSL (ΠΈΠ»ΠΈ Π½Π΅Ρ)
all - ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π±Π°Π·Π°ΠΌ
all - ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (Π²ΡΠ΅ΠΌ)
0.0.0.0/0 - ΠΌΠ°ΡΠΊΠ° ΡΠ΅ΡΠΈ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ
md5 - ΡΠΏΠΎΡΠΎΠ± ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΡΠΎΠ»Ρ
2. α αΌααααααΎαααΆααααααα αΆαααΆα ααα αααα»α postgresql.conf (ααΆαααα·ααα αααα»αααα―αααΆα /etc/postgresql/11/main) αααααΆαα pgbackrest ααααΎααΆαα
archive_command = 'pgbackrest --stanza=main archive-push %p' # ΠΠ΄Π΅ main - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ postgres Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ main.
archive_mode = on
max_wal_senders = 3
wal_level = replica
3. α αΌαααααΎααΆααααααα αΆαααΆα ααα αααα»αα―αααΆαααααααα ααΆαααααααα pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-path=/var/lib/postgresql/11/main
[global]
log-level-file=detail
repo1-host=<repository_server_ip>
4. αααα»α postgresql α‘αΎααα·αα
sudo service postgresql restart
ααΆαααα‘αΎααααΆαααΈαααααααΆαα
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
α
αΌααααααΎαααΆααααααα
αΆαααΆα
ααα
αααα»αα―αααΆαααααααα
ααΆαααααααα pgbackrest
(/etc/pgbackrest/pgbackrest.conf):
[main]
pg1-host=<postgres_server_ip>
pg1-path=/var/lib/postgresql/11/main
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2 # ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ
Π±ΡΠΊΠ°ΠΏΠΎΠ². Π’.Π΅. Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΏΠΎΠ»Π½ΡΡ
Π±ΡΠΊΠ°ΠΏΠ° ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΡΠ΅ΡΠΈΠΉ - ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
start-fast=y # ΠΠ°ΡΠΈΠ½Π°Π΅Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΡΠΎ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ https://postgrespro.ru/docs/postgrespro/9.5/continuous-archiving
ααΆααααααΎαααααΆαα
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
αααααΎααααααααααα»αααααΈαααααΆααα ααααα ααααΆαα:
sudo mkdir -m 770 /var/lib/pgbackrest
sudo chown -R pgbackrest /var/lib/pgbackrest/
sudo -u pgbackrest pgbackrest --stanza=main stanza-create
ααΆααααα½ααα·αα·ααα
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo α¬ root)α
ααΎααα·αα·αααααΎαααΆαααΈααα Postgresα
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
ααΎααα·αα·αααααΎαααΆαααΈαααααααΆααα
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
ααΎαααααΎα±ααααααΆααααΆαα αααα»αααααααααΎαααΎααααααΆαα "αα·αα·αααααΆααααααααΆαααα αα: ααΆααααα ααααααααααα" α
αα»αααααΆαα? α αΌααααααα αααααααααα½αα±ααα αΆααα’αΆαααααααααα»αα
ααααΎααΆαααααα»ααα»α
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
1. α’αα»ααααααΆαααααα»ααα»αα
sudo -u pgbackrest pgbackrest --stanza=main backup
2. ααααΌαααααΆααααΆααΆαααααα»ααα»αααααΌαααΆααααααΎαα
ls /var/lib/pgbackrest/backup/main/
Pgbackrest ααΉααααααΎαααΆαααααα»ααα»αααααααααααΌαα ααααα·αααΎα’αααααααΆααααΆ α’αααα’αΆα ααααΎαααΆαααΆααααααααΆααααα»ααα»αααααααα α αΎαααααΌαααααΆααααΆαααααααααααααΎαααΆαααααα»ααα»αααααααα
ααααα·αααΎα’αααα ααααααΎααΆαααααα»ααα»αααααααααααααα αααααΆαααααααααΆαααααααααααα
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
ααααα·αααΎα’αααα ααααΆααα·ααααααα»αααΌααααα’α·α ααααααααααΆαααααααα
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
ααΆαααααΆαααΆαααααα»ααα»α
αααΆαααΈααα Postgres (α’αααααααΎααααΆαα sudo α¬ root)α
1. ααααααα αααααααααααα»αααααΎαααΆαα
sudo pg_ctlcluster 11 main stop
2. ααααΆαααΈααΆαααααα»ααα»αα
sudo -u postgres pgbackrest --stanza=main --delta restore
3. α αΆααααααΎααααα»αα
sudo pg_ctlcluster 11 main start
αααααΆααααΈααααΆαααΆαααααα»ααα»α ααΎαααααΌαααααΎααΆαααααα»ααα»αααΈααΈαα
ααααΆαα (α’αααααααΎααααΆαα pgbackrest)α
sudo pgbackrest --stanza=main backup
α’ααα αΎαα ααα»αααα ααααΈαα αααα»αα ααααααΉαα’αααααΆ αααα»ααα·αααααΆααΆαααααΎαα»αααΆ dba ααΆααααααααα α αΎαααΉαααααΎααααααα»αα±ααΆααα·α αα½α αααα»αα αα αα α»ααααααβααα αααα»αβαααα½αβα―αβαααα»αβα αΆααβααααΎαβαα·ααααΆβααΎβαααααΆαβααβααααααβααΌα βααΆ ααΆαβααααα»αβαα»α ααΆαβα αααα ααΆαβαααα½αβαα·αα·αααβααΆααΎαα α αΎααααα»αααααααααΆαααΆαααααΌα αα’αααΈαααααα ααΎααααΈαα½αα ααααααΌα αα½αααααα αααα αα·ααα»ααααααΉααααααααΌα ααααααΆαααααα½ααααα»αα
αα
αααα»αα’αααααααΆαααααααααα»αααΉαααααΆααΆααα·ααΆαα’αααΈαααααααα·ααααααααα - ααΆααααααααααα·αααααααα
ααΆα
αααααααα’αΆα ααΆαα’αα·αααααΈαααααΆαααααα»ααα»α αα·αααΆαααααα»αααααααΆααα
S3 ααΆαααααα»ααα»αααΆαααα rsync α
ααααα: www.habr.com