Wolkra

Дастурҳо

Стратегияи нусхабардорӣ барои VPS-и шумо

Стратегияи нусхабардории VPS, ки кор мекунад: қоидаи 3-2-1, нусхаҳои эҳтиётии сервер ва snapshot-ҳо, dump-ҳои пойгоҳи додаҳо, нусхаҳои рамзгузоришудаи берунӣ бо restic ва санҷиши барқарорсозӣ.

Навсозӣ: 6 дақиқа хондан

Стратегияи хуби нусхабардории VPS се қабат дорад: нусхаҳои эҳтиётии худкори сервер барои барқарорсозии зуди пурра, dump-ҳои сатҳи барнома барои пойгоҳҳои додаҳо ва нусхаи рамзгузоришудаи берунӣ дар ҷойгиршавии дуюм. Пеш аз ҳар тағйироти хатарнок snapshot илова кунед ва барқарорсозиро мунтазам санҷед, зеро нусхаи эҳтиётии насанҷида танҳо як умед аст.

Ин дастур ҳар қабатро бо фармонҳо барои Ubuntu 24.04 ва Debian 12 шарҳ медиҳад.

Аз қоидаи 3-2-1 оғоз кунед

Қоидаи классикӣ ҳоло ҳам эътибор дорад:

  • 3 нусхаи маълумоти шумо (нусхаи зинда ва ду нусхаи эҳтиётӣ),
  • дар 2 намуди гуногуни захирагоҳ ё система,
  • 1-тои онҳо берун аз сайт, дар ҷойгиршавӣ ё провайдери дигар.

Дар VPS ин одатан чунин маъно дорад: худи сервер, нусхаҳои эҳтиётии провайдер ва нусхаи рамзгузоришуда дар ҷои дигар.

Бидонед, ки аз чӣ ҳифз мекунед

Хатар Чӣ кӯмак мекунад
Навсозӣ ё тағйири танзимоти бад Snapshot пеш аз тағйирот
Файлҳои несткардашуда, барномаи вайрон Нусхаҳои эҳтиётии ҳаррӯза бо якчанд нуқтаи барқарорсозӣ
Вайроншавии пойгоҳи додаҳо Dump-ҳои мантиқӣ (pg_dump, mariadb-dump)
Сервери рахнашуда ё ransomware Нусхаҳои берунӣ, ки сервер онҳоро нест карда наметавонад
Гум шудани дастрасӣ ба ҳисоб Нусхаҳое, ки берун аз ҳисоб нигоҳ дошта мешаванд

Хатарҳои гуногун қабатҳои гуногун талаб мекунанд. Аз ин рӯ барои маълумоти муҳим як усул ҳеҷ гоҳ кифоя нест.

Қабати 1: нусхаҳои эҳтиётӣ ва snapshot-ҳои провайдер

Нусхаҳои эҳтиётии худкор

Дар Wolkra шумо метавонед барои ҳар сервер нусхаҳои эҳтиётии худкори ҳаррӯза-ро фаъол кунед. Онҳо 20% нархи серверро ташкил медиҳанд ва 7 нуқтаи барқарорсозӣ нигоҳ медоранд. Нусхаи эҳтиётӣ тамоми серверро фаро мегирад, бинобар ин барқарорсозӣ системаи амалиётӣ, танзимот ва маълумотро якҷоя бармегардонад. Ин онро зудтарин роҳи баргаштан пас аз хатои ҷиддӣ мегардонад.

Snapshot-ҳо

Snapshot-ҳо бо дархост гирифта мешаванд ва барои ҳар GB ҳисоб мешаванд. Онҳоро истифода баред:

  • пеш аз навсозии системаи амалиётӣ, пойгоҳи додаҳо ё версияи асосии барнома;
  • пеш аз озмоиш бо танзимоти firewall ё шабака;
  • ҳамчун қолаб: шумо метавонед аз snapshot серверҳои нав созед.

Барои қадамҳо ба нусхаҳои эҳтиётӣ ва snapshot-ҳо ва ҳуҷҷатҳо нигаред.

Нусхаҳои сатҳи дискро мувофиқ созед

Нусхаи эҳтиётии сервери коркунанда ба кашидани сими барқ монанд аст: файлҳо дар сатҳи системаи файлӣ мувофиқанд, аммо пойгоҳи додаҳо дар миёнаи навиштан метавонад барқарорсозиро талаб кунад. Пойгоҳҳои додаҳо барои ин сохта шудаанд, аммо dump-и тоза (қабати 2) шубҳаро бартараф мекунад.

Қабати 2: dump-ҳои сатҳи барнома

PostgreSQL

bash
sudo mkdir -p /var/backups/db && sudo chown postgres: /var/backups/db
sudo -u postgres sh -c 'pg_dump -Fc mydb > /var/backups/db/mydb-$(date +%F-%H%M).dump'

-Fc формати фишурдашудаи махсус аст; онро бо pg_restore барқарор кунед.

MariaDB ё MySQL

