node.js - 如何在 OpenShift 上将 MongoDB 从 3.2.10 升级到 3.6?

标签 node.js mongodb openshift

当前 OpenShift MongoDB 版本:

sh-4.2$ mongod --version
db version v3.2.10
git version: 79d9b3ab5ce20f51c272b4411202710a082d0317
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

我被告知 OpenShift 上可用的最新版本是 3.6

OpenShift 支持提供的可用步骤是:

Navigate to the following:

Applications > Deployments > Actions drop down (on the right) and Edit.

From there modify the value for the version under Images / Image Stream Tag:

openshift / mongodb :3.6

Be aware that this will just upgrade the version of the MongoDB, you may still need to perform other tasks to upgrade your data to match which are outside the scope of support.

我有点担心可能的“其他任务”。

如何在 OpenShift 上安全地将 MongoDB 从 3.2.10 升级到 3.6?

编辑

我尝试只执行列出的步骤,结果如下:

前端网站显示:

{"name":"MongoError","message":"Topology was destroyed"}

这些是来自控制台的各种截图。

enter image description here

enter image description here

enter image description here

我用谷歌搜索了Topology was destroyed并发现了这个答案:

https://stackoverflow.com/a/31950062

尽管它引用了 Mongoose 并且我不使用它,但它谈到了 Node 在无法连接到 MongoDB 时会崩溃。

因此,我缩小了 Node pod,然后缩小了 MongoDB pod,然后扩大了 MongoDB pod,然后扩大了 Node pod。

它似乎已恢复到上次工作的 MongoDB 部署。

然后我点击Deploy对于 MongoDB pod,它再次卡住并显示上面第一张图片中显示的消息。

编辑2

我尝试缩小两个 Pod,然后进行部署,我在 MongoDB 日志中注意到这一点:

2018-09-14T14:08:40.176+0000 F CONTROL  [initandlisten] ** IMPORTANT: UPGRADE PROBLEM: The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6; see http://dochub.mongodb.org/core/3.6-upgrade-fcv  for more details.
2018-09-14T14:08:40.176+0000 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2018-09-14T14:08:40.176+0000 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2018-09-14T14:08:40.176+0000 I REPL     [initandlisten] shutdown: removing all drop-pending collections...
2018-09-14T14:08:40.176+0000 I REPL     [initandlisten] shutdown: removing checkpointTimestamp collection...
2018-09-14T14:08:40.176+0000 I STORAGE  [initandlisten] WiredTigerKVEngine shutting down
=>  Waiting for MongoDB daemon up
2018-09-14T14:08:40.416+0000 I STORAGE  [initandlisten] WiredTiger message [1536934120:416170][26:0x7f20e10adb80], txn-recover: Main recovery loop: starting at 61/3200
2018-09-14T14:08:40.529+0000 I STORAGE  [initandlisten] WiredTiger message [1536934120:529090][26:0x7f20e10adb80], txn-recover: Recovering log 61 through 62
2018-09-14T14:08:40.593+0000 I STORAGE  [initandlisten] WiredTiger message [1536934120:593166][26:0x7f20e10adb80], txn-recover: Recovering log 62 through 62
2018-09-14T14:08:40.684+0000 I STORAGE  [initandlisten] shutdown: removing fs lock...
2018-09-14T14:08:40.684+0000 I CONTROL  [initandlisten] now exiting
2018-09-14T14:08:40.684+0000 I CONTROL  [initandlisten] shutting down with code:62
=>  Waiting for MongoDB daemon up

编辑3

我已经取得了一些进展,我采取了以下步骤:

  • 缩小 MongoDB 和 Node Pod。
  • 将 MongoDB 版本设置为 3.4

enter image description here

  • 点击Deploy

pod 启动并运行,但是当我尝试对 3.6 执行相同操作时,它在日志中显示有关 The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6 的错误消息。

编辑4

回复:

https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#upgrade-version-path

我在 pod 终端中运行了这个:

env | grep MONGODB // to confirm i had admin password correct
mongo -u admin -p ************ admin
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

它返回了:

{ "featureCompatibilityVersion" : "3.2", "ok" : 1 }

所以我做到了:

> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
{ "ok" : 1 }

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : "3.4", "ok" : 1 }

然后我确保所有 Pod 都已缩小,并将 MongoDB 版本从 3.4 更改为至3.6 、部署并尝试扩展 MongoDB pod。

它又回来了!

编辑5

我回到终端并运行:

> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
{ "ok" : 1 }

因为我在浏览器开发工具控制台中遇到此错误:

The featureCompatibilityVersion must be 3.6 to use arrayFilters. See http://dochub.mongodb.org/core/3.6-feature-compatibility.

该功能现在正在前端运行!

最佳答案

这对我有用:

01) 缩小 MongoDBNode Pod。

02) 转到应用程序 > 部署 > MongoDB

03) 转到 Actions > Edit 并选择 MongoDB 版本 3.4

enter image description here

04) 单击部署,完成后缩放 MongoDB Pod 备份

05) 转到 Applications > Pods > mongodb-**-***** 的 Pod 终端

env | grep MONGODB // to confirm i had admin password correct

mongo -u admin -p ************ admin

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )  
// { "featureCompatibilityVersion" : "3.2", "ok" : 1 }  

> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
// { "ok" : 1 }

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
// { "featureCompatibilityVersion" : "3.4", "ok" : 1 }

06) 确保所有 Pod 均已缩小,并将 MongoDB 版本从 3.4 更改为 3.6(如步骤 03 所示),部署并扩大规模。

这里有一个警告:

https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#enable-backwards-incompatible-newversion-features

关于执行以下步骤,但我这样做是因为我的应用程序需要它:

07) 转到 Applications > Pods > mongodb-**-***** 的 Pod 终端

> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
// { "ok" : 1 }

08) 重新扩展 Node Pod。

引用文献:

https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone

https://docs.mongodb.com/manual/release-notes/3.4-upgrade-standalone

关于node.js - 如何在 OpenShift 上将 MongoDB 从 3.2.10 升级到 3.6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52327882/

相关文章:

node.js - 如何为开发和部署组织单独的客户端和服务器存储库?

mongodb - Scala 从 Controller 接收列表 [String]

MySQL NodeJS Openshift 服务器 - 对数据库的查询似乎不起作用

java - 使用适用于 OpenShift 的 Jboss Tools 插件进行部署会生成错误 invalid target release : 1. 8

node.js - ETIMEDOUT 在 Nodejs Openshift 应用程序中使用 nodemailer 连接错误

javascript - 使用加载器 ts-node/esm.js 运行 Node 需要导入具有 .js 扩展名

javascript - 将对象推送到现有集合后,检索对象自生成的 _id 值

javascript - Mongo 命令根据字段长度过滤字段

Django:admin.StackedInline 没有外键

node.js - neo4j 如果 Node 属性不匹配则创建 Node