将分片群集升级到 3.6

在本页面

Note

  • MongoDB 3.6 尚未在 macOS 10.13 中的新文件系统 APFS 上进行测试,可能会遇到错误。

  • 从 MongoDB 3.6.13 开始,MongoDB 3.6 系列删除了对 Ubuntu 16.04 PPCLE 的支持。

对于支持 Ubuntu 16.04 POWER/PPC64LE 的 MongODB Enterprise 早期版本:

由于 Ubuntu 16.04 for POWER 的glibc软件包的较早版本中存在锁定清除错误,因此在运行 MongoDB 之前,必须将glibc软件包升级到至少glibc 2.23-0ubuntu5。使用glibc软件包的较旧版本的系统会由于随机内存损坏而导致数据库服务器崩溃和行为异常,并且不适合 MongoDB 的生产部署

Important

在尝试任何升级之前,请熟悉本文档的内容。

如果您需要有关升级到 3.6 的指导,请MongoDB 提供主要版本升级服务帮助确保平稳过渡而不会中断您的 MongoDB 应用程序。

升级建议和清单

升级时,请考虑以下事项:

升级版本路径

要将现有的 MongoDB 部署升级到 3.6,必须运行 3.4 系列发行版。

要从 3.4 系列之前的版本升级,必须连续升级主要版本,直到升级到 3.4 系列为止。例如,如果您运行的是 3.2 系列,则必须在首先升级到 3.4 之前才能升级到 3.6.

Preparedness

开始升级之前,请参阅MongoDB 3.6 中的兼容性更改文档,以确保您的应用程序和部署与 MongoDB 3.6 兼容。开始升级之前,请解决部署中的不兼容性。

在升级 MongoDB 之前,请务必先在临时环境中测试应用程序,然后再将升级部署到生产环境中。

Downgrade Consideration

升级到 3.6 后,如果需要降级,我们建议downgrading升级到最新的 3.4 补丁程序。

默认绑定到 localhost

从 MongoDB 3.6 开始,默认情况下mongodmongos实例绑定到 localhost。远程 Client 端(包括副本集的其他成员)无法连接到仅绑定到 localhost 的实例。要覆盖并绑定到其他 IP 地址,请使用net.bindIp配置文件设置或--bind_ip命令行选项来指定 IP 地址列表。

如果分片群集成员在其他主机上运行,或者希望远程 Client 端连接到分片群集,则升级过程将要求您指定net.bindIp设置(或--bind_ip)。

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

有关更多信息,请参见Localhost 绑定兼容性更改

分片副本集

从 MongoDB 3.6 开始,具有分片服务器角色的mongod实例必须是副本集成员。

要将分片群集升级到版本 3.6,分片服务器必须作为副本集运行。要将现有的分片独立实例转换为分片副本集,请参见将分片独立版转换为分片副本集

Drivers

对于 MongoDB 3.6.0-3.6.3 二进制文件,只有在升级 MongoDB 二进制文件并将分片群集的功能兼容版本更新为 3.6 之后,才应将驱动程序升级为3 .6 功能兼容的驱动程序

有关更多信息,请参见SERVER-33763

阅读关注多数

从 MongoDB 3.6 开始,MongoDB 默认情况下启用对"majority"读取关注的支持。

但是,对于 MongoDB 3.6.1-3.6.x,您可以禁用读取关注"majority",以防止存储高速缓存压力使具有主从仲裁器(PSA)架构的部署固定下来。禁用"majority"读取关注也将禁用对Change Streams的支持

有关更多信息,请参见禁用多数阅读关注

Prerequisites

为了确保分片群集的所有成员都将featureCompatibilityVersion设置为3.4,请连接到每个分片副本集成员和每个配置服务器副本集成员,并检查featureCompatibilityVersion

Tip

对于已启用访问控制的分片群集,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

所有成员都应返回包含"featureCompatibilityVersion": "3.4"的结果。

要设置或更新featureCompatibilityVersion,请在mongos上运行以下命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

有关更多信息,请参见setFeatureCompatibilityVersion

有关shardIdentity文档的示例:

{
  "_id" : "shardIdentity",
  "clusterId" : ObjectId("2bba123c6eeedcd192b19024"),
  "shardName" : "shard2",
  "configsvrConnectionString" : "configDbRepl/alpha.example.net:28100,beta.example.net:28100,charlie.example.net:28100" }

下载 3.6 二进制文件

使用软件包 Management 器

如果从 MongoDB aptyumdnfzypper存储库安装了 MongoDB,则应使用程序包 Management 器升级到 3.6.

遵循适用于您的 Linux 系统的3 .6 安装说明。这将涉及为新版本添加存储库,然后执行实际的升级过程。

手动下载 3.6 Binaries

如果尚未使用包 Management 器安装 MongoDB,则可以从MongoDB 下载中心手动下载 MongoDB 二进制文件。

有关更多信息,请参见3 .6 安装说明

Upgrade Process

禁用平衡器。

mongoShell 连接到分片群集中的mongos实例,然后运行sh.stopBalancer()以禁用平衡器:

sh.stopBalancer()

Note

