首页 新闻 会员 周边

mongo什么时候需要arbiter?

0
[已关闭问题] 关闭于 2026-03-10 11:06

Arbiter 从集群启动的那一刻起,就是副本集正式成员,它一直在线,一直拥有投票权

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1516
提问于:2026-03-10 10:59
< >
分享
所有回答(1)
0

Arbiter 的作用:仅仅是在数据节点数量为偶数时,用来凑成奇数投票权,防止选举时出现平票(Split Brain)。它不存数据。

你有 2 台数据服务器(A 和 B)只有 2台 服务器(跑数据),想实现高可用(自动故障转移),你确实必须再找第 3 台服务器作为arbiter(配置要求不高)

所以,“2台数据 + 1台Arbiter” = 总共 3 台物理服务器。

总物理机器数 = 数据节点数 + 仲裁者数

所以:

你有 3 台物理机器
你可以选:
方案 1(推荐):3台全做数据节点(1主2从)。不需要 Arbiter。
方案 2(资源受限):2台做数据节点,1台做 Arbiter。
什么时候选这个?当你那第 3 台机器配置很差(比如内存只有 512M),跑不动数据库数据,但跑个轻量级的 Arbiter 绰绰有余时。

选举算法计算的是“集群配置中的总成员数”。
即使 B 挂了,系统在计算“多数派”门槛时,分母依然是 3(A+B+C),而不是 2。
门槛 3/2+1=2 。

如果系统把 B 排除出总数,分母变 2,门槛变 2,那 A 自己 1 票还是不够。
关键点:Arbiter 的存在保证了总票数基数是奇数,从而让“1个数据节点 + 1个仲裁者”能凑够 2 票,超过总数的一半。

 

挂掉 1 台数据节点(比如 B 挂了)

存活节点:A (主) + C (仲裁)。
总票数:依然是 3 票(因为 C 还在,A 还在,虽然 B 死了,但系统知道总共有 3 个成员)

验证:当你将某一台数据节点停了,然后在别的节点rs.status()仍能看到3个成员或者rs.conf()。
多数派要求:还是需要 2 票。
结果:
A 投自己一票。
C 投 A 一票。
总票数 2 票 > 1.5 -> 选举成功,A 继续做主节点。
如果没有 C:只有 A 活着,总票数变 2(A和B),多数派需要 2 票。A 只有自己 1 票,无法达到多数派,A 会降级为只读,集群不可写。

*Tesla* | 园豆:1516 (小虾三级) | 2026-03-10 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册