ืืชื ืืืชืืจ
ืื ื ืืคืชื. ืื ื ืืืชื ืงืื ืืืงืืื ืืื ืืจืืงืฆืื ืขื ืืกืืก ืื ืชืื ืื ืืืฉืชืืฉ ืืืื. ืืฉืื ืืืคื ืื ื ืื ืืชืืืืจ ืืืืืช ืื ืื ืืขืจืืช, ืืขืื ืคืืืช ืืื ื-dba. ืืืโฆ
ืื ืงืจื ืฉืืืืชื ืฆืจืื ืืืจืื ืืืืื ืฉื ืืกื ืื ืชืื ืื postgresql. ืืื ืขื ื ืื - ืคืฉืื ืืฉืชืืฉ ื-SSH ืืืื ืฉืืื ืขืืื ืืื ืืืงืฉ ืืกืฃ. ืื ืขืืฉืื ืืืงืจืื ืืืื? ืื ื ืืื, ืื ืื ื ืืืืคืื ืืช pgdump ืืชืื cron, ืืืืื ืืื ืืืจืืืื ืื ืืื, ืืื ืื ืื ื ืืืืืื ืืืืจื, ืื ืื ื ืฉืืืืื ืืช ืืืจืืืื ืืื ืืืงืื ืจืืืง.
ืืคืขื ืืงืืฉื ืืื ืฉืืคื ืืชืืื ืืืช, ืืกืืก ืื ืชืื ืื ืืื ืืืืจ ืืืืื ืื-+- 100 ืืื ืืืื. ืืืืื, ืืืจื ืืื ืฉืืืขืืช ืืจืฆืื ืืืืืช ืืื ืขื pgdump ืืืขืื. ืื ืืืงืื ืฉืื ืืืืืืื ืืฆืืืจืื ืืืื ืืืฆืื.
ืืขื ืืื? ืืจืืืื ืืืืื ืืืชืื.
ืืืืื ืืฆืืืจ ืืื ืกืื ืฉื ืืืืื ืืืฉืจ ืื ืื ืงืืฆื ืืืงืืจ ืืืขืชืงืื, ืืื ืจืง ืืืฉืื ืืืื ืืฉืชื ื ืืื ืืฆืืจืช ืืขืืชืง ืืงืืื.
ืืื ืื ืืคืชื ืฉืืืฉ ืื ืืื ืืืื (ืืืืชื ืชืงืืคื) ืืืืื ืืช ืืืืจืืืืืืช ืฉื postgres, ืจืฆืืชื ืืืฆืื ืืช ืืืคืชืืจ ืืืจืืง. ืืืื, ืืชื ืืืืข, ืืื ื-AWS, DigitalOcean: ืืืฆืช ืขื ืืคืชืืจ ืืื - ืงืืืืช ืฉืืคืื, ืืืฆืช ืขื ืืฉื ื - ืืืืจืช ืืืืืืื, ืืฉืืืฉื - ืืืืืช ืืื ืืื ืฉืขืืช ืืืืจื. ืื ืืฆืืชื ืืคืชืืจ ืื ืืื GUI ืืคื. ืื ืืชื ืืืืจืื ืืื ืืื (ืืื ื ืื ืืื), ืืชืื ืขืืื ืืชืืืืืช.
ืืืืจ ืืืคืืฉ ืืืืื ืืฆืืชื ืฉื ื ืืืื pgbarman ะธ ืืฉืขื ืช pg. ืคืฉืื ืื ืืฆืืืชื ืขื ืืจืืฉืื (ืชืืขืื ืืืื ืืืื, ื ืืกืืชื ืืืืื ืืื ืืคื ืืืจืืืื ืืฉื ืื), ืืื ืขื ืืฉื ื ืืชืืขืื ืืชืืจืจ ืืจืืื, ืืื ืื ืืฃ ืืคืืืื. ืืื ืืคืฉื ืืช ืขืืืืชื ืฉื ืื ืฉืขืืื ืืคื ื ืืฉืืื ืืืื, ื ืืชื ืืืืจ ืื.
ืืืืจ ืงืจืืืช ืืืืจ ืื, ืชืืืื ืืืฆื ืืืฆืข ืืืืืืื ืืฆืืืจืื, ืืฉืืืจ ืืืชื ืืฉืจืช ืืจืืืง (ืืืืจ ืขื ืืืืืืื) ืืืฉืืืจ ืืืชื ืืืงืจื ืฉื ืืืืื ื ืชืื ืื ืื ืืขืืืช ืืืจืืช ืืฉืจืช ืืจืืฉื.
ืืืจืื
ืืื ืืฉืืืจ ืืช ืืืืจืื ืชืืืงืง ืืฉื ื VPS. ืืจืืฉืื ืืืื ืืืืกืื (ืืืืืจ ืขืืื ืืืืืกื ื ืืืืืืืื), ืืืฉื ื, ืืืขืฉื, ืืฉืจืช ืขืฆืื ืขื postgres (ืืืงืจื ืฉืื, ืืจืกื 11 ืฉื postgres).
ืืื ืื ืืื ืฉืืฉืจืช ืขื postgres ืืฉ ืื root, sudo user, postgres user ืืืืชืงื postgres ืขืฆืื (ืืฉืชืืฉ postgres ื ืืฆืจ ืืืืืืืืช ืืขืช ืืชืงื ืช postgresql), ืืืฉืจืช ืืืืืจ ืืฉ root ื-sudo user (ืืืืจืื ืืฉืืฉ ืฉื ืืืฉืชืืฉ pgbackrest).
ืืื ืฉืืืื ืื ืคืืืช ืืขืืืช ืืฉืืืืจ ืืืืจืืืช, ืื ื ืืืชื ืืืืชืืืช ื ืืื ืืืคื, ืขื ืืืื ืืฉืชืืฉ ืืขื ืืืื ืืืืืืช ืืืฆืขืชื ืืช ืืคืงืืื ืชืื ืืื ืืชืืื ืืืืืงื ืฉื ืืืืืจ.
ืืชืงื ืช ืืฉืขื ืช pg
ืืืืจ (ืืฉืชืืฉ pgrestrest):
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. ืืจืืืช ืืฉืขื ืช pg:
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. ืืฉืขื ืช Pgback ืืืจืฉืช 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 ืื ืฉืืจืฉ):
ืชืืืื ืืชืงื ืช pgbackrest ืขื ืฉืจืช ืขื postgres ืืืื ืืชืืืื ืืืชืงื ื ืืืืืจ (ืื, ืืฉ ืืืชืงืื ืืช pgbackrest ืืฉื ื ืืฉืจืชืื), ืืื ืืคืกืงื ืืฉืืฉืืช ืืคืงืืื ืืฉื ืืื ืืืืืจืื ื:
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 ืืืืืจ ืืืืฆืขืืช ืงืืืฅ ืืืคืชื.
ืืืืจ (ืืฉืชืืฉ pgrestrest):
ืฆืืจ ืืื ืืคืชืืืช:
mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa
-t rsa -b 4096 -N ""
ืืืืจื! ืื ื ืืคืขืืืื ืืช ืืคืงืืืืช ืืขืื ืืื sudo.
ืฉืจืช Postgres (ืืฉืชืืฉ sudo ืื ืฉืืจืฉ):
ืฆืืจ ืืื ืืคืชืืืช:
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
ืืฉืื ืื ืชืชืืงืฉื ืืืืื ืืช ืืกืืกืื ืขืืืจ ืืฉืชืืฉ ืืฉืืจืฉ. ืืชื ืฆืจืื ืืืืื ืืช ืืกืืกืื ืฉื ืืฉืชืืฉ ืืฉืืจืฉ ืฉื ืฉืจืช 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
ืืฉืื ืื ืชืชืืงืฉื ืืืืื ืืช ืืกืืกืื ืขืืืจ ืืฉืชืืฉ ืืฉืืจืฉ. ืืชื ืฆืจืื ืืืืื ืืืืืง ืืช ืืกืืกืื ืฉื ืืฉืชืืฉ ืืฉืืจืฉ ืฉื ืืืืืจ!
ืื ื ืืืืงืื:
ืืืืจ (ืืฉืชืืฉ ืฉืืจืฉ, ืขื ืืืจืช ืื ืืกืื):
sudo -u pgbackrest ssh postgres@<postgres_server_ip>
ืฉืจืช Postgres (ืืฉืชืืฉ ืฉืืจืฉ, ืขื ืืืจืช ืื ืืกืื):
sudo -u postgres ssh pgbackrest@<repository_server_ip>
ืื ื ืืืืืื ืฉื ืงืื ืืืฉื ืืื ืืขืืืช.
ืืงืืช ืฉืจืช postgres
ืฉืจืช Postgres (ืืฉืชืืฉ sudo ืื ืฉืืจืฉ):
1. ืืืื ื ืืคืฉืจ ืืคืืงื ืขื ืฉืจืช postgres ืืืชืืืืช IP ืืืฆืื ืืืช. ืืฉื ืื, ืขืจืื ืืช ืืงืืืฅ postgresql.conf (ืืืืงื ืืชืืงืืื /etc/postgresql/11/main), ืืืกืคืช ืืฉืืจื ืืืื:
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) ืืื ืฉ-pgrest ืชืขืืื:
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):
ืืืื ื ืืฆืข ืืช ืืืืืจืืช ืืืจืืฉืืช ืืงืืืฅ ืืชืฆืืจื ืืฉืขื ืช pg
(/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 # ะะฐัะฐะผะตัั, ัะบะฐะทัะฒะฐััะธะน ัะบะพะปัะบะพ ั
ัะฐะฝะธัั ะฟะพะปะฝัั
ะฑัะบะฐะฟะพะฒ. ะข.ะต. ะตัะปะธ ั ะฒะฐั ะตััั ะดะฒะฐ ะฟะพะปะฝัั
ะฑัะบะฐะฟะฐ ะธ ะฒั ัะพะทะดะฐะตัะต ััะตัะธะน, ัะพ ัะฐะผัะน ััะฐััะน ะฑัะบะฐะฟ ะฑัะดะตั ัะดะฐะปะตะฝ. ะะพะถะฝะพ ะฟัะพะธะทะฝะพัะธัั ะบะฐะบ "ั
ัะฐะฝะธัั ะฝะต ะฑะพะปะตะต ะดะฒัั
ะฑัะบะฐะฟะพะฒ" - ะฟะพ ะฐะฝะฐะปะพะณะธะธ ั ัะพัะฐัะธัะผะธ ะปะพะณะพะฒ. ะกะฟะฐัะธะฑะพ @Aytuar ะทะฐ ะธัะฟัะฐะฒะปะตะฝะธะต ะพัะธะฑะบะธ.
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 ืื ืฉืืจืฉ):
ืื ืื ื ืืืืงืื ืืฉืจืช 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 ืื ืฉืืจืฉ):
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()"
ืืืขืฉื, ืืคืฉืจ ืืฉืืืจ ืืืืื ืกืคืฆืืคื ืืคื ืฉืื. ืื ื ืื ื ืจืง
3. ืืชืื ืืช ืืืฉืืื:
sudo pg_ctlcluster 11 main start
ืืืืจ ืฉืืืืจ ืืืืืื, ืขืืื ื ืืืฆืข ืืืืื ืฉื ื:
ืืืืจ (ืืฉืชืืฉ pgbackrest):
sudo pgbackrest --stanza=main backup
ืื ืืื. ืืกืืืื, ืื ื ืจืืฆื ืืืืืืจ ืืื ืฉืื ื ืืฉืื ืืืคื ืื ืื ืกื ืืืชืืืืช ื-dba ืืืืจ ืืืฉืชืืฉ ืืขื ื ืื ืืืืืื ืืช ืืื ืงืื ื. ื ืืื ืืขืืฉืื, ืื ื ืขืฆืื ืืชืืื ืืืืื ื ืืฉืืื ืฉืื ืื ืืื ืืืืื, ืฉืืคืื, ื ืืืืจ ืืื'. ืืื ื ืืืชื ืืืืืช ืงืื ืื ืขื ืืชืืฆืืืช ืขื ืื ืช ืืชืจืื ืชืจืืื ืงืื ื ืืงืืืื ืืืืฉืืืจ ืืขืฆืื ืืคื ืฆ'ืืืื ืงืื ืื.
ืืืืืจืื ืืืืื ืื ืกื ืืืืจ ืขื ืชืืื ืืช ื ืืกืคืืช - ืฉืืืืจ ื ืชืื ืื ืืืฉืืื ื ืงื, ืืฆืคื ืช ืืืืืืื ืืคืจืกืื ื-S3, ืืืืืืื ืืืืฆืขืืช rsync.
ืืงืืจ: www.habr.com