Files
42_38/PVECluster_Architecture.md
Timmy 5d22e04d36 docs: update CT117 details (Lydia test: Python:5000, MSSQL Express)
CT117 runs Lydia test env: Python 3.12 app on port 5000 via supervisord
(RUNNING), MSSQL 2022 Express on port 1433. Caddy installed but inactive.
SSH exposed externally via OpenWRT DNAT port 50022. Updated PVE
description and tags.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 13:55:34 +08:00

276 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PVECluster 叢集架構文件
> 最後更新2026-04-10已刪除 CT106/CT113/CT123/CT125
## 一、叢集概覽
| 項目 | 值 |
|---|---|
| **叢集名稱** | PVECluster |
| **PVE 版本** | 8.4.14Kernel 6.8.12-16-pve |
| **節點數** | 3 |
| **Quorum** | 正常corosync_votequorum |
| **VM/容器總數** | 23含 1 個 template |
| **HA** | 未啟用 |
## 二、節點硬體規格
三台節點規格完全相同:
| 項目 | 規格 |
|---|---|
| **CPU** | Intel Core i3-6100 @ 3.70GHz2C/4T |
| **記憶體** | 16 GB DDR4 |
| **系統碟** | ~68 GBLVM含 local + local-lvm |
| **網卡** | Realtek RTL8111 GbE |
| **顯示** | Intel HD Graphics 530內顯 |
| **SATA** | Intel Q170 Chipset AHCI |
### 節點清單
| 節點 | IP | 用途 | 上線時間 |
|---|---|---|---|
| **pve** | 192.168.42.38 | 主節點 | ~9.2 天 |
| **pve-02** | 192.168.42.39 | 工作節點 | ~9.2 天 |
| **pve-03** | 192.168.42.40 | 工作節點 | ~9.2 天 |
### 節點資源使用(即時快照)
| 節點 | CPU 使用率 | 記憶體使用 | 系統碟使用 |
|---|---|---|---|
| pve | ~7% | 6.7 GB / 16 GB (43%) | 12.2 GB / 68 GB |
| pve-02 | ~12% | 10.9 GB / 16 GB (70%) | 12.1 GB / 68 GB |
| pve-03 | ~15% | 10.1 GB / 16 GB (64%) | 11.0 GB / 68 GB |
## 三、網路架構
```
網際網路
[192.168.42.10] GatewayOpenWRT VM 110 的 GW
├── vmbr0 (Linux Bridge)
│ ├── pve (enp1s0) — 192.168.42.38/24
│ ├── pve-02 (enp1s0) — 192.168.42.39/24
│ └── pve-03 (enp1s0) — 192.168.42.40/24
├── VM 110 OpenWRT — 進階路由/防火牆
└── 所有 VM/CT 皆掛在 vmbr0
IP 範圍192.168.42.100 ~ 192.168.42.126
```
- **Bridge**: `vmbr0`每節點各一bridge port 為 `enp1s0`
- **Gateway**: `192.168.42.10`
- **SDN Zone**: `localnetwork`(三節點皆啟用,狀態正常)
- **所有 VM/CT 靜態 IP**,格式為 `192.168.42.<VMID>`
## 四、儲存架構
### 儲存池一覽
| 儲存名稱 | 類型 | 共享 | 容量 | 已用 | 用途 |
|---|---|---|---|---|---|
| **local** | dir | 否 | 68 GB/節點 | ~12 GB | ISO、備份、模板 |
| **local-lvm** | lvmthin | 否 | ~160 GB/節點 | 變動 | VM 磁碟、CT rootfs |
| **syno-lvm** | LVM (iSCSI) | 是 | 1 TB | ~902 GB | VM 磁碟、CT rootfs主要儲存 |
| **syno-iscsi** | iSCSI | 是 | — | — | syno-lvm 的底層 target |
| **synology-backup** | CIFS | 是 | 2.75 TB | ~2.37 TB | 備份、ISO、模板、snippets |
| **pbs** | PBS | 是 | 294 GB | ~16 GB | Proxmox Backup Server 備份 |
### 儲存拓撲
```
Synology NAS (192.168.42.20)
├── iSCSI Target ──► syno-iscsi ──► syno-lvm (LVM, 1TB, 共享)
│ └── 大部分 VM/CT 磁碟存放於此
└── CIFS Share (Backup) ──► synology-backup (2.75TB, 共享)
└── 備份、ISO、模板
Proxmox Backup Server (192.168.42.30, VM 111)
└── PBS datastore "data-store" ──► pbs (294GB, 共享)
└── VM/CT 快照備份
各節點本地
├── /var/lib/vz ──► local (68GB)
│ └── ISO、vztmpl、備份
└── LVM thin pool ──► local-lvm (~160GB)
└── 部分 VM/CT 磁碟CT112, CT113, CT123
```
## 五、VM / 容器清單
### QEMU 虛擬機
| VMID | 名稱 | 節點 | 狀態 | CPU | 記憶體 | 磁碟 | Tags | 用途 |
|---|---|---|---|---|---|---|---|---|
| **110** | OpenWRT | pve | running | 2C | 1.5 GB | 8 GB (syno-lvm) | openwrt | OpenWRT 24.10.4 路由器/防火牆/PPPoE/WireGuard |
| **111** | PBS | pve-02 | running | 2C | 2 GB | 32G + 300G (syno-lvm) | proxmoxbackupserver | Proxmox Backup Server (192.168.42.30) |
| **120** | K3s Server | pve-02 | running | 2C | 8 GB | 83 GB (syno-lvm) | k3s | K3s control-planeServer |
| **121** | K3s Agent | pve | running | 2C | 8 GB | 82 GB (syno-lvm) | k3s | K3s worker node |
| **122** | K3s Agent | pve-03 | running | 2C | 8 GB | 82 GB (syno-lvm) | k3s | K3s worker node |
| **9000** | ubuntu-2404-cloud-template | pve | stopped | 2C | 2 GB | 3.5 GB (syno-lvm) | — | Cloud-init 模板 |
### LXC 容器
| VMID | 名稱 | 節點 | 狀態 | CPU | 記憶體 | 磁碟 | IP | Tags / 用途 |
|---|---|---|---|---|---|---|---|---|
| **100** | CT100 | pve-02 | running | 1C | 256 MB | 8G (syno-lvm) | .42.100 | SSH Jump Box + Bore Server (:7835) + Tailscale + Watchtower |
| **101** | CT101 | pve-02 | running | 1C | 128 MB | 8G (syno-lvm) | .42.101 | RustDesk Server (21115-21119) + Headscale (備用) + Watchtower |
| **102** | CT102 | pve | running | 1C | 512 MB | 8G (syno-lvm) | .42.102 | Tailscale + Proxy Pool + Cloudflare Tunnel + Watchtower |
| **103** | CT103 | pve | **stopped** | 1C | 768 MB | 16G (syno-lvm) | .42.103 | N8N 自動化 + Watchtower |
| **104** | CT104 | pve | running | 1C | 96 MB | 8G (syno-lvm) | .42.104 | Caddy 反向代理80/443 |
| **105** | CT105 | pve | running | 1C | 128 MB | 8G (syno-lvm) | .42.105 | EchoIP (mpolden/echoip:8080) + Watchtower |
| **107** | CT107 | pve-02 | running | 1C | 64 MB | 8G (syno-lvm) | .42.107 | MailPit (axllent/mailpit, Web:8025 SMTP:1025) |
| **108** | CT108 | pve-03 | running | 4C | 4 GB | 16G (syno-lvm) | .42.108 | Python 開發環境 |
| **112** | CT112 | pve-03 | running | 2C | 2 GB | 32G (local-lvm) | .42.112 | OpenClaw |
| **114** | CT114 | pve-03 | running | 1C | 512 MB | 8G (syno-lvm) | .42.114 | Podman |
| **115** | CT115 | pve-02 | running | 4C | 2 GB | 40G (syno-lvm) | .42.115 | Lydia Prod — Python + Caddy + MSSQL Express |
| **116** | CT116 | pve | running | 1C | 128 MB | 8G (syno-lvm) | .42.116 | Bark 推播通知 (finab/bark-server:8080) + Watchtower |
| **117** | CT117 | pve-02 | running | 4C | 2 GB | 60G (syno-lvm) | .42.117 | Lydia Test — Python (:5000) + MSSQL Express |
| **118** | CT118 | pve-03 | running | 2C | 2 GB | 8G (syno-lvm) | DHCP | Podman + PostgreSQL |
| **119** | CT119 | pve | **stopped** | 1C | 64 MB | 8G (syno-lvm) | .42.119 | Gotify 推播伺服器 |
| **124** | CT124 | pve-03 | running | 2C | 8 GB | 80G (syno-lvm) | .42.124 | NPM + Keycloak + Karakeep + Watchtower |
| **126** | CT126 | pve | running | 1C | 256 MB | 8G (syno-lvm) | .42.126 | Headscale v0.28.0 控制伺服器 (17 節點) + Tailscale + Watchtower |
### 狀態統計
| 狀態 | 數量 |
|---|---|
| Running | 18 |
| Stopped | 2CT103, CT119 |
| Template | 1VM 9000 |
### 各節點負載分佈
| 節點 | VM | LXC (running) | LXC (stopped) | 分配 CPU | 分配記憶體 |
|---|---|---|---|---|---|
| **pve** | 2 (110, 121) | 7 (102,104,105,116,126) | 2 (103,119) | 16C | ~22 GB |
| **pve-02** | 2 (111, 120) | 5 (100,101,107,115,117) | 0 | 16C | ~17 GB |
| **pve-03** | 1 (122) | 5 (108,112,114,118,124) | 0 | 15C | ~27 GB |
## 六、備份策略
### Proxmox Backup Server
- **位置**: VM 111pve-02IP `192.168.42.30:8007`
- **Datastore**: `data-store`294 GB已用 ~16 GB
- **保留策略**: `keep-all=1`
### 備份排程(目前皆已停用 enabled=0
| 排程 | 目標 | 儲存 | 保留 | 壓縮 |
|---|---|---|---|---|
| 每日 03:00 | CT115, CT117Lydia prod/test | pbs | keep-daily=7 | — |
| 02:30, 22:30 | CT103, CT106, CT108, CT124 | pbs | keep-daily=7 | zstd |
| 每日 02:00 | VM 110OpenWRT | pbs | keep-daily=3 | — |
### Synology NAS 備份
- **位置**: `192.168.42.20`CIFS share `Backup`
- **容量**: 2.75 TB已用 ~2.37 TB
- CT124 有掛載 `/mnt/ds1515-backup` 指向此 share
## 七、關鍵服務架構圖
```
┌─────────────────────────────────────────────────────────────────┐
│ PVECluster │
│ 192.168.42.38/39/40 │
├──────────────┬──────────────────┬────────────────────────────────┤
│ pve (.38) │ pve-02 (.39) │ pve-03 (.40) │
├──────────────┴──────────────────┴────────────────────────────────┤
│ │
│ 【網路層】 │
│ VM110 OpenWRT 24.10.4 ── GW: 192.168.42.10 │
│ PPPoE HiNet / WireGuard VPN (10.0.0.1) │
│ DNAT: SSH Jump, Bore, NPM, RustDesk, Headscale, SQL │
│ CT104 Caddy ───── 反向代理80/443
│ CT124 NPM ─────── Nginx Proxy Manager │
│ │
│ 【認證/安全】 │
│ CT124 Keycloak ── SSO 認證 │
│ CT100 ─────────── SSH Jump Box + Bore Server + Tailscale │
│ CT101 ─────────── RustDesk Server + Headscale 備用(遠端存取) │
│ CT102 ─────────── Tailscale + Cloudflare Tunnel + Proxy Pool │
│ CT126 ─────────── Headscale 控制伺服器 (17 節點, 8080/9090/50443) │
│ │
│ 【應用服務】 │
│ CT115 Lydia ───── Prod (Python + Caddy + MSSQL, SSH:30022) │
│ CT117 Lydia ───── Test (Python:5000 + MSSQL, SSH:50022) │
│ CT108 ─────────── Python 開發環境4C/4GB
│ CT112 ─────────── OpenClaw2C/2GB/32G
│ CT124 Karakeep ── 書籤/知識管理 │
│ │
│ 【Kubernetes (K3s v1.33.6 + Longhorn)】 │
│ VM120 K3s ─────── Server/control-plane (pve-02, 8GB) │
│ VM121 K3s ─────── Agent/worker (pve, 8GB) │
│ VM122 K3s ─────── Agent/worker (pve-03, 8GB) │
│ 服務: Traefik, CodiMD, Adminer, HTTPbin, │
│ OpenGist, PostgreSQL, Vaultwarden │
│ │
│ 【工具/通知】 │
│ CT107 ─────────── MailPit郵件測試
│ CT116 ─────────── Bark推播通知
│ CT119 ─────────── Gotify推播通知已停
│ CT105 ─────────── EchoIPIP 查詢port 8080
│ CT103 ─────────── N8N 自動化(已停) │
│ │
│ 【資料庫】 │
│ CT118 ─────────── PostgreSQL + Podman │
│ │
│ 【備份】 │
│ VM111 PBS ─────── Proxmox Backup Server (192.168.42.30) │
│ Synology NAS ──── iSCSI (syno-lvm) + CIFS (backup) │
│ 192.168.42.20 │
│ │
│ 【模板】 │
│ VM9000 ────────── Ubuntu 24.04 Cloud-init Template │
└──────────────────────────────────────────────────────────────────┘
```
## 八、已知問題與注意事項
### Ubuntu 25.04 LXC 容器 Console 無法登入
Ubuntu 25.04 的 systemd 新增了 `ImportCredential` 指令,在 LXC 容器中不支援,導致 `console-getty.service` 啟動失敗exit 243/CREDENTIALSWeb Console 看不到登入提示。
**修復方式**(建立容器後立即執行):
```bash
pct exec <vmid> -- bash -c 'mkdir -p /etc/systemd/system/console-getty.service.d && cat > /etc/systemd/system/console-getty.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o "-- \\\\u" --noreset --noclear --keep-baud 115200,57600,38400,9600 - \$TERM
ImportCredential=
EOF
systemctl daemon-reload && systemctl reset-failed console-getty && systemctl restart console-getty'
```
建議同時加上 `features: nesting=1``tty: 2`
```bash
pct set <vmid> -features nesting=1 -tty 2
```
## 九、Corosync 叢集通訊
```
totem:
cluster_name: PVECluster
version: 2
secauth: on
link_mode: passive
ip_version: ipv4-6
nodelist:
pve (nodeid=1, ring0=192.168.42.38, votes=1)
pve-02 (nodeid=2, ring0=192.168.42.39, votes=1)
pve-03 (nodeid=3, ring0=192.168.42.40, votes=1)
quorum:
provider: corosync_votequorum
需要 2/3 節點在線才能維持 quorum
```