ጭማሪ postgresql ምትኬ በpgbackrest - ከገንቢ የመጣ ወጣት ተዋጊ ኮርስ

ማስተባበያ

እኔ ገንቢ ነኝ። ኮድ እጽፋለሁ, ከዳታቤዝ ጋር መስተጋብር እንደ ተጠቃሚ ብቻ ነው. በምንም መመዘኛ የስርዓት አስተዳዳሪ እና፣ በተጨማሪ፣ ዲባ ነኝ ብዬ አላስመስልም። ግን…

የpostgresql ዳታቤዝ መጠባበቂያ ማደራጀት ስላስፈለገኝ ተከሰተ። ምንም ደመና የለም - SSH ን ያስቀምጡ እና ሁሉም ነገር እንዲሰራ ያድርጉ እና ገንዘብ አይጠይቁ። እንደዚህ ባሉ ጉዳዮች ምን እናደርጋለን? ልክ ነው፣ pgdumpን ወደ ክሮን እንገፋዋለን፣ ሁሉንም ነገር በየእለቱ ወደ ማህደሩ እናስቀምጠዋለን፣ እና ሙሉ ለሙሉ ከተበተንን፣ ይህን ማህደር ራቅ ወዳለ ቦታ እንልካለን።

በዚህ ጊዜ ችግሩ በእቅዶቹ መሠረት የውሂብ ጎታው በቀን + - 100 ሜባ ገደማ ያድጋል ተብሎ ነበር. እርግጥ ነው፣ ከሁለት ሳምንታት በኋላ ሁሉንም ነገር በpgdump የመደገፍ ፍላጎት ይጠፋል። ተጨማሪ ምትኬዎች ጠቃሚ የሆኑበት ቦታ ይህ ነው።

የሚስብ? በድመት ስር እንኳን ደህና መጡ።

ተጨማሪ መጠባበቂያ ሁሉም የምንጭ ፋይሎች የማይገለበጡ ሲሆኑ የመጠባበቂያ አይነት ነው፣ ነገር ግን ቀዳሚው ቅጂ ከተፈጠረ ጀምሮ አዲስ እና የተቀየሩ ብቻ።

ልክ እንደ ማንኛውም ገንቢ የፖስታን ውስብስብነት ለመረዳት (በዚያን ጊዜ)፣ አረንጓዴ ቁልፍ ማግኘት ፈልጌ ነበር። ደህና ፣ ታውቃለህ ፣ እንደ AWS ፣ DigitalOcean: አንድ ቁልፍ ተጫንኩ - ማባዛት አገኘሁ ፣ ሁለተኛውን ተጫንኩ - መጠባበቂያዎችን አዘጋጀሁ ፣ ሦስተኛው - ሁሉም ነገር ከጥቂት ሰዓታት በፊት ተንከባሎ ነበር። ቁልፍ እና የሚያምር GUI መሳሪያ አላገኘሁም። አንድ ካወቁ (ነፃ ወይም ርካሽ) - በአስተያየቶቹ ውስጥ ስለ እሱ ይፃፉ።

Googling ሁለት መሳሪያዎችን አገኘሁ pgbarman и pgbackrest. ከመጀመሪያው ጋር, ለእኔ ብቻ አልሰራልኝም (በጣም ደካማ ሰነዶች, በአሮጌው ማኑዋሎች መሰረት ሁሉንም ነገር ለማንሳት ሞከርኩ), ነገር ግን ሁለተኛው በሰነድ ደረጃ ላይ ተገኝቷል, ነገር ግን ያለ ጉድለት አይደለም. . ተመሳሳይ ተግባር የሚያጋጥሟቸውን ሰዎች ሥራ ለማቃለል, ይህ ጽሑፍ ተጽፏል.

