updating to match everything in my homelab.
This commit is contained in:
96
diagrams/database-strategy.mmd
Normal file
96
diagrams/database-strategy.mmd
Normal file
@@ -0,0 +1,96 @@
|
||||
```plaintext
|
||||
%% Database Strategy with CloudNativePG (ADR-0027)
|
||||
%% C4 Component diagram showing CNPG operator and clusters
|
||||
|
||||
flowchart TB
|
||||
subgraph operator["🎛️ CNPG Operator"]
|
||||
cnpg["CloudNativePG<br/>Controller<br/>(cnpg-system)"]
|
||||
end
|
||||
|
||||
subgraph clusters["📊 PostgreSQL Clusters"]
|
||||
direction LR
|
||||
|
||||
subgraph gitea_pg["gitea-pg"]
|
||||
direction TB
|
||||
g_primary["🔵 Primary"]
|
||||
g_replica1["⚪ Replica"]
|
||||
g_replica2["⚪ Replica"]
|
||||
g_bouncer["🔗 PgBouncer"]
|
||||
end
|
||||
|
||||
subgraph authentik_db["authentik-db"]
|
||||
direction TB
|
||||
a_primary["🔵 Primary"]
|
||||
a_replica1["⚪ Replica"]
|
||||
a_replica2["⚪ Replica"]
|
||||
a_bouncer["🔗 PgBouncer"]
|
||||
end
|
||||
|
||||
subgraph companions_db["companions-db"]
|
||||
direction TB
|
||||
c_primary["🔵 Primary"]
|
||||
c_replica1["⚪ Replica"]
|
||||
c_replica2["⚪ Replica"]
|
||||
c_bouncer["🔗 PgBouncer"]
|
||||
end
|
||||
|
||||
subgraph mlflow_db["mlflow-db"]
|
||||
direction TB
|
||||
m_primary["🔵 Primary"]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph storage["💾 Storage"]
|
||||
longhorn["Longhorn PVCs<br/>(NVMe/SSD)"]
|
||||
s3["S3 Backups<br/>(barman)"]
|
||||
end
|
||||
|
||||
subgraph services["🔌 Service Discovery"]
|
||||
direction TB
|
||||
rw["-rw (read-write)"]
|
||||
ro["-ro (read-only)"]
|
||||
pooler["-pooler-rw<br/>(PgBouncer)"]
|
||||
end
|
||||
|
||||
subgraph apps["📦 Applications"]
|
||||
gitea["Gitea"]
|
||||
authentik["Authentik"]
|
||||
companions["Companions"]
|
||||
mlflow["MLflow"]
|
||||
end
|
||||
|
||||
%% Operator manages clusters
|
||||
cnpg -->|"Manages"| clusters
|
||||
|
||||
%% Storage connections
|
||||
clusters --> longhorn
|
||||
clusters -->|"WAL archiving"| s3
|
||||
|
||||
%% Service routing
|
||||
g_bouncer --> rw
|
||||
a_bouncer --> rw
|
||||
c_bouncer --> rw
|
||||
g_replica1 --> ro
|
||||
g_replica2 --> ro
|
||||
|
||||
%% App connections
|
||||
gitea -->|"gitea-pg-pooler-rw"| g_bouncer
|
||||
authentik -->|"authentik-db-pooler-rw"| a_bouncer
|
||||
companions -->|"companions-db-pooler-rw"| c_bouncer
|
||||
mlflow -->|"mlflow-db-rw"| m_primary
|
||||
|
||||
classDef operator fill:#e74c3c,color:white
|
||||
classDef primary fill:#3498db,color:white
|
||||
classDef replica fill:#95a5a6,color:white
|
||||
classDef bouncer fill:#9b59b6,color:white
|
||||
classDef storage fill:#27ae60,color:white
|
||||
classDef app fill:#f39c12,color:black
|
||||
|
||||
class cnpg operator
|
||||
class g_primary,a_primary,c_primary,m_primary primary
|
||||
class g_replica1,g_replica2,a_replica1,a_replica2,c_replica1,c_replica2 replica
|
||||
class g_bouncer,a_bouncer,c_bouncer bouncer
|
||||
class longhorn,s3 storage
|
||||
class gitea,authentik,companions,mlflow app
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user