使用 2 服务器副本集设置我应该运行多少个 mongod 实例?

使用 2 服务器副本集设置我应该运行多少个 mongod 实例?

目前我已经拥有运行以下 mongod 实例的服务器 A 和服务器 B:

服务器 A

  1. mongod 服务器(通常是主服务器)
  2. mongod 仲裁者

服务器 B

  1. mongod 服务器 (通常是 SECONDARY)

当服务器 A 发生故障时,服务器 B 无法选举自己为主服务器来接管一切。因此,我的整个应用程序都离线了,因为数据库不可用。

我的问题是,在不增加物理服务器数量的前提下,如何确保当服务器 A 发生故障时服务器 B 能够正确接管?

以下做法是个好主意吗?

服务器 A

  1. mongod 服务器 1A
  2. mongod 服务器 2A
  3. mongod 仲裁者A

服务器 B

  1. mongod 服务器 1B
  2. mongod 服务器 2B
  3. mongod 仲裁者B

我没有在 B 上添加仲裁器,因为这样会使服务器总数相等。问题是:当服务器 A 关闭时,这是让服务器 B 接管的最有效方法吗?或者我可以移除一些服务器以节省 RAM/CPU/HDD 吗?

答案1

将仲裁器与 mongod 进程放在同一台机器上其实并不有效。您是否有第三台不相关的服务器来运行仲裁器?

(记录于此:http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial#ReplicaSetTutorial-Runningwithtwonodes

在同一台服务器上运行多个 mongod 进程会导致性能问题。此外,在同一台机器上有两个可用的 mongod 进程和一个仲裁器意味着,如果两台物理服务器彼此断开连接,它们将各自选举一个本地主服务器。

答案2

当 A 断电时让服务器 B 接管的最有效方法是将当前仲裁器移至 B。但是,这意味着如果 B 发生故障,A 将不再是主要服务器,因为它无法形成多数。

有两个选项 - 让另一个仲裁器实例准备好在 A/B 上运行,并在将其添加到集合中失败时重新配置集合并删除另一个仲裁器,或者在另一个仲裁器关闭时将 A/B 作为副本集之外的独立 mongod 重新启动,并在一切恢复正常后重新配置。

使用 2 台机器时,您总会遇到必须手动干预才能恢复设置的问题。我能想到的每个自动解决方案都需要另一台机器。

相关内容