콘텐츠로 이동

SLA 및 High Availability 경계

이 문서는 six-VM fully offline deployment에 적용됩니다. 구성은 application / Swarm node 3대, PostgreSQL HA node 2대, witness node 1대입니다.

Layer Current Design High Availability Boundary
Application runtime Enterprise New compose는 고정된 tier0_app_active_node에서 실행됩니다. backend, redis, EMQX, SourceFlow, EventFlow, Marimo, OPC UA Server는 아직 automatic multi-replica service가 아닙니다.
HTTP entry 3개의 application node가 keepalived APP VIP + HAProxy를 실행합니다. VIP는 float할 수 있습니다. HAProxy는 8088/TCP의 active node로 forward하고 /healthz를 check합니다.
MQTT / OPC UA EMQX는 1883/8883/8083/8084를 사용하고 OPC UA는 4840을 사용합니다. 이들은 active node에 직접 연결됩니다. TCP VIP proxying에 포함되지 않으므로 protocol-entry HA는 약속하지 않습니다.
Database PostgreSQL / TimescaleDB streaming replication + repmgr + witness + DB VIP. primary 장애 시 standby를 자동 promote할 수 있습니다. asynchronous replication은 strict zero RPO를 약속할 수 없습니다.
Backup and restore backup-db.sh / restore-db.sh. recoverability를 제공하지만 online HA와 동일하지는 않습니다.
Service Object Recommended Statement Constraints
Platform HTTP entry monthly availability 99.5%부터 시작합니다. VIP failover는 active application node의 automatic migration과 같지 않습니다.
Database access 운영 목표: RTO <= 2 minutes. RPO는 replication lag에 따라 달라집니다. 같은 architecture의 과거 failover test는 약 59-64초였습니다.
MQTT / OPC UA 현재 설계에서는 HA SLA를 약속하지 않습니다. HAProxy TCP proxying, 별도 VIP 또는 service clustering을 먼저 추가해야 합니다.
Backup and restore Daily backup, major change 전 mandatory backup. restore time은 data volume과 on-site I/O에 따라 달라집니다.

99.9% 이상을 주장하기 전에 application automatic migration 또는 multi-replica deployment, protocol-entry HA, monitoring alert, recovery drill을 완료하세요. 계획된 capability를 이미 제공된 capability처럼 설명하지 마세요.

각 deployment 또는 upgrade는 최소한 다음 조건을 만족해야 합니다.

  • verify-materials.sh가 통과하고 delivery package SHA256 check가 통과합니다.
  • 3개의 Swarm node가 Ready입니다.
  • APP VIP /healthz/readyz200을 반환하며 home page와 /uns에 접근할 수 있습니다.
  • active node의 7개 compose service가 실행 중입니다.
  • DB VIP:5432에 접근할 수 있으며 primary, standby, witness topology가 정상입니다.
  • default account가 실제로 login할 수 있습니다. IAM initialization 성공 여부를 port, container, HTTP 200 response만으로 판단하지 마세요.
  • HTTP, EMQX port, WebSocket/WSS, OPC UA TCP smoke check가 통과합니다.

매일 아래 command를 실행합니다.

Terminal window
./bin/verify.sh --site config/site.conf
./bin/smoke-business-emqx.sh --site config/site.conf

최소한 다음 alert를 설정합니다.

  • APP VIP /healthz 또는 /readyz failure.
  • DB VIP unreachable, no primary, split-brain risk, replication interruption 또는 threshold 초과 replication lag.
  • keepalived, HAProxy, PostgreSQL, repmgrd abnormal status.
  • backend, redis, EMQX 같은 key container가 exit하거나 자주 restart됩니다.
  • data disk usage가 80% / 90%를 초과합니다.
  • 최신 backup이 실패했거나 생성되지 않았습니다.
Drill Frequency Verification Criteria
APP VIP failover 납품 전 및 분기별 현재 VIP node에서 keepalived를 중지한 뒤 /healthz/readyz가 복구됩니다.
DB primary failure 납품 전 및 6개월마다 standby가 promote되고 DB VIP가 복구되며 old primary가 standby로 rebuild됩니다.
Database restore monthly sample 및 major change 전 backup이 restore 가능합니다. restore 후 verify, smoke check, login verification이 통과합니다.
Material verification package build마다 source material, package SHA, unpacking verification이 통과합니다.
  1. 먼저 impact scope를 확인합니다: HTTP, MQTT, OPC UA, database, single-node impact.
  2. VIP, HAProxy, active application, database primary 복구를 우선합니다.
  3. log, data directory, backup을 보존합니다. incident site를 직접 clean하거나 overwrite하지 마세요.
  4. database incident에서는 현재 primary를 먼저 확인한 뒤 failover, rejoin, restore 중 무엇을 할지 결정합니다.
  5. recovery 후 verify, smoke check, 실제 login verification을 실행합니다.
  • application을 multi-replica로 만들거나 active node의 검증 가능한 automatic migration process를 구축합니다.
  • EMQX를 cluster화하거나 dedicated VIP가 있는 HAProxy TCP / TLS를 통해 routing합니다.
  • OPC UA에 대해 HAProxy TCP, dedicated VIP 또는 service clustering 기반 high-availability entry를 제공합니다.
  • PostgreSQL synchronous replication을 사용하거나 허용 가능한 replication lag와 RPO를 명확히 정의합니다.
  • backup scheduling, off-site replication, 정기 restore drill을 자동화합니다.
  • container, host, database, log, black-box probe를 unified alerting에 연결합니다.

관련 절차: 운영 Runbook표준 Port 목록.