0

我已将具有两个副本集的 MongodDB 分片集群从 3.2 升级到 3.4。当前的存储引擎是 MMAPv1。在成功将所有辅助服务器、主服务器、配置服务器和 mongos 升级到 3.4 后,当我使用以下命令运行配置服务器时。

sudo mongod --configsvr

我不断收到以下错误。

SHARDING [shard registry reload] Periodic reload of shard registry failed :: 由于 :: 115 由于当前存储引擎不支持多数 readConcerns 无法从配置服务器获取更新的分片列表;将在 30 秒后重试

而且我无法将 mongos 与配置服务器连接。当我尝试使用以下命令连接它时

sudo mongos --configdb [ip-of-my-config-server]:27019

它给了我以下错误。

BadValue:configdb 仅支持副本集连接字符串

我想由于配置服务器上的大多数 readConcerns 错误,mongos 无法连接到配置服务器。

MongoDB 手册说“从副本集配置服务器读取时,MongoDB 3.4 使用“多数”的读取关注级别。

并且要使用“多数”的读取关注级别,必须使用 WiredTiger 作为存储引擎。

所以看来我必须切换到 WiredTiger 存储引擎才能使其工作。但是当我打算切换到一个辅助副本集成员的WiredTiger存储引擎时,根据手册

“此过程完全删除辅助副本集成员的数据”

所以我被卡在了一半。情况是

  1. 配置服务器给出关于多数 readConcerns 的错误。
  2. 我必须切换到 WiredTiger 才能摆脱它。
  3. 切换到 WiredTiger 将从次要成员中删除数据。
  4. 由于配置服务器错误,在切换到 WiredTiger 过程期间,数据不会被复制回辅助成员,最终我将丢失所有数据(如果我错了,请更正)。

问题是:

  1. 从副本集配置服务器读取时,我可以让 MongoDB 3.4 使用“本地”的读取关注级别吗?
  2. 如何在我的场景中切换到 WiredTiger 引擎而不丢失数据?
4

1 回答 1

0

您可以像独立一样迁移副本集中的每个节点,方法是使用 mongodump 备份数据,使用 WiredTiger 和空白数据目录重新启动,然后使用 mongorestore 填充新数据库。

这通常不建议用于副本集节点,但这只是因为擦除辅助节点上的数据并让它从其他节点重新同步更容易。这样做会很好,但使用转储和恢复工具需要为您做一些更繁琐的工作。

于 2017-03-01T15:48:55.097 回答