ይህን ጽሑፍ ካነበቡ በኋላ, ተጨማሪ ምትኬዎችን እንዴት እንደሚሠሩ ይማራሉ, ወደ የርቀት አገልጋይ (የመጠባበቂያ ክምችት ያለው ማከማቻ) እና በዋናው አገልጋይ ላይ የውሂብ መጥፋት ወይም ሌሎች ችግሮች ካሉ ወደነበሩበት ይመልሱ.

ዝግጅት

መመሪያውን ለማጫወት ሁለት VPS ያስፈልግዎታል. የመጀመሪያው ማከማቻ (መጠባበቂያዎቹ የሚቀመጡበት ማከማቻ) እና ሁለተኛው፣ በእውነቱ፣ አገልጋዩ ራሱ ከፖስትግሬስ ጋር (በእኔ ሁኔታ፣ የፖስትግሬስ ስሪት 11) ይሆናል።

ፖስትግሬስ ባለው ሰርቨር ላይ ስር፣ ሱዶ ተጠቃሚ፣ ፖስትግሬስ ተጠቃሚ እና ፖስትግሬስ እራሱ እንደተጫነ ይታሰባል (የፖስትግሬስ ተጠቃሚ postgresql ሲጭን በራስ ሰር ይፈጠራል) እና በማከማቻ አገልጋዩ ላይ ስር እና ሱዶ ተጠቃሚ አለህ (የተጠቃሚ ስም 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 ፐርል ይፈልጋል። ጫን፡

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

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ ወይም ስር)፡-

በፖስትግሬስ አገልጋይ ላይ pgbackrest የመጫን ሂደት በማከማቻው ላይ ከመጫን ጋር ተመሳሳይ ነው (አዎ፣ 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

የይለፍ ቃል በሌለው ኤስኤስኤች በኩል በአገልጋዮች መካከል ግንኙነትን ማዋቀር

pgbackrest በትክክል እንዲሰራ የቁልፍ ፋይሉን በመጠቀም በፖስትግሬስ አገልጋይ እና በማከማቻው መካከል ያለውን መስተጋብር ማዋቀር ያስፈልጋል።

ማከማቻ (pgbackrest ተጠቃሚ)፡-

ጥንድ ቁልፎችን ይፍጠሩ;

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

እባክዎ ልብ ይበሉ! ከላይ ያሉት ትዕዛዞች ያለ ሱዶ ይከናወናሉ.

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ ወይም ስር)፡-

ጥንድ ቁልፎችን ይፍጠሩ;

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

ማከማቻ (ሱዶ ተጠቃሚ)፡-

የፖስትግሬስ አገልጋይ የህዝብ ቁልፍን ወደ ማከማቻ አገልጋዩ ይቅዱ፡-

(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

በዚህ ደረጃ, ከስር ተጠቃሚው የይለፍ ቃሉን ይጠይቃል. የፖስትግሬስ አገልጋይ ስርወ ተጠቃሚ የይለፍ ቃል በትክክል ማስገባት አለብህ!

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ)፡-

የማከማቻውን ይፋዊ ቁልፍ በፖስትግሬስ ወደ አገልጋዩ ይቅዱ፡-

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

ያለችግር መዳረስን እናረጋግጣለን።

የፖስትግሬስ አገልጋይ በማዘጋጀት ላይ

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ ወይም ስር)፡-

1. ከውጫዊ ip በፖስታ አገልጋይ ላይ "መምታት" እንፍቀድ. ይህንን ለማድረግ ፋይሉን ያርትዑ postgresql.conf (በ/etc/postgresql/11/ዋናው አቃፊ ውስጥ የሚገኝ) የሚከተለውን መስመር በእሱ ላይ በማከል፡-

listen_addresses = '*'

እንደዚህ አይነት መስመር አስቀድሞ ካለ አስተያየቱን ይስጡት ወይም መለኪያውን ወደ «*» ያቀናብሩ።

በፋይል ውስጥ pg_hba.conf (በተጨማሪም በአቃፊው ውስጥ ይገኛል /etc/postgresql/11/ዋና) የሚከተሉትን መስመሮች ያክሉ

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/ዋና) ለ 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
(/ወዘተ/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

ተቆጣጣሪነት

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ ወይም ስር)፡-