bash
sudo sh -c 'mariadb-dump --single-transaction --routines --all-databases | gzip > /var/backups/db/all-$(date +%F-%H%M).sql.gz'

--single-transaction dump-и мувофиқи ҷадвалҳои InnoDB-ро бе қулф кардани онҳо медиҳад.

Дар Docker

bash
docker compose exec -T db pg_dump -U app app | gzip > ~/backups/app-$(date +%F).sql.gz

Ҷадвалбандӣ ва тоза кардан

Dump-ро ба скрипт гузоред ва онро аз таймери systemd ё cron иҷро кунед, сипас файлҳои кӯҳнаро нест кунед:

bash
find /var/backups/db -type f -mtime +14 -delete

Қабати 3: нусхаҳои рамзгузоришудаи берунӣ бо restic

restic нусхаҳои эҳтиётиро рамзгузорӣ мекунад, такрорҳоро хориҷ мекунад ва ба ҳадафҳои зиёд мефиристад: ба сервери дигар тавассути SFTP ё ба ҳар гуна анбори объектии мувофиқ бо S3.

Насб

bash
sudo apt install -y restic

Интихоби анбор (repository)

Мисолҳо SFTP-ро ба сервери нусхабардорӣ, ки дар ихтиёри шумост, истифода мебаранд. Bucket-и мувофиқ бо S3 бо URL-ҳои анбори s3: ва маълумоти воридшавӣ дар тағйирёбандаҳои муҳит ҳамин тавр кор мекунад.

bash
sudo mkdir -p /etc/restic && sudo chmod 700 /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/password >/dev/null
sudo chmod 600 /etc/restic/password

sudo tee /etc/restic/env >/dev/null <<'EOF'
RESTIC_REPOSITORY=sftp:[email protected]:/srv/restic/web-1
RESTIC_PASSWORD_FILE=/etc/restic/password
EOF
sudo chmod 600 /etc/restic/env

Root калиди SSH лозим дорад, ки ба backup.example.com ворид шуда тавонад (ба калидҳои SSH нигаред). Пароли restic-ро инчунин дар ҷое берун аз сервер нигоҳ доред. Бе он ҳеҷ кас, аз ҷумла худатон, нусхаҳои эҳтиётиро хонда наметавонад.

Оғоз ва иҷро

bash
sudo bash -c 'set -a; . /etc/restic/env; restic init'
sudo bash -c 'set -a; . /etc/restic/env; restic backup /etc /var/www /var/backups/db /home --exclude-caches'
sudo bash -c 'set -a; . /etc/restic/env; restic snapshots'

Нигоҳдорӣ

bash
sudo bash -c 'set -a; . /etc/restic/env; restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'

Ин нусхаҳои ҳаррӯзаро барои як ҳафта, ҳарҳафтаинаро барои як моҳ ва ҳармоҳаро барои ним сол нигоҳ медорад.

Автоматикунонӣ бо таймери systemd

/etc/systemd/system/restic-backup.service:

ini
[Unit]
Description=restic backup
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
ExecStart=/usr/bin/restic backup /etc /var/www /var/backups/db /home --exclude-caches
ExecStartPost=/usr/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

/etc/systemd/system/restic-backup.timer:

ini
[Unit]
Description=Nightly restic backup

[Timer]
OnCalendar=*-*-* 03:30
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer

Dump-и пойгоҳи додаҳоро пеш аз restic иҷро кунед, масалан бо сатри ExecStartPre=, ки скрипти dump-и шуморо даъват мекунад.

Ҳифз аз сервери рахнашуда

Агар ҳамлагар дастрасии root пайдо кунад, вай метавонад нусхаҳои эҳтиётиеро, ки сервер ба онҳо дастрасӣ дорад, нест кунад. Ин хатарро кам кунед:

  • ба корбари нусхабардорӣ дар ҳадаф дастрасии танҳо иловакунӣ (append-only) диҳед, агар абзор инро дастгирӣ кунад (сервери REST-и restic реҷаи --append-only дорад);
  • тоза кардани нусхаҳои кӯҳнаро (prune) аз мошини дигар иҷро кунед;
  • ҳадди ақал як нусхаро дар ҷое нигоҳ доред, ки сервер барои он маълумоти воридшавӣ надорад.

Чиро нусхабардорӣ кардан лозим аст

  • /etc барои танзимот.
  • Коди барнома ва файлҳои боргузоришуда: /var/www, /srv, /opt ё феҳристи барномаи шумо.
  • Dump-ҳои пойгоҳи додаҳо, на файлҳои хоми пойгоҳи додаҳо.
  • Volume-ҳои Docker барои контейнерҳои дорои ҳолат ё dump-ҳои онҳо.
  • Сирҳои TLS ва барнома, рамзгузоришуда.
  • README-и кӯтоҳ, ки мегӯяд серверро чӣ тавр аз нав сохтан мумкин аст.

Одатан /var/cache, /tmp, кэшҳои бастаҳо ё қабатҳои тасвири Docker, ки аз нав боргирӣ карда мешаванд, лозим нестанд.

