从 3.2 降级 MongoDB

在本页面

在尝试任何降级之前,请熟悉本文档的内容,尤其是降级建议和清单降级分片集群的过程。

降级建议和清单

降级时,请考虑以下因素:

Downgrade Path

要降级,请使用 3.0 系列中的最新版本。

Preparedness

Procedures

请遵循降级过程:

Prerequisites

文本索引版本检查

如果您拥有* version 3 文本索引(即 MongoDB 3.2 中文本索引的默认版本),请在降级 MongoDB 之前删除 version 3 *文本索引。降级后,重新创建删除的文本索引。

要确定text索引的版本,请运行db.collection.getIndexes()以查看索引规范。对于文本索引,该方法在字段textIndexVersion中返回版本信息。例如,以下显示quotes集合上的text索引是版本 3.

{
   "v" : 1,
   "key" : {
      "_fts" : "text",
      "_ftsx" : 1
   },
   "name" : "quote_text_translation.quote_text",
   "ns" : "test.quotes",
   "weights" : {
      "quote" : 1,
      "translation.quote" : 1
   },
   "default_language" : "english",
   "language_override" : "language",
   "textIndexVersion" : 3
}

2dsphere 索引版本检查

如果您拥有* version 3 * 2dsphere索引(即 MongoDB 3.2 中2dsphere索引的默认版本),请在降级 MongoDB 之前删除* version 3 * 2dsphere索引。降级后,重新创建2dsphere索引。

要确定2dsphere索引的版本,请运行db.collection.getIndexes()以查看索引规范。对于2dsphere索引,该方法在2dsphereIndexVersion字段中返回版本信息。例如,以下显示locations集合上的2dsphere索引是版本 3.

{
   "v" : 1,
   "key" : {
      "geo" : "2dsphere"
   },
   "name" : "geo_2dsphere",
   "ns" : "test.locations",
   "sparse" : true,
   "2dsphereIndexVersion" : 3
}

部分索引检查

在降级 MongoDB 之前,请删除所有部分索引。

降级独立 mongod 实例

以下步骤概述了将独立的mongod从版本 3.2 降级到 3.0 的过程。

下载最新的 3.0 二进制文件。

对于降级,请使用 3.0 系列中的最新版本。

使用最新的 3.0 mongod 实例重新启动。

Important

如果mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件,则必须包含storage.engine)。

关闭您的mongod实例。用下载的mongod二进制文件替换现有的二进制文件,然后重新启动。

降级 3.2 副本集

以下步骤概述了副本集的“滚动”降级过程。 “滚动”降级过程通过在其他成员可用时分别对成员降级来最大程度地减少停机时间:

降级 protocolVersion。

mongo shell 连接到当前主数据库并降级复制协议:

cfg = rs.conf();
cfg.protocolVersion=0;
rs.reconfig(cfg);

降级副本集的辅助成员。

降级副本集的每个secondary成员,一次降级:

Important

如果mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件,则必须包含storage.engine)。

降级初级。

mongoShell 程序中使用rs.stepDown()来降低primary并强制执行正常的failover过程。

rs.stepDown()

rs.stepDown()加快了故障转移过程,比直接关闭主数据库更可取。

替换并重新启动以前的主要 mongod。

rs.status()显示主要数据库已降级,而另一个成员已处于PRIMARY状态时,请关闭先前的主要数据库并将mongod二进制文件替换为 3.0 二进制文件并启动新实例。

Important

如果mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件,则必须包含storage.engine)。

副本集故障转移不是即时的,但将导致该集不可用于写入和中断读取,直到故障转移过程完成为止。通常,这需要 10 秒钟或更长时间。您可能希望在 sched 的维护时段内计划降级。

降级 3.2 分片群集

Requirements

在降级过程中,您无法更改集合元数据。例如,在降级期间,请 不要 执行以下任何操作:

使用 SCCC Config 服务器降级分片群集

禁用平衡器。

禁用平衡器中所述,关闭分片群集中的balancer

降级每个碎片,一次降级。

对于每个副本集碎片:

有关降级副本集的详细信息,请参见降级 3.2 副本集

