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 均匀分配。