MeteorJS Oplog:轮询查询时出现异常 MongoError:没有可用的主服务器

问题描述 投票:0回答:1

我们最近需要将旧版meteorJS 应用程序复制到新服务器和新数据库上。 因此,我们克隆了服务器,创建了一个新数据库,并将克隆的服务器指向新数据库。

meteorJS 应用程序运行正常,一切看起来都很好。

但是我们注意到每次重新启动时,日志都会显示类似 MongoError: no Primary server available 的错误:

2024-02-01T06:37:06.151478+00:00 heroku[web.1]: Restarting
2024-02-01T06:37:06.217824+00:00 heroku[web.1]: State changed from up to starting
2024-02-01T06:37:06.969254+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2024-02-01T06:37:07.074219+00:00 heroku[web.1]: Process exited with status 143
2024-02-01T06:37:45.658856+00:00 heroku[web.1]: Starting process with command `.meteor/heroku_build/bin/node $NODEJS_PARAMS .meteor/heroku_build/app/main.js`
2024-02-01T06:38:00.149936+00:00 app[web.1]: Got exception while polling query MongoError: no primary server available
2024-02-01T06:38:00.149991+00:00 app[web.1]:     at ReplSetState.pickServer (/app/.meteor/heroku_build/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/topologies/replset_state.js:780:12)
2024-02-01T06:38:00.149991+00:00 app[web.1]:     at Timeout._selectServer [as _onTimeout] (/app/.meteor/heroku_build/app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/topologies/replset.js:1142:43)
2024-02-01T06:38:00.149992+00:00 app[web.1]:     at listOnTimeout (internal/timers.js:549:17)
2024-02-01T06:38:00.149992+00:00 app[web.1]:     at processTimers (internal/timers.js:492:7)
2024-02-01T06:38:00.149993+00:00 app[web.1]:  => awaited here:
2024-02-01T06:38:00.149993+00:00 app[web.1]:     at Function.Promise.await (/app/.meteor/heroku_build/app/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:56:12)
2024-02-01T06:38:00.149994+00:00 app[web.1]:     at packages/mongo/mongo_driver.js:1073:14
2024-02-01T06:38:00.149994+00:00 app[web.1]:     at /app/.meteor/heroku_build/app/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/fiber_pool.js:43:40
2024-02-01T06:38:00.149994+00:00 app[web.1]:  => awaited here:
2024-02-01T06:38:00.149995+00:00 app[web.1]:     at Promise.await (/app/.meteor/heroku_build/app/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:60:12)
2024-02-01T06:38:00.149995+00:00 app[web.1]:     at SynchronousCursor._nextObject (packages/mongo/mongo_driver.js:1122:38)
2024-02-01T06:38:00.149995+00:00 app[web.1]:     at SynchronousCursor.forEach (packages/mongo/mongo_driver.js:1136:22)
2024-02-01T06:38:00.149995+00:00 app[web.1]:     at Cursor.<computed> [as forEach] (packages/mongo/mongo_driver.js:918:44)
2024-02-01T06:38:00.149996+00:00 app[web.1]:     at OplogObserveDriver._runQuery (packages/mongo/oplog_observe_driver.js:729:16)
2024-02-01T06:38:00.149996+00:00 app[web.1]:     at OplogObserveDriver._runInitialQuery (packages/mongo/oplog_observe_driver.js:658:10)
2024-02-01T06:38:00.149996+00:00 app[web.1]:     at packages/mongo/oplog_observe_driver.js:191:10
2024-02-01T06:38:00.149996+00:00 app[web.1]:     at packages/mongo/oplog_observe_driver.js:15:9
2024-02-01T06:38:00.149997+00:00 app[web.1]:     at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)
2024-02-01T06:38:00.149997+00:00 app[web.1]:     at packages/meteor.js:550:25
2024-02-01T06:38:00.149997+00:00 app[web.1]:     at runWithEnvironment (packages/meteor.js:1286:24) {
2024-02-01T06:38:00.149997+00:00 app[web.1]:   name: 'MongoError',
2024-02-01T06:38:00.149997+00:00 app[web.1]:   [Symbol(mongoErrorContextSymbol)]: {}
2024-02-01T06:38:00.149998+00:00 app[web.1]: }

因此看来 oplog 可能无法在新服务器上运行。由于服务器共享完全相同的代码库,我们认为它一定与新数据库相关。但我们无法确定出了什么问题,因为我们不是在旧版原始服务器中配置 oplog 的人。

新旧服务器均配置了以下环境变量:

OLD SERVER
MONGO_OPLOG_URL
mongodb+srv://user:[email protected]/local
MONGO_URL
mongodb+srv://user:[email protected]/database_name

NEW SERVER
MONGO_OPLOG_URL
mongodb+srv://user:[email protected]/local
MONGO_URL
mongodb+srv://user:[email protected]/databse_name

还检查了网络IP地址限制,没有限制,所以可以排除新数据库有IP限制的可能性。

那么新数据库中可能存在什么问题导致此 MongoError: no Primary server available 在 oplog 操作中?

任何版本都没有太大变化,因为我们尽量不破坏旧版应用程序:

OLD APP

MongoDB 4.4.28
Meteor 1.10.2
[email protected]

NEW APP

MongoDB 5.0.24
Meteor 1.10.2
[email protected]
node.js mongodb meteor mongodb-atlas
1个回答
0
投票

Meteor 1.10.2 不支持 MongoDB 5。您需要将 MongoDB 服务器降级到版本 4 或将 Meteor 升级到 2.6。您可以在 https://guide.meteor.com/2.6-migration.html 上查看解释 MongoDB 升级的迁移指南。

© www.soinside.com 2019 - 2024. All rights reserved.