Bi pgbackrest re paşvekêşên postgresql zêde - qursek ji bo şervanek ciwan ji pêşdebiran

Disclaimer

Ez pêşdebir im. Ez kodê dinivîsim û tenê wekî bikarhêner bi databasê re têkilî dikim. Bi tu awayî ez xwe wekî rêveberê sîstemê, ji dbayê re zêde nakim. Lebê…

Wusa çêbû ku min hewce kir ku ez hilanînê ji databasa postgresql organîze bikim. Ewr tune - tenê SSH bikar bînin û pê ewle bibin ku her tişt bêyî ku drav bixwaze dixebite. Di rewşên wiha de em çi bikin? Rast e, em pgdump dişoxilînin cron, her roj her tiştî pişta xwe didin arşîvê, û heke em bi tevahî winda bibin, em vê arşîvê dişînin cîhek dûr.

Vê carê dijwarî ew bû ku li gorî plansaziyan, databas diviyabû ku rojane bi qasî +- 100 MB mezin bibe. Bê guman, piştî çend hefteyan, xwesteka ku hûn her tiştî bi pgdump re paşde bikin dê winda bibe. Li vir e ku paşvekêşên zêde têne rizgarkirinê.

Balkêş? Bi xêr hatî pisîkê.

Piştgiriya zêdebûyî celebek paşvekişandinê ye dema ku ne hemî pelên çavkaniyê têne kopî kirin, lê tenê yên nû û yên ku ji çêkirina kopiya berê ve hatine guhertin.

Mîna her pêşdebirek ku TEMAM nexwest (di wê demê de) têbigihîje tevliheviyên postgres, min xwest ku bişkoka kesk bibînim. Welê, hûn dizanin, mîna di AWS, DigitalOcean de: we pêl bişkokek kir - we dubare kir, we pêça duyemîn kir - we paşvekêşan saz kir, ya sêyem - we her tişt çend demjimêran paşde zivirand. Min bişkokek an amûrek GUI-ya xweşik nedît. Heke hûn yek (belaş an erzan) dizanin, di şîroveyan de li ser wê binivîsin.

Piştî googlê min du amûr dîtin pgbarman и pgbackrest. Ez bi ya yekem re bi tenê bi ser neketim (belgesaziya pir kêm, min hewl da ku her tiştî li gorî destanên kevn derxim holê), lê bi ya duyemîn re belge derkete pêş, lê ne bê xeletî. Ji bo hêsankirina karê kesên ku bi karekî bi vî rengî re rû bi rû ne, ev gotar hate nivîsandin.

Piştî xwendina vê gotarê, hûn ê fêr bibin ka meriv çawa paşvekêşanek zêde çêdike, wan li serverek dûr (depoya bi hilanînê) hilîne û di rewşa windabûna daneyê an pirsgirêkên din ên li ser servera sereke de wan sererast bike.

Amadekirin

Ji bo nûvekirina manualê hûn ê du VPS hewce bikin. Ya yekem dê hilanîn be (depoya ku dê paşvekêşan li ser were hilanîn), û ya duyemîn, bi rastî, server bixwe bi postgres re (di rewşa min de, guhertoya 11 ya postgres).

Tê texmîn kirin ku li ser servera bi postgres we root heye, bikarhêner sudo, bikarhêner postgres û postgres bixwe tê saz kirin (bikarhênerê postgres dema ku postgresql saz dike bixweber tê afirandin), û li ser servera depoyê bikarhênerek root û sudo heye (di destanê de navê bikarhêner pgbackrest dê were bikar anîn).

Ji bo ku hûn di dema nûvekirina rêwerzan de kêmtir pirsgirêkên we hebin, ez bi îtalîk dinivîsim min li ku, bi kîjan bikarhêner û bi kîjan mafan ferman pêk anî dema nivîsandin û kontrolkirina gotarê.

Pgbackrest saz dike

Depo (bikarhêner pgbackrest):

1. Arşîvê ji pgbackrest dakêşin û naveroka wê veguherînin peldanka /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. Girêdanên ku ji bo kombûnê hewce ne saz bikin:

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

3. Komkirina pgbackrest:

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

4. Pelê îcrakar li pelrêça /usr/bin kopî bikin:

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

5. Pgbackrest perl hewce dike. Lêkirin:

sudo apt-get install perl

6. Ji bo têketin pelrêçan biafirînin, hin mafan bidin wan:

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. Kontrol bikin:

pgbackrest version

Pêşkêşkara Postgres (bikarhêner sudo an root):

Pêvajoya sazkirina pgbackrest li ser serverek bi postgres re mîna pêvajoya sazkirinê ya li ser depoyê ye (erê, pgbackrest divê li ser her du serveran were saz kirin), lê di paragrafa 6an de fermanên duyemîn û dawîn:

sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

şûna bi:

sudo chown postgres:postgres /var/log/pgbackrest
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Sazkirina pêwendiya di navbera pêşkêşkeran de bi SSH-ya bê şîfre

Ji bo ku pgbackrest rast bixebite, pêdivî ye ku meriv pêwendiya di navbera servera postgres û depoyê de bi karanîna pelê mifteyê mîheng bike.

Depo (bikarhêner pgbackrest):

Cotek mifteyê çêbikin:

mkdir -m 750 /home/pgbackrest/.ssh
ssh-keygen -f /home/pgbackrest/.ssh/id_rsa 
       -t rsa -b 4096 -N ""

Hişyariya kerema xwe! Em fermanên jorîn bêyî sudo dimeşînin.

Pêşkêşkara Postgres (bikarhêner sudo an root):

Cotek mifteyê çêbikin:

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 ""

Depo (bikarhêner sudo):

Mifteya giştî ya servera postgres li servera depoyê kopî bikin:

