Wholesale 集群模式

1. 架构

            ┌──────────────┐
            │ Load Balancer│
            └──────┬───────┘
       ┌───────────┼───────────┐
       ▼           ▼           ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Node 1   │ │ Node 2   │ │ Node 3   │
│ RustPBX  │◄──► RustPBX│◄──► RustPBX│
│ +Wholesale│   +Wholesale   │ +Wholesale│
└─────┬────┘ └─────┬────┘ └─────┬────┘
      └─────────────┼─────────────┘
                    ▼
           ┌──────────────┐
           │ MySQL/PgSQL  │
           └──────────────┘

每个节点运行完整的 RustPBX + Wholesale,共享数据库保证数据一致。

2. 配置

2.1 Wholesale 集群配置

在 config.toml 中:

[proxy.wholesale]

[[proxy.wholesale.cluster.peers]]
name = "node-2"
url = "http://10.0.0.2:8080"
api_key = "shared-secret-key"

[[proxy.wholesale.cluster.peers]]
name = "node-3"
url = "http://10.0.0.3:8080"
api_key = "shared-secret-key"
  • api_key:节点间 API 调用的共享密钥,所有节点必须一致
  • url:对端节点的 HTTP 地址

2.2 RustPBX 核心集群配置

[cluster]
peers = [
  { addr = "10.0.0.2", sip_port = 5060, ami_port = 8080 },
  { addr = "10.0.0.3", sip_port = 5060, ami_port = 8080 },
]

3. 跨节点操作

Wholesale 集群支持以下跨节点操作:

3.1 活跃通话列表

Wholesale → 集群 → 活跃通话:聚合所有节点的当前通话列表。

3.2 跨节点挂断

在活跃通话列表中可直接挂断任意节点上的通话。

3.3 节点健康检查

控制台显示每个 peer 节点的在线状态。

4. 数据一致性

数据一致性策略
费率表/路由策略数据库 → 各节点热加载到内存 Trie
余额扣减SQL UPDATE ... SET balance = balance - price 原子操作
CDR 写入各节点独立写入共享数据库
熔断器每节点独立维护(局部状态)
CPS/并发计数每节点独立(总限额需除以节点数)

4.1 限额分配

如果租户最大并发 300,3 节点集群建议每节点配置 100(300 / 3),实际使用 Load Balancer 均匀分配。