pgbackrest๋ฅผ ์‚ฌ์šฉํ•œ ์ฆ๋ถ„ postgresql ๋ฐฑ์—… - ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ Š์€ ์ „์‚ฌ๋ฅผ ์œ„ํ•œ ๊ณผ์ •

๋ถ€์ธ ์„ฑ๋ช…

์ €๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์šฉ์ž๋กœ์„œ๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ฝ” ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์ธ ์ฒ™ํ•˜์ง€ ์•Š์œผ๋ฉฐ, dba๋Š” ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒโ€ฆ

๊ทธ๋ž˜์„œ postgresql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐฑ์—…์„ ๊ตฌ์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. SSH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ˆ์„ ์š”๊ตฌํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. pgdump๋ฅผ cron์— ํ‘ธ์‹œํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๋งค์ผ ์•„์นด์ด๋ธŒ์— ๋ฐฑ์—…ํ•˜๊ณ , ์™„์ „ํžˆ ์†์‹ค๋˜๋ฉด ์ด ์•„์นด์ด๋ธŒ๋ฅผ ๋จผ ๊ณณ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” ๊ณ„ํš์— ๋”ฐ๋ฅด๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•˜๋ฃจ์— ์•ฝ +- 100MB์”ฉ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ช‡ ์ฃผ ํ›„์—๋Š” pgdump๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐฑ์—…ํ•˜๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ์‚ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ๋ถ„ ๋ฐฑ์—…์ด ๊ตฌ์ถœ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด? ๊ณ ์–‘์ด์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ฆ๋ถ„ ๋ฐฑ์—…์€ ๋ชจ๋“  ์›๋ณธ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ํŒŒ์ผ๊ณผ ์ด์ „ ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ ์ดํ›„ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฑ์—… ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

(๋‹น์‹œ) ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šค์˜ ๋ณต์žกํ•œ ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ์ „ํ˜€ ๊บผ๋ คํ–ˆ๋˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ฒ˜๋Ÿผ ๋‚˜๋„ ๋…น์ƒ‰ ๋ฒ„ํŠผ์„ ์ฐพ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์‹œ๋‹ค์‹œํ”ผ AWS์˜ DigitalOcean์—์„œ๋Š” ๋ฒ„ํŠผ ํ•˜๋‚˜๋ฅผ ๋ˆŒ๋ €๊ณ , ๋‘ ๋ฒˆ์งธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๊ณ , ๋ฐฑ์—…์„ ์„ค์ •ํ–ˆ์œผ๋ฉฐ, ์„ธ ๋ฒˆ์งธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๊ณ , ๋ชจ๋“  ๊ฒƒ์„ ๋ช‡ ์‹œ๊ฐ„ ํ›„์— ๋กค๋ฐฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์ด๋‚˜ ์•„๋ฆ„๋‹ค์šด GUI ๋„๊ตฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ(๋ฌด๋ฃŒ ๋˜๋Š” ์ €๋ ดํ•œ ๊ฒƒ)์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€์— ์ ์–ด์ฃผ์„ธ์š”.

์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰ ํ›„ ๋‘ ๊ฐ€์ง€ ๋„๊ตฌ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. pgbarman ะธ ๋ฐฑ๋ ˆ์ŠคํŠธ. ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์„œ์—์„œ๋Š” ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ(๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ๋ถ€์กฑํ•˜์—ฌ ์ด์ „ ๋งค๋‰ด์–ผ์— ๋”ฐ๋ผ ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์•…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค), ๋‘ ๋ฒˆ์งธ ๋ฌธ์„œ์—์„œ๋Š” ๋ฌธ์„œ๊ฐ€ ๋™๋“ฑํ•œ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์ง€๋งŒ ๊ฒฐํ•จ์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ์ž‘์—…์— ์ง๋ฉดํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ธฐ์‚ฌ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„์—๋Š” ์ฆ๋ถ„ ๋ฐฑ์—…์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์›๊ฒฉ ์„œ๋ฒ„(๋ฐฑ์—…์ด ํฌํ•จ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ)์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์†์‹ค์ด๋‚˜ ์ฃผ ์„œ๋ฒ„์˜ ๊ธฐํƒ€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ›ˆ๋ จ