በፖስትግሬስ አገልጋይ ላይ ያረጋግጡ፡-

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

ምትኬን ወደነበረበት በመመለስ ላይ

የፖስትግሬስ አገልጋይ (ሱዶ ተጠቃሚ ወይም ስር)፡-

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

የውሂብ ጎታውን ወደ የመጨረሻው የFULL መጠባበቂያ ሁኔታ ለመመለስ የመልሶ ማግኛ_ዒላማውን ሳይገልጹ ትዕዛዙን ይጠቀሙ፡-

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

አስፈላጊ! ካገገመ በኋላ ዳታቤዙ በመልሶ ማግኛ ሁነታ ላይ ሊሰቀል ይችላል (እንደ ስህተት ያሉ ስህተቶች ይኖራሉ: ተነባቢ-ብቻ ግብይት ውስጥ DROP DATABASE ን ማከናወን አይችሉም)። እውነቱን ለመናገር ከምን ጋር እንደሚያያዝ እስካሁን አልገባኝም። እንደሚከተለው ተፈትቷል (ትእዛዙ ከተፈጸመ በኋላ ትንሽ መጠበቅ አስፈላጊ ይሆናል)

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

እንደ እውነቱ ከሆነ, በስሙ አንድ የተወሰነ ምትኬን ወደነበረበት መመለስ ይቻላል. እነሆ እኔ ብቻ ነኝ በሰነዱ ውስጥ የዚህን ባህሪ መግለጫ አገናኝ እጠቁማለሁ. ገንቢዎቹ ይህንን ግቤት በጥንቃቄ እንዲጠቀሙ ይመክራሉ እና ለምን እንደሆነ ያብራሩ። ከራሴ እኔ እንደ ተጠቀምኩት ማከል እችላለሁ። በጣም የሚያስፈልጎት ከሆነ፣ ከማገገም በኋላ የመረጃ ቋቱ ከመልሶ ማግኛ ሁኔታ ውጭ መሆኑን ያረጋግጡ (pg_is_in_recovery() “f” ማሳየት ያለበትን ይምረጡ) እና እንደዚያ ከሆነ፣ ካገገሙ በኋላ ሙሉ ምትኬ ይስሩ።

3. ዘለላውን ጀምር፡

sudo pg_ctlcluster 11 main start

መጠባበቂያውን ወደነበረበት ከመለስን በኋላ, ሁለተኛ ምትኬን ማከናወን አለብን:

ማከማቻ (pgbackrest ተጠቃሚ)፡-

sudo pgbackrest --stanza=main backup

ይኼው ነው. በማጠቃለያው እኔ በምንም መልኩ እንደ ሲኒየር ዲባ ለመምሰል እየሞከርኩ እንዳልሆነ እና በትንሹም አጋጣሚ ደመናውን እንደምጠቀም ላስታውስ እወዳለሁ። በአሁኑ ጊዜ፣ እኔ ራሴ እንደ ምትኬ፣ ማባዛት፣ ክትትል፣ ወዘተ የመሳሰሉ የተለያዩ ርዕሶችን ማጥናት ጀምሬያለሁ። እና ለህብረተሰቡ ትንሽ አስተዋፅኦ ለማድረግ እና ትንሽ የማጭበርበሪያ ወረቀቶችን ለራሴ ለመተው ስለ ውጤቱ ትንሽ ሪፖርቶችን እጽፋለሁ.

በሚቀጥሉት ጽሁፎች ውስጥ ስለ ተጨማሪ ባህሪያት ለመነጋገር እሞክራለሁ - መረጃን ወደ ንጹህ ክላስተር መመለስ, ምትኬዎችን ማመስጠር እና ወደ S3 ማተም, ምትኬዎች በ rsync.

ምንጭ: hab.com

አስተያየት ያክሉ