降级 SCCC 配置服务器。

如果分片群集将 3 个镜像的mongod实例用于配置服务器,请按照与mongos--configdb选项相反的 Sequences 降级这三个实例。例如,如果mongos具有以下--configdb列表:

--configdb confserver1,confserver2,confserver3

首先降级confserver3,然后降级confserver2,最后降级confserver1。如果mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件,则必须包含storage.engine)。

mongod --configsvr --dbpath <path> --port <port> --storageEngine <storageEngine>

降级 mongos 实例。

降级二进制文件并重新启动。

重新启用平衡器。

分片群集组件的降级完成后,重新启用平衡器

使用 CSRS Config 服务器降级分片群集

禁用平衡器。

禁用平衡器中所述,关闭分片群集中的balancer

检查 minOpTimeUpdaters 值。

如果分片群集对每个*分片使用CSRS,请检查minOpTimeUpdaters值是否为零。 minOpTimeUpdaters值为零表示没有正在进行的迁移。非零值表示正在进行迁移,或者先前完成的迁移由于某种原因未能清除minOpTimeUpdaters值,因此应清除。

要检查值,对于每个分片,请连接到主要成员(或者,如果分片是独立的,则连接到独立的),并在admin数据库中的system.version集合中查询minOpTimeRecovery文档:

use admin
db.system.version.findOne( { _id: "minOpTimeRecovery" }, { minOpTimeUpdaters: 1 } )

如果minOpTimeUpdaters不为零,则通过降低当前主变量清除该值。当选择新的主数据库时,将清除该值。

rs.stepDown()

如果该分片是独立的,请重新启动该分片以清除该值。

准备 CSRS Config 服务器以进行降级。

如果分片群集使用CSRS

mongo shell 连接到主数据库并运行:

rs.reconfig(
   {
      "_id" : <name>,
      "configsvr" : true,
      "protocolVersion" : NumberLong(1),
      "members" : [
         {
            "_id" : 0,
            "host" : "<host1>:<port1>",
            "priority" : 1,
            "votes" : 1
         },
         {
            "_id" : 1,
            "host" : "<host2>:<port2>",
            "priority" : 0,
            "votes" : 0
         },
         {
            "_id" : 2,
            "host" : "<host3>:<port3>",
            "priority" : 0,
            "votes" : 0
         }
      ]
   }
)

mongo shell 连接到主数据库并运行:

db.adminCommand( { replSetStepDown: 360, secondaryCatchUpPeriodSecs: 300 })
mongod --configsvr --dbpath <path> --port <port> --storageEngine <storageEngine>

更新每个分片的 protocolVersion。

重新启动每个副本集碎片并更新 protocolVersion。

mongo shell 连接到当前主数据库并降级复制协议:

cfg = rs.conf();
cfg.protocolVersion=0;
rs.reconfig(cfg);

降级 mongos 实例。

Important

当配置服务器从副本集更改为三个镜像的mongod实例时,请更新--configdb设置。所有mongos必须使用相同的--configdb字符串。

降级二进制文件并重新启动。

降级配置服务器。

降级二进制文件并重新启动。在mongos--configdb选项中以降序排列降级。

如果mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件,则必须包含storage.engine)。

mongod --configsvr --dbpath <path> --port <port> --storageEngine <storageEngine>

降级每个碎片,一次降级。

对于每个分片,请使用以下删除操作从admin.system.version集合中删除minOpTimeRecovery文档。如果该分片是副本集,请在副本集的主副本上针对每个分片执行 remove 操作:

use admin
db.system.version.remove(
   { _id: "minOpTimeRecovery" },
   { writeConcern: { w: "majority", wtimeout: 30000 } }
)

对于每个副本集碎片,降级mongod二进制文件并重新启动。如果您的mongod实例正在使用WiredTiger存储引擎,则必须在 3.0 二进制文件中包含--storageEngine选项(如果使用配置文件则为storage.engine)。

有关降级副本集的详细信息,请参见降级 3.2 副本集

重新启用平衡器。

分片群集组件的降级完成后,重新启用平衡器

首页