【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OCP
【 使用版本 】社区版4.4.2
【问题描述】清晰明确描述问题
请问下多节点部署OCP ,比如部署了两个节点,上层使用负载均衡,那metadb 和 monitordb 是不是也会存两份,还是一份,如果是一份,请问原理是啥,我理解两个ocp 之间也没有通信,是不是两个ocp 节点都会通过ocp_agent 去拉监控数据然后往monitordb 里写,那这样不就是两份数据了吗,metadb 同理,请帮忙解惑谢谢
1 个赞
[ 负载均衡 / VIP ]
/ \
OCP-Server-1 (master) OCP-Server-2 (standby)
\ /
\ /
共用 ↓ ↓ 共用
┌──────────────────────────┐
│ MetaDB + MonitorDB │ ← 只有一份
│ (单个 OB 集群) │
└──────────────────────────┘
↑
(Agent 直接写监控,1 份)
/ | \
OCP-Agent OCP-Agent OCP-Agent (每台被纳管机器一个)
| | |
OBServer OBServer OBServer
- MonitorDB 是不是两份? 不是,一份。因为采集方是每台机器上的 OCP-Agent,与 OCP-Server 节点数无关;Agent 只写一次。
- MetaDB 是不是两份? 不是,一份。两个 OCP-Server 连同一个物理库,且选主机制保证只有 master 跑改状态的任务,不会有重复写。
–“两个 OCP 之间没有通信” —— 这个理解也不准确
两个 OCP-Server 之间是有协调的,只不过不是直接 RPC 互打,而是借 MetaDB 做"会合点":
- 主备选主(master election):多副本 OCP-Server 通过 MetaDB 里的一张锁表 / 租约表来竞争选主。同一时刻只有一个 master。
- 任务调度只在 master 上跑:定时巡检、备份调度、扩缩容、告警生成等"会改状态/会重复执行出问题"的活儿,只由 master 节点跑。非 master 节点(standby)主要对外提供读 API 和控制台访问,接到写操作时要么转发给 master、要么直接落到共享 MetaDB(反正库是同一个)。
1 个赞
OCP就相当于普通的应用,应用部署几个节点,跟数据库没啥关系