Преминете към основното съдържание

Резервни копия и възстановяване

Какво да архивирате​

КаквоЗащо
Базата данниВсичко, освен файловете.
Базата данни на Entrosity Hub (platform)Потребители, идентификационни данни, организации и роли.
Кофата (rmm-packages)Инсталатори на пакети, изход от скриптове, MSI файлове на агента и конектора.
deploy/.envБез RMM_MASTER_KEY (и PLATFORM_MASTER_KEY за Hub) криптираните тайни в резервното копие се губят.

Нощно резервно копие​

deploy/scripts/backup.sh:

  1. pg_dump -Fc, проверен чрез обратно прочитане с pg_restore --list, в deploy/backups/db/ (заедно с файл .meta, който съдържа версията на схемата). Дъмповете се записват с права 0600. Когато съществува базата данни на Hub platform, и тя се дъмпва като platform-<same time>.dump.
  2. Инкрементално mc mirror на кофата към deploy/backups/objects/.
  3. Изтрива дъмповете, по-стари от RMM_BACKUP_KEEP_DAYS (по подразбиране 14).
  4. По избор копира всичко в S3 кофа извън площадката (RMM_BACKUP_S3_ENDPOINT, _BUCKET, _ACCESS_KEY, _SECRET_KEY) и прилага същия срок на съхранение и там.
15 2 * * * root /opt/entrosity/deploy/scripts/backup.sh >> /var/log/rmm-backup.log 2>&1

На продукционния хост на Entrosity този ред все още не е добавен; всяко разгръщане прави резервно копие преди обновяването (Непрекъснато разгръщане).

Пазете копие извън площадката

Резервно копие на същия диск не оцелява при загуба на хоста.

Възстановяване към момент във времето​

Задайте PG_ARCHIVE_MODE=on и PG_ARCHIVE_COMMAND в .env, за да се архивират WAL сегментите в backups/wal/. Възстановете ги със стандартния PITR механизъм на PostgreSQL, като започнете от базово резервно копие, направено с pg_basebackup.

Възстановяване​

deploy/scripts/restore.sh deploy/backups/db/rmm-20260924T021500Z.dump

Скриптът:

  1. спира портала и бекендите;
  2. създава наново базата данни (и ролята rmm_app, ако липсва), както и базата данни на Hub от дъмпа platform- от същото изпълнение, ако има такъв (и ролята platform_app);
  3. възстановява дъмпа (паралелно, когато той се намира в директорията за резервни копия);
  4. връща обектите обратно чрез огледално копиране;
  5. изпълнява migrate up, което придвижва по-стар дъмп до текущата версия и задава паролата на rmm_app, както и platform-migrate на Hub;
  6. стартира всичко.

Агентите се свързват отново сами.

На нов хост: инсталирайте Docker, копирайте deploy/.env (със същите ключове!) и директорията с резервните копия, след което изпълнете restore.sh. Преди възстановяването той стартира само postgres и minio.

Преместване на продукцията на друг хост (направено на 2026-09-27, вижте CUTOVER.md в entrosity-infra): първо подгответе новия хост (deploy/, .env с новия SPHERE_MEDIA_PUBLIC_IP, release-public-key.txt, образите, томовете caddy-data и caddy-config, за да се пренесат сертификатите, rmm.service, реда за резервни копия в cron и ключа за разгръщане). След това спрете web, бекендите и sphere-media на стария хост, изпълнете backup.sh, копирайте новите дъмпове и backups/objects/, изпълнете restore.sh на новия хост, сравнете броя на редовете и насочете DNS записите към него. Накрая изключете rmm.service на стария хост и сменете DEPLOY_HOST и DEPLOY_KNOWN_HOSTS (Непрекъснато разгръщане).

Учение по възстановяване​

Учението (2026-09-24) използва продукционния compose на лабораторен хост с 20 симулирани агента, свързани през TLS. Томовете на PostgreSQL и MinIO бяха изтрити, след което всичко беше възстановено от нощния дъмп.

СтъпкаВреме
Резервно копие (дъмп + проверка + огледално копие на обектите)2 s
Спиране на услугите, стартиране на празни postgres/minio6 s
Повторно създаване на базата данни + pg_restore2 s
Обратно огледално копиране на обектите1 s
migrate up + стартиране на бекендите и портала (в изправно състояние)10 s
Общо възстановяване19 s

Броят на редовете съвпадна, администраторът можа да влезе, обектът на пакета беше наличен, а всичките 20 агента отново бяха онлайн в рамките на 30 s без никакви действия по тях.

Базата данни в учението беше малка: планирайте приблизително 1 минута на GB дъмп за pg_restore -j 4 на SSD. Повтаряйте учението след големи надграждания, на временен хост или с RMM_COMPOSE_PROJECT=rmm-drill.