doc: systemd + локальный Redis (устойчивость), дефекты seed, грабли
This commit is contained in:
@@ -92,6 +92,15 @@
|
|||||||
- Коммиты `469132b`, `ca0372b`; тест `app/gosqs/tenant_helpers_test.go`. Проверено снаружи:
|
- Коммиты `469132b`, `ca0372b`; тест `app/gosqs/tenant_helpers_test.go`. Проверено снаружи:
|
||||||
`list-queues` → `https://sqs.sinefo.ru/t-.../orders`.
|
`list-queues` → `https://sqs.sinefo.ru/t-.../orders`.
|
||||||
|
|
||||||
|
### 2.11. Устойчивость: systemd + локальный Redis
|
||||||
|
- Установлен `redis-server` (7.0.15) на 213, включён AOF (`appendonly yes`).
|
||||||
|
- systemd-юнит `shared-sqs.service` (`Restart=always`, `enable`) + `/etc/shared-sqs.env`.
|
||||||
|
- Проверено: сообщение пережило рестарт; `systemctl is-enabled/active` → enabled/active.
|
||||||
|
- **Дефекты seed (обнаружены и исправлены, коммит `c0aa618`):** демо-очереди не персистились;
|
||||||
|
каждый старт плодил нового демо-тенанта (утечка при `Restart=always`). Фикс: `SaveQueue`+
|
||||||
|
`SaveMessages` + идемпотентность через `store.List()`.
|
||||||
|
- Управление: `sudo systemctl {status,restart,stop} shared-sqs`.
|
||||||
|
|
||||||
## 3. Грабли (для повторного использования)
|
## 3. Грабли (для повторного использования)
|
||||||
|
|
||||||
1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`.
|
1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`.
|
||||||
@@ -104,6 +113,10 @@
|
|||||||
4. `pkill -f "http.server 10443"` по SSH **самоматчится** на строку ssh-команды и убивает сессию —
|
4. `pkill -f "http.server 10443"` по SSH **самоматчится** на строку ssh-команды и убивает сессию —
|
||||||
использовать `pkill -x <имя>`.
|
использовать `pkill -x <имя>`.
|
||||||
5. Порт `8443` на 213 **нельзя занимать** — там DNAT транзита на Vultr.
|
5. Порт `8443` на 213 **нельзя занимать** — там DNAT транзита на Vultr.
|
||||||
|
6. **Managed Redis недоступен с 213**: его endpoint — внутренний k8s DNS
|
||||||
|
(`redisk8s.<uid>.svc.cluster.local:6379`), резолвится только изнутри кластера. С ВМ — только
|
||||||
|
локальный Redis или внешний endpoint от NUBES.
|
||||||
|
7. Локальный Redis на 213 **не спасает от падения ВМ** (SQS и Redis — на одной машине, SPOF).
|
||||||
|
|
||||||
## 4. ОШИБКИ (сводка, включая ошибки Flash)
|
## 4. ОШИБКИ (сводка, включая ошибки Flash)
|
||||||
|
|
||||||
|
|||||||
@@ -105,3 +105,30 @@ curl -sS https://sqs.sinefo.ru/health
|
|||||||
- `app/cmd/seed.go` — демо-очереди формируют URL через `gosqs.TenantQueueURL` (убрано
|
- `app/cmd/seed.go` — демо-очереди формируют URL через `gosqs.TenantQueueURL` (убрано
|
||||||
дублирование логики — оно и было причиной, что фикс «не применялся»);
|
дублирование логики — оно и было причиной, что фикс «не применялся»);
|
||||||
- тест `app/gosqs/tenant_helpers_test.go`.
|
- тест `app/gosqs/tenant_helpers_test.go`.
|
||||||
|
|
||||||
|
## 8. Устойчивость: systemd + локальный Redis (2026-10-10)
|
||||||
|
|
||||||
|
- **Redis** установлен на 213 (`apt install redis-server` 7.0.15), слушает `127.0.0.1:6379`,
|
||||||
|
включён **AOF** (`/etc/redis/redis.conf`: `appendonly yes`) — состояние переживает рестарт.
|
||||||
|
- **systemd-юнит** `/etc/systemd/system/shared-sqs.service`: `Restart=always`, `RestartSec=2`,
|
||||||
|
`WantedBy=multi-user.target` (автостарт при ребуте), `Requires=redis-server.service`,
|
||||||
|
`User=naeel`, `WorkingDirectory=/home/naeel/sqs-test`, `StandardOutput=append:.../sqs.log`.
|
||||||
|
- **env** `/etc/shared-sqs.env` (600, root): `SHARED_SQS_ADMIN_TOKEN`, `SHARED_SQS_SEED_DEMO`,
|
||||||
|
`SHARED_SQS_EXTERNAL_URL_BASE=https://sqs.sinefo.ru`, `REDIS_ADDR=127.0.0.1:6379`.
|
||||||
|
- Управление: `sudo systemctl {status,restart,stop,start} shared-sqs`.
|
||||||
|
|
||||||
|
**Закрыто:** крах процесса (авторестарт) и ребут ВМ (автостарт + Redis с диска из AOF; проверено —
|
||||||
|
сообщение пережило рестарт).
|
||||||
|
**НЕ закрыто:** падение самой ВМ — SQS и Redis лежат на одной машине (single point of failure).
|
||||||
|
Настоящая отказоустойчивость — после Шага 3 (Redis на отдельном хосте + несколько инстансов).
|
||||||
|
|
||||||
|
### Дефекты seed, обнаруженные при включении Redis (исправлены, коммит `c0aa618`)
|
||||||
|
1. **Демо-очереди не персистились** — после рестарта у демо-тенанта не было очередей.
|
||||||
|
Фикс: `persistence.SaveQueue` + `SaveMessages` в `app/cmd/seed.go`.
|
||||||
|
2. **Дубли тенантов** — каждый старт создавал нового демо-тенанта (новые креды). При
|
||||||
|
`Restart=always` это утечка. Фикс: идемпотентность в `seedDemoData` (проверка по имени
|
||||||
|
через `store.List()` → «сид пропущен»).
|
||||||
|
|
||||||
|
### Для прода
|
||||||
|
`SHARED_SQS_SEED_DEMO=false` (демо-данные не нужны), тенанты/очереди создаются через API
|
||||||
|
(они персистятся штатно).
|
||||||
|
|||||||
Reference in New Issue
Block a user