Failover Service

This commit is contained in:
2026-04-25 12:22:20 +03:00
parent 1adf39749d
commit 23ccc9aacc
5 changed files with 150 additions and 102 deletions

View File

@@ -8,7 +8,7 @@ services:
- "--api.insecure=true" # дашборд (можно удалить в production)
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат и редирект
- "--providers.file.filename=/etc/traefik/dynamic_conf.yml" # самоподписанный сертификат, редирект и failover
- "--entrypoints.web.address=:80" # HTTP (для редиректа)
- "--entrypoints.websecure.address=:443" # HTTPS/WSS
# Метрики Prometheus
@@ -29,6 +29,15 @@ services:
- eventhub-net
restart: unless-stopped
# ================== Сервис-заглушка для Failover ==================
fallback:
build:
context: ./fallback
dockerfile: Dockerfile
networks:
- eventhub-net
restart: unless-stopped
# ================== Кластер EventHub (3 ноды) ==================
eventhub-node1:
build:
@@ -46,42 +55,6 @@ services:
- eventhub-node1-data:/app/data
labels:
- "traefik.enable=true"
# --- REST API пользователей ---
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api.entrypoints=web"
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api-secure.entrypoints=websecure"
- "traefik.http.routers.api-secure.tls=true"
- "traefik.http.routers.api-secure.service=api"
- "traefik.http.services.api.loadbalancer.server.port=8080"
# --- WebSocket пользователей (WSS через websecure) ---
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=web"
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws-secure.entrypoints=websecure"
- "traefik.http.routers.ws-secure.tls=true"
- "traefik.http.routers.ws-secure.service=ws"
- "traefik.http.services.ws.loadbalancer.server.port=8081"
# --- Админский REST ---
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=web"
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
- "traefik.http.routers.admin-api-secure.tls=true"
- "traefik.http.routers.admin-api-secure.service=admin-api"
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
# --- Админский WebSocket (WSS) ---
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
- "traefik.http.routers.admin-ws-secure.tls=true"
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
restart: unless-stopped
eventhub-node2:
@@ -100,38 +73,6 @@ services:
- eventhub-node2-data:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api.entrypoints=web"
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api-secure.entrypoints=websecure"
- "traefik.http.routers.api-secure.tls=true"
- "traefik.http.routers.api-secure.service=api"
- "traefik.http.services.api.loadbalancer.server.port=8080"
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=web"
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws-secure.entrypoints=websecure"
- "traefik.http.routers.ws-secure.tls=true"
- "traefik.http.routers.ws-secure.service=ws"
- "traefik.http.services.ws.loadbalancer.server.port=8081"
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=web"
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
- "traefik.http.routers.admin-api-secure.tls=true"
- "traefik.http.routers.admin-api-secure.service=admin-api"
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
- "traefik.http.routers.admin-ws-secure.tls=true"
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
restart: unless-stopped
eventhub-node3:
@@ -150,38 +91,6 @@ services:
- eventhub-node3-data:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api.entrypoints=web"
- "traefik.http.routers.api.middlewares=redirect-to-https@file"
- "traefik.http.routers.api-secure.rule=Host(`api.eventhub.local`)"
- "traefik.http.routers.api-secure.entrypoints=websecure"
- "traefik.http.routers.api-secure.tls=true"
- "traefik.http.routers.api-secure.service=api"
- "traefik.http.services.api.loadbalancer.server.port=8080"
- "traefik.http.routers.ws.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws.entrypoints=web"
- "traefik.http.routers.ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.ws-secure.rule=Host(`ws.eventhub.local`)"
- "traefik.http.routers.ws-secure.entrypoints=websecure"
- "traefik.http.routers.ws-secure.tls=true"
- "traefik.http.routers.ws-secure.service=ws"
- "traefik.http.services.ws.loadbalancer.server.port=8081"
- "traefik.http.routers.admin-api.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api.entrypoints=web"
- "traefik.http.routers.admin-api.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-api-secure.rule=Host(`admin.eventhub.local`)"
- "traefik.http.routers.admin-api-secure.entrypoints=websecure"
- "traefik.http.routers.admin-api-secure.tls=true"
- "traefik.http.routers.admin-api-secure.service=admin-api"
- "traefik.http.services.admin-api.loadbalancer.server.port=8445"
- "traefik.http.routers.admin-ws.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws.entrypoints=web"
- "traefik.http.routers.admin-ws.middlewares=redirect-to-https@file"
- "traefik.http.routers.admin-ws-secure.rule=Host(`admin-ws.eventhub.local`)"
- "traefik.http.routers.admin-ws-secure.entrypoints=websecure"
- "traefik.http.routers.admin-ws-secure.tls=true"
- "traefik.http.routers.admin-ws-secure.service=admin-ws"
- "traefik.http.services.admin-ws.loadbalancer.server.port=8446"
restart: unless-stopped
# ================== Мониторинг ==================