๋งค๋‰ด์–ผ์„ ์žฌํ˜„ํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ์˜ VPS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์ €์žฅ์†Œ(๋ฐฑ์—…์ด ์ €์žฅ๋  ์ €์žฅ์†Œ)์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ์‹ค์ œ๋กœ postgres๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„ ์ž์ฒด(์ œ ๊ฒฝ์šฐ์—๋Š” postgres ๋ฒ„์ „ 11)์ž…๋‹ˆ๋‹ค.

postgres๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์—๋Š” ๋ฃจํŠธ, sudo ์‚ฌ์šฉ์ž, postgres ์‚ฌ์šฉ์ž ๋ฐ postgres ์ž์ฒด๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(postgres ์‚ฌ์šฉ์ž๋Š” postgresql ์„ค์น˜ ์‹œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ). ์ €์žฅ์†Œ ์„œ๋ฒ„์—๋Š” ๋ฃจํŠธ ๋ฐ sudo ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(๋งค๋‰ด์–ผ ์ฐธ์กฐ). ์‚ฌ์šฉ์ž ์ด๋ฆ„ 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 ์‚ฌ์šฉ์ž ๋˜๋Š” ๋ฃจํŠธ):

postgres๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์— 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

๋น„๋ฐ€๋ฒˆํ˜ธ ์—†๋Š” 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 ์‚ฌ์šฉ์ž ๋˜๋Š” ๋ฃจํŠธ):

ํ‚ค ์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

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 ์„œ๋ฒ„(sudo ์‚ฌ์šฉ์ž ๋˜๋Š” ๋ฃจํŠธ):

1. ์™ธ๋ถ€ IP์—์„œ postgres ์„œ๋ฒ„๋ฅผ ๋…ธํฌํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์„ธ์š”. 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) 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 ์‚ฌ์šฉ์ž):

๊ตฌ์„ฑ ํŒŒ์ผ์— ํ•„์š”ํ•œ ์„ค์ •์„ ํ•ด๋ณด์ž ๋ฐฑ๋ ˆ์ŠคํŠธ
(/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

์ถœ๋ ฅ์— "check command end:completedically"๋ผ๋Š” ์ค„์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ”ผ๊ณคํ•œ? ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—…ํ•˜๊ธฐ

์ €์žฅ์†Œ(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: Cannot run DROP DATABASE in a read-only transaction). ์†”์งํžˆ ๋งํ•ด์„œ ์ด๊ฒƒ์ด ๋ฌด์—‡๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์•„์ง ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ช…๋ น์ด ์‹คํ–‰๋œ ํ›„ ์ž ์‹œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค).

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

๊ทธ๊ฒŒ ๋‹ค์•ผ. ๊ฒฐ๋ก ์ ์œผ๋กœ ์ €๋Š” ๊ฒฐ์ฝ” ์ˆ˜์„ DBA์ธ ์ฒ™ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์•„์ฃผ ์ž‘์€ ๊ธฐํšŒ๋ผ๋„ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž„์„ ์ƒ๊ธฐ์‹œํ‚ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” ๋ฐฑ์—…, ๋ณต์ œ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ๋‹ค์–‘ํ•œ ์ฃผ์ œ๋กœ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ž‘์€ ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ž‘์€ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ž‘์€ ์น˜ํŠธ ์‹œํŠธ๋ฅผ ๋‚˜ ์ž์‹ ์—๊ฒŒ๋„ ๋‚จ๊น๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ๋Š” ํด๋ฆฐ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ, ๋ฐฑ์—… ์•”ํ˜ธํ™” ๋ฐ S3์— ๊ฒŒ์‹œ, rsync๋ฅผ ํ†ตํ•œ ๋ฐฑ์—… ๋“ฑ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€