(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

Di vê gavê de dê şîfreya bikarhênerê root ji we were pirsîn. Pêdivî ye ku hûn şîfreya bikarhênerê root ya servera postgres binivîsin!

Pêşkêşkara Postgres (bikarhêner sudo):

Bi postgres mifteya giştî ya depoyê li serverê kopî bikin:

(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

Di vê gavê de dê şîfreya bikarhênerê root ji we were pirsîn. Pêdivî ye ku hûn tam şîfreya bikarhênerê root ya depoyê binivîsin!

Em kontrol dikin:

Depo (bikarhênerê root, ji bo paqijiya ceribandinê):

sudo -u pgbackrest ssh postgres@<postgres_server_ip>

Pêşkêşkara Postgres (bikarhênerê root, ji bo paqijiya ceribandinê):

sudo -u postgres ssh pgbackrest@<repository_server_ip>

Em piştrast dikin ku em bêyî pirsgirêk bigihîjin.

Sazkirina serverek postgres

Pêşkêşkara Postgres (bikarhêner sudo an root):

1. Werin em destûrê bidin ku servera postgres ji IP-yên derveyî bixin. Ji bo vê yekê, pelê biguherînin postgresql.conf (di peldanka /etc/postgresql/11/sereke de ye), rêzê lê zêde bike:

listen_addresses = '*'

Ger xêzek wusa jixwe hebe, an wê şîrove bikin an jî nirxa parametreyê wekî '*' destnîşan bikin.

Di pelê de pg_hba.conf (di peldankê de jî cih digire /etc/postgresql/11/sereke) rêzikên jêrîn lê zêde bike:

hostssl  all  all  0.0.0.0/0  md5
host  all  all  0.0.0.0/0  md5

derê

hostssl/host - подключаемся через SSL (или нет)
all - разрешаем подключение ко всем базам
all - имя пользователя, которому разрешаем подключение (всем)
0.0.0.0/0 - маска сети с которой можно подключаться
md5 - способ шифрования пароля

2. Werin em mîhengên pêwîst tê de bikin postgresql.conf (ew di peldankê de ye /etc/postgresql/11/sereke) ji bo ku pgbackrest bixebite:

archive_command = 'pgbackrest --stanza=main archive-push %p' # Где main - название кластера. При установке postgres автоматически создает кластер main.
archive_mode = on
max_wal_senders = 3
wal_level = replica

3. Ka em di pelê veavakirina pgbackrest de mîhengên pêwîst bikin (/etc/pgbackrest/pgbackrest.conf):

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

[global]
log-level-file=detail
repo1-host=<repository_server_ip>

4. Postgresql ji nû ve barkirin:

sudo service postgresql restart

Sazkirina serverek depoyê

Depo (bikarhênerê pgbackrest):

Ka em di pelê veavakirinê de mîhengên pêwîst bikin 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

Çêkirina depoyekê

Depo (bikarhênerê pgbackrest):

Ji bo komê depoyek nû biafirînin dest:

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

Kontrola

Pêşkêşkara Postgres (bikarhêner sudo an root):

Em li ser servera postgres kontrol dikin:

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

Depo (bikarhênerê pgbackrest):

Em li ser servera depoyê kontrol dikin:

sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check

Em piştrast dikin ku di encam de em rêza "dawiya fermanê kontrol bikin: bi serfirazî qediya" dibînin.

Westya? Werin em biçin beşa herî balkêş.

Çêkirina hilanînê

Depo (bikarhênerê pgbackrest):

1. Piştgiriyek pêk bînin:

sudo -u pgbackrest pgbackrest --stanza=main backup

2. Piştrast bike ku piştgirek hatî çêkirin:

ls /var/lib/pgbackrest/backup/main/

Pgbackrest dê yekem hilanînê ya tevahî biafirîne. Ger hûn bixwazin, hûn dikarin dîsa fermana paşvekişandinê bimeşînin û pê ewle bin ku pergal paşvekêşek zêde diafirîne.

Heke hûn dixwazin dîsa vegerek tam çêbikin, wê hingê alayek din diyar bikin:

sudo -u pgbackrest pgbackrest --stanza=main --type=full backup

Ger hûn derketina konsolê ya berfireh dixwazin, wê hingê jî diyar bikin:

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

Vegerandina hilanînê

Pêşkêşkara Postgres (bikarhêner sudo an root):

1. Komxebata xebitandinê rawestînin:

sudo pg_ctlcluster 11 main stop

2. Vegerandina ji hilanînê:

sudo -u postgres pgbackrest --stanza=main --delta restore

3. Komê dest pê bikin:

sudo pg_ctlcluster 11 main start

Piştî vegerandina hilanînê, pêdivî ye ku em hilanînê duyemîn bikin:

Depo (bikarhênerê pgbackrest):

sudo pgbackrest --stanza=main backup

Navê pêger. Di encamnameyê de, ez dixwazim bi bîr bînim ku ez bi tu awayî hewl nadim ku xwe wekî dbayek payebilind nîşan bidim û di fersendek herî piçûk de ewran bikar bînim. Heya nuha, ez bi xwe dest bi xwendina mijarên cihêreng ên wekî paşvekişandin, dubarekirin, çavdêrîkirin, hwd. û ez raporên piçûk di derbarê encaman de dinivîsim da ku tevkariyek piçûk ji civakê re bikim û ji xwe re pelikên piçûk ên xapandinê bihêlim.

Di gotarên jêrîn de ez ê hewl bidim ku li ser taybetmendiyên pêvek biaxivim - vegerandina daneyê ji komek paqij, şîfrekirina paşkêşan û weşandina li S3, paşvekêşana bi riya rsync.

Source: www.habr.com

Add a comment