如果正在进行迁移,则系统将在停止平衡器之前完成正在进行的迁移。您可以运行sh.isBalancerRunning()来检查平衡器的当前状态。

要验证是否禁用了平衡器,请运行sh.getBalancerState(),如果禁用了平衡器,则返回 false:

sh.getBalancerState()

有关禁用平衡器的更多信息,请参阅禁用平衡器

升级配置服务器。

Note

当分片群集成员在其他主机上运行时,或者如果远程 Client 端连接到分片群集,则必须指定--bind_ip选项。有关更多信息,请参见Localhost 绑定兼容性更改

mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

如果使用configuration file,则更新文件以指定sharding.clusterRole: configsvrreplication.replSetNamenet.portnet.bindIp,然后启动 3.6 二进制文件:

sharding:
   clusterRole: configsvr
replication:
   replSetName: <string>
net:
   port: <port>
   bindIp: localhost,<ip address>
storage:
   dbpath: <path>

包括适用于您的部署的任何其他设置。

对每个次要成员重复上述步骤。

rs.stepDown()
mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

Note

当分片群集成员在其他主机上运行时,或者如果远程 Client 端连接到分片群集,则必须指定--bind_ip选项。有关更多信息,请参见Localhost 绑定兼容性更改

如果使用configuration file,则更新文件以指定sharding.clusterRole: configsvrreplication.replSetNamenet.portnet.bindIp,然后启动 3.6 二进制文件:

sharding:
   clusterRole: configsvr
replication:
   replSetName: <string>
net:
   port: <port>
   bindIp: localhost,<ip address>
storage:
   dbpath: <path>

包括适合您的部署的任何其他配置。

升级碎片。

一次升级一个碎片。

对于每个分片副本集:

mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

Note

当分片群集成员在其他主机上运行时,或者如果远程 Client 端连接到分片群集,则必须指定--bind_ip选项。有关更多信息,请参见Localhost 绑定兼容性更改

如果使用configuration file,请将文件更新为包括sharding.clusterRole: shardsvrreplication.replSetNamenet.portnet.bindIp,然后启动 3.6 二进制文件:

sharding:
   clusterRole: shardsvr
replication:
   replSetName: <string>
net:
   port: <port>
   bindIp: localhost,<ip address>
storage:
   dbpath: <path>

包括适合您的部署的任何其他配置。

对每个次要成员重复上述步骤。

mongoShell 连接到主要数据库,并使用rs.stepDown()降低主要数据库并强制选择新的主要数据库:

rs.stepDown()
mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

Note

当分片群集成员在其他主机上运行时,或者如果远程 Client 端连接到分片群集,则必须指定--bind_ip选项。有关更多信息,请参见Localhost 绑定兼容性更改

如果使用configuration file,则更新文件以指定sharding.clusterRole: shardsvrreplication.replSetNamenet.portnet.bindIp,然后启动 3.6 二进制文件:

sharding:
   clusterRole: shardsvr
replication:
   replSetName: <string>
net:
   port: <port>
   bindIp: localhost,<ip address>
storage:
   dbpath: <path>

包括适合您的部署的任何其他配置。

升级 mongos 实例。

用 3.6 二进制文件替换每个mongos实例,然后重新启动。包括适合您的部署的任何其他配置。

Note

当分片群集成员在其他主机上运行时,或者如果远程 Client 端连接到分片群集,则必须指定--bind_ip选项。有关更多信息,请参见Localhost 绑定兼容性更改

mongos --configdb csReplSet/<rsconfigsver1:port1>,<rsconfigsver2:port2>,<rsconfigsver3:port3> --bind_ip localhost,<ip address>

重新启用平衡器。

使用 3.6 mongo shell,连接到集群中的mongos并运行sh.setBalancerState()重新启用均衡器:

sh.setBalancerState(true)

3.4 和更早版本的mongo shell 与 3.6 群集不兼容。

有关重新启用平衡器的更多信息,请参阅启用平衡器

启用向后不兼容的 3.6 功能。

此时,您可以在没有 3.6 不兼容的功能和 3.4 的情况下运行 3.6 二进制文件。也就是说,您可以运行功能兼容版本设置为 3.4 的 3.6 分片群集

Important

对于 MongoDB 3.6.0-3.6.3,仅应在将分片群集的功能兼容版本更新为 3.6 之后,才应将驱动程序升级为3 .6 功能兼容的驱动程序。有关更多信息,请参见SERVER-33763

要启用这些 3.6 功能,请将功能兼容版本(FCV)设置为 3.6.

Note

启用这些向后不兼容功能可能会使降级过程复杂化,因为在降级之前必须删除所有持久的向后不兼容功能。

建议升级后,允许您在不启用这些功能的情况下运行部署,并且要在预热期内确保降级的可能性最小。如果您确信降级的可能性很小,请启用这些功能。

mongos实例上,在admin数据库中运行setFeatureCompatibilityVersion命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

此命令必须执行对内部系统集合的写入。如果由于某种原因该命令未成功完成,则可以安全地在mongos上重试该命令,因为该操作是幂等的。

重新启动 mongos 实例。

更改featureCompatibilityVersion之后,需要重新启动所有mongos实例以获取因果一致性行为中的更改。

其他升级步骤

首页