Oracle 多机集群零公网架构方案.md

$ view ~/notes/Oracle 多机集群零公网架构方案.md

Oracle 多机集群零公网架构方案

date
2026-04-01
tags
#运维 #oracle #架构 #tailscale #高可用
$ tree --toc
├─ 01 TL;DR ├─ 02 整体架构 ├─ 03 三台机器分工    核心思想    ARM(4C24G)——主力生产机    AMD #1 ——入口节点(高可用)    AMD #2 ——保活节点(防回收,可选) ├─ 04 Tunnel 多入口容灾策略    部署方式    各节点 ingress 配置差异    容灾效果 ├─ 05 保活策略(可选,防 Oracle 回收)    AMD 保活 cron 配置    ARM 保活 ├─ 06 Docker 部署实践    服务目录结构(ARM)    关键:限制每个容器的资源上限    ARM 镜像选择 ├─ 07 最关键的 3 条原则 └─ 08 一句话总结
$ tree --toc
  1. ├─ 01 TL;DR
  2. ├─ 02 整体架构
  3. ├─ 03 三台机器分工
  4. 核心思想
  5. ARM(4C24G)——主力生产机
  6. AMD #1 ——入口节点(高可用)
  7. AMD #2 ——保活节点(防回收,可选)
  8. ├─ 04 Tunnel 多入口容灾策略
  9. 部署方式
  10. 各节点 ingress 配置差异
  11. 容灾效果
  12. ├─ 05 保活策略(可选,防 Oracle 回收)
  13. AMD 保活 cron 配置
  14. ARM 保活
  15. ├─ 06 Docker 部署实践
  16. 服务目录结构(ARM)
  17. 关键:限制每个容器的资源上限
  18. ARM 镜像选择
  19. ├─ 07 最关键的 3 条原则
  20. └─ 08 一句话总结

Oracle 多机集群零公网架构方案

01

TL;DR

本方案是 个人服务器安全加固方案 的多机扩展版。在零公网暴露的基础上,解决三个核心问题:

  • 🧠 多机分工:ARM 做性能,AMD 做稳定性
  • 🔄 容灾高可用:Tunnel 多入口,单点故障不宕机
  • 🛡️ 防回收(可选):保活策略降低 Oracle 免费实例被 reclaim 的风险

前置条件:每台机器已完成 Oracle 服务器开机 SOP 和 个人服务器安全加固方案 相关文档:

  • Tailscale 原理参见 Tailscale 零公网暴露方案
  • Tunnel 配置详解参见 Cloudflare Tunnel 完整方案

02

整体架构

          🌍 用户请求
               ↓
   ☁ Cloudflare(CDN + WAF)
               ↓
   🚇 Tunnel(多入口容灾)
       ↓            ↓
   AMD-1         AMD-2
    ↓              ↓
         👉 ARM 主服务器
            (核心业务)

管理员 → Tailscale 私网(100.x)→ 任意一台服务器 SSH

03

三台机器分工

核心思想

最优解不是"平均分配",而是:

  • 🧠 ARM(4C24G)= 主力生产机(干所有重活)
  • 🪶 AMD ×2(1C1G)= 边缘节点(保活 + 入口 + 备用)

原则:重的全丢 ARM,轻的用 AMD 做"永不掉线层"


ARM(4C24G)——主力生产机

所有核心业务全放这里。

Docker 主集群:

  • Next.js(前端)
  • API(Node / Python)
  • AI 服务(embedding / 推理)
  • 图床服务、后台管理

数据层:

  • Redis(缓存)
  • PostgreSQL / MySQL

系统服务:

  • Cloudflare Tunnel(主通道)

资源规划

服务 CPU 内存
Web/API 1~2核 4~8GB
数据库 1核 4~8GB
Redis 0.5核 2~4GB
AI服务 1核 4~8GB

总体控制在 70% 使用率以内(防止波动导致 OOM)


AMD #1 ——入口节点(高可用)

使命:保证你永远能访问系统(哪怕 ARM 挂了)

