diff --git a/SYNC_SETUP.md b/SYNC_SETUP.md index 35b07b0..ad456ef 100644 --- a/SYNC_SETUP.md +++ b/SYNC_SETUP.md @@ -1,12 +1,12 @@ -# Синхронизация `config.toml` между `mtg.ivx.su`, `gt1.ivx.su` и `gt2.ivx.su` +# Синхронизация `config.toml` между `mtg.ivx.su`, `gt1.ivx.su`, `gt2.ivx.su` и `gt3.ivx.su` Целевая схема: - **A (primary, запись):** `mtg.ivx.su` -- **B (replica, только чтение):** `gt1.ivx.su`, `gt2.ivx.su` +- **B (replica, только чтение):** `gt1.ivx.su`, `gt2.ivx.su`, `gt3.ivx.su` -Изменения вносятся только на A (через API/бот), затем автоматически синхронизируются на оба B. +Изменения вносятся только на A (через API/бот), затем автоматически синхронизируются на все B. -## 1) Подготовка `telemt-data` на обоих серверах +## 1) Подготовка `telemt-data` на каждом B-сервере ```bash cd /opt/telemt-plus @@ -58,7 +58,7 @@ enabled = true read_only = false ``` -### B (`gt1.ivx.su`, `gt2.ivx.su`) +### B (`gt1.ivx.su`, `gt2.ivx.su`, `gt3.ivx.su`) ```toml [server.api] @@ -74,8 +74,10 @@ read_only = true ssh-keygen -t ed25519 -N "" -f ~/.ssh/telemt_sync ssh-copy-id -i ~/.ssh/telemt_sync.pub root@gt1.ivx.su ssh-copy-id -i ~/.ssh/telemt_sync.pub root@gt2.ivx.su +ssh-copy-id -i ~/.ssh/telemt_sync.pub root@gt3.ivx.su ssh -i ~/.ssh/telemt_sync root@gt1.ivx.su "echo ok" ssh -i ~/.ssh/telemt_sync root@gt2.ivx.su "echo ok" +ssh -i ~/.ssh/telemt_sync root@gt3.ivx.su "echo ok" ``` ## 5) Установка `lsyncd` на A (`mtg.ivx.su`) @@ -133,11 +135,31 @@ sync { } } } + +-- B3: gt3.ivx.su +sync { + default.rsyncssh, + source = "/opt/telemt-plus/telemt-data/", + host = "root@gt3.ivx.su", + targetdir = "/opt/telemt-plus/telemt-data/", + delay = 1, + exclude = { "cache/" }, + rsync = { + archive = true, + compress = true, + _extra = { + "--delete", + "--chown=999:999", + "--chmod=Du=rwx,Dg=rx,Do=,Fu=rw,Fg=r,Fo=", + "-e", "ssh -i /root/.ssh/telemt_sync -o StrictHostKeyChecking=accept-new" + } + } +} ``` ## 6) Первичная синхронизация (один раз) -**Важно:** на каждом B (`gt1.ivx.su`, `gt2.ivx.su`) должен быть установлен `rsync`: +**Важно:** на каждом B (`gt1.ivx.su`, `gt2.ivx.su`, `gt3.ivx.su`) должен быть установлен `rsync`: ```bash # Выполнить на каждом B-сервере: @@ -162,6 +184,14 @@ rsync -az --delete \ -e "ssh -i /root/.ssh/telemt_sync -o StrictHostKeyChecking=accept-new" \ /opt/telemt-plus/telemt-data/ \ root@gt2.ivx.su:/opt/telemt-plus/telemt-data/ + +# B3: gt3.ivx.su +rsync -az --delete \ + --chown=999:999 \ + --chmod=Du=rwx,Dg=rx,Do=,Fu=rw,Fg=r,Fo= \ + -e "ssh -i /root/.ssh/telemt_sync -o StrictHostKeyChecking=accept-new" \ + /opt/telemt-plus/telemt-data/ \ + root@gt3.ivx.su:/opt/telemt-plus/telemt-data/ ``` ## 7) Запуск `lsyncd` @@ -182,7 +212,7 @@ systemctl cat lsyncd ## 8) Проверка работы -На обоих серверах: +На каждом B (`gt1.ivx.su`, `gt2.ivx.su`, `gt3.ivx.su`): ```bash cd /opt/telemt-plus @@ -202,4 +232,4 @@ curl -s http://127.0.0.1:9091/v1/health - Мутации (`POST/PATCH/DELETE`) делать только на A (`mtg.ivx.su`). - Бота направлять на API A. -- B (`gt1.ivx.su`, `gt2.ivx.su`) держать как реплики только для чтения. +- B (`gt1.ivx.su`, `gt2.ivx.su`, `gt3.ivx.su`) держать как реплики только для чтения.