Ҳаҷмҳои анбори блокӣ

Агар маълумоти шумо дар ҳаҷми анбори блокӣ (volume) ҷойгир бошад, ҳаҷмро метавон ҷудо кард ва ба сервери нав пайваст кард, ки ҳангоми нокомии сервер кӯмак мекунад. Бо вуҷуди ин, ин ҳам як нусха аст, бинобар ин онро мисли ҳар маълумоти дигар ба restic ё dump-ҳо дохил кунед.

Барқарорсозиро санҷед

Ҷадвал интихоб кунед, масалан ҳармоҳа, ва яке аз инҳоро иҷро кунед:

  1. Тамоми сервер: аз нусхаи эҳтиётӣ ё snapshot сервери нав созед, онро бо номи санҷишӣ оғоз кунед ва санҷед, ки барнома кор мекунад.
  2. Файлҳо: ба феҳристи муваққатӣ барқарор кунед ва муқоиса кунед.
bash
sudo bash -c 'set -a; . /etc/restic/env; restic restore latest --target /tmp/restore-test --include /etc/caddy'
sudo bash -c 'set -a; . /etc/restic/env; restic check'
  1. Пойгоҳи додаҳо: dump-ро ба пойгоҳи додаҳои нав бор кунед ва чанд дархост иҷро кунед.

Бо ҳисоби соатбайъ сервери санҷишии барқарорсозӣ барои як соат хеле арзон аст. Нависед, ки барқарорсозӣ чӣ қадар вақт гирифт; ин вақти воқеии барқароршавии шумост.

Нақшаи содда барои истифода

Чӣ Чӣ тавр Нигоҳдорӣ
Тамоми сервер Нусхаҳои эҳтиётии ҳаррӯзаи провайдер 7 нуқтаи барқарорсозӣ
Пеш аз тағйирот Snapshot Пас аз як ҳафта нест кунед
Пойгоҳҳои додаҳо Dump ҳар 6 соат 14 рӯз дар маҳал
Файлҳо ва dump-ҳо restic, ҳар шаб, берун аз сайт 7 ҳаррӯза, 4 ҳарҳафтаина, 6 ҳармоҳа
Санҷиши барқарорсозӣ Сервери нав аз нусхаи эҳтиётӣ Ҳармоҳа

Рақамҳоро мувофиқи он ки чӣ қадар маълумотро гум карда метавонед ва чӣ қадар зуд бояд баргардед, танзим кунед. Барои қисми боқимондаи танзими сервер ба қадамҳои аввал дар VPS-и нав ва чӣ тавр сервери Ubuntu-ро муҳофизат кардан нигаред.

Саволҳои маъмул

Фарқи байни snapshot ва нусхаи эҳтиётӣ чист?

Snapshot нусхаи як лаҳзаи муайян аст, ки шумо онро дастӣ мегиред, аксар вақт пеш аз тағйироти хатарнок. Нусхаҳои эҳтиётӣ худкор аз рӯи ҷадвал сохта мешаванд ва якчанд нуқтаи барқарорсозиро нигоҳ медоранд. Ҳарду аз хатогиҳо ҳифз мекунанд; ҳеҷ кадом ҷои нусхаи беруниро намегирад.

VPS-ро чанд вақт як бор нусхабардорӣ кардан лозим аст?

Ҳадди ақал ҳаррӯза барои ҳар чизе, ки тағйир меёбад. Пойгоҳҳои додаҳо бо маълумоти муҳим аксар вақт dump-ҳои зудтар, баъзан ҳар соат, лозим доранд.

Оё нусхаҳои эҳтиётии провайдер кифояанд?

Онҳо қабати аввали боэътимод ва зудтарин роҳи барқарор кардани тамоми сервер мебошанд. Барои маълумоти муҳим нусхаро дар провайдер ё ҷойгиршавии дигар илова кунед, то як ҳисоб ё як ҷой нуқтаи ягонаи нокомӣ набошад.

Оё нусхаҳои эҳтиётиро бояд рамзгузорӣ кард?

Бале, хусусан нусхаҳое, ки берун аз серверҳои худатон нигоҳ дошта мешаванд. Абзорҳое мисли restic ҳама чизро пеш аз баромадан аз сервер рамзгузорӣ мекунанд.

Чӣ тавр бидонам, ки нусхаҳои эҳтиётии ман кор мекунанд?

Онҳоро барқарор кунед. Аз рӯи ҷадвал аз нусхаи эҳтиётӣ сервери нав созед ё файлҳоро ба феҳристи санҷишӣ барқарор кунед ва санҷед, ки барнома воқеан оғоз мешавад.

Сервер дар Франкфурт оғоз кунед

Ҳисоб созед, тавозунро пур кунед ва серверро аз €3.49 дар як моҳ иҷро кунед, танҳо барои соатҳое, ки истифода мебаред, пардохт карда. Трафики ҳисобнашаванда дар ҳар тариф.