部署内容:

  • Cloudflare Tunnel:作为第二入口,指向 ARM 服务(通过 Tailscale IP)
  • Nginx fallback:ARM 不可达时返回静态维护页面
  • 健康检查脚本:定期检测 ARM,不通则自动切换策略

👉 ARM 挂了时:用户仍能访问,不会 502 / 断连


AMD #2 ——保活节点(防回收,可选)

Oracle 免费实例存在被回收的风险。但需要注意:Oracle 官方未公开具体的回收条件,社区流传的标准均为经验推测。

部署内容:

  • 保活 cron 任务:定时产生 CPU/网络活动
  • 轻量状态 API:返回健康状态,供监控使用
  • 备用 Tunnel:第三入口,终极容灾

04

Tunnel 多入口容灾策略

Tunnel 基础配置(安装、config.yml、systemd)参见 Cloudflare Tunnel 完整方案 这里仅说明多入口差异化配置。

部署方式

在三台机器上使用同一个 Tunnel ID 运行:

cloudflared tunnel run homelab

Cloudflare 会自动将多个 connector 纳入同一 Tunnel,实现负载均衡和故障转移。

各节点 ingress 配置差异

ARM(主节点): 直接指向本地服务

ingress:
  - hostname: api.yourdomain.com
    service: http://localhost:3000
  - service: http_status:404

AMD-1 / AMD-2(边缘节点): 通过 Tailscale IP 转发到 ARM

ingress:
  - hostname: api.yourdomain.com
    service: http://100.x.x.x:3000  # ARM 的 Tailscale IP
  - service: http_status:404

容灾效果

故障场景 用户体验
ARM 正常 Cloudflare 优先路由到 ARM
ARM 宕机 自动切到 AMD-1 或 AMD-2
ARM + AMD-1 同时宕机 AMD-2 兜底

05

保活策略(可选,防 Oracle 回收)

⚠️ 关于回收条件:Oracle 官方文档中没有明确说明免费实例的具体回收标准。社区中广泛流传的“7天CPU<10% + 网络流量极少”是用户根据经验总结的推测,并非官方规则。

以下保活策略是一种预防性措施,你可以根据自己的风险偏好决定是否配置。

AMD 保活 cron 配置

# 每 5 分钟 curl ARM 的健康检查接口(产生网络活动)
*/5 * * * * curl -s http://100.x.x.x:3000/health > /dev/null 2>&1

# 每小时轻量计算(产生 CPU 活动)
0 * * * * dd if=/dev/urandom bs=1M count=10 | md5sum > /dev/null 2>&1

ARM 保活

ARM 通常负载足够(跑着所有业务),一般不需要额外保活。但建议:

  • 确保至少有 1 个服务持续运行(哪怕是空跑的 health API)
  • AMD 的定时 curl 本身也会给 ARM 产生流量

06

Docker 部署实践

服务目录结构(ARM)

/app
 ├── docker-compose.yml
 ├── nginx/
 ├── api/
 ├── frontend/
 ├── redis/
 ├── postgres/
 └── ai-service/

关键:限制每个容器的资源上限

services:
  api:
    image: your-api:latest
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1G

必须设置资源限制,防止单个服务吃满整台机器导致连锁 OOM。

ARM 镜像选择

选择支持 linux/arm64 的镜像:

node:18-alpine
python:3.11-slim
postgres:16-alpine
redis:7-alpine

多架构镜像构建参见 Docker 本地构建多架构镜像并部署全流程总结


07

最关键的 3 条原则

  1. ARM 只做一件事:跑业务 — 不在 ARM 上做保活、探测、杂任务
  2. AMD 建议"制造流量"(可选) — 降低被 Oracle 回收的风险
  3. Tunnel 一定多点部署 — 这是免费实现高可用的核心

08

一句话总结

用 ARM 做性能,用 AMD 做稳定性,用 Cloudflare 做大脑。

Cloudflare Tunnel 完整方案 Tailscale 零公网暴露方案