首页 > 解决方案 > 恢复到副本集时 mongorestore 挂起

问题描述

使用以下 .mongorc.js:

rs.slaveOk();

function startRS() {
    config = {_id: 'rs', members: [{_id: 0, host: 'localhost:27017', priority: 1}, {_id: 1, host: 'localhost:27016', priority: 0}]};
    rs.initiate(config);
}

以及以下启动脚本:

#!/bin/bash

mkdir /data/db/rs{0,1} >/dev/null 2>&1

/opt/mongo-db/bin/mongod --replSet rs --port 27016 --dbpath /data/db/rs1 &

/opt/mongo-db/bin/mongod --replSet rs --port 27017 --dbpath /data/db/rs0 &

/opt/mongo-db/bin/mongo --eval "startRS()"

Mongo 启动一切正常。但是当我尝试运行 mongorestore 作为

$ /opt/mongo-db/bin/mongorestore  --drop dump/

它在连续写入时挂起

2018-06-29T19:35:47.661+0200    [########################]    ardoq-common.model.versions   753KB/753KB  (100.0%)
2018-06-29T19:35:47.661+0200    [#####...................]  iansneworg.component.versions  456KB/1.99MB   (22.4%)
2018-06-29T19:35:47.661+0200    [........................]        home.component.versions  447KB/12.9MB    (3.4%)
2018-06-29T19:35:47.661+0200    [#.......................]   piedpiper.component.versions  593KB/12.4MB    (4.7%)
2018-06-29T19:35:47.661+0200
2018-06-29T19:35:50.662+0200    [########################]    ardoq-common.model.versions   753KB/753KB  (100.0%)
2018-06-29T19:35:50.662+0200    [#####...................]  iansneworg.component.versions  456KB/1.99MB   (22.4%)
2018-06-29T19:35:50.662+0200    [........................]        home.component.versions  447KB/12.9MB    (3.4%)
2018-06-29T19:35:50.662+0200    [#.......................]   piedpiper.component.versions  593KB/12.4MB    (4.7%)
2018-06-29T19:35:50.662+0200
2018-06-29T19:35:53.664+0200    [########################]    ardoq-common.model.versions   753KB/753KB  (100.0%)
2018-06-29T19:35:53.664+0200    [#####...................]  iansneworg.component.versions  456KB/1.99MB   (22.4%)
2018-06-29T19:35:53.664+0200    [........................]        home.component.versions  447KB/12.9MB    (3.4%)
2018-06-29T19:35:53.664+0200    [#.......................]   piedpiper.component.versions  593KB/12.4MB    (4.7%)
2018-06-29T19:35:53.664+0200

虽然 mongodb 日志

2018-06-29T19:37:57.368+0200 I NETWORK  [listener] connection accepted from 127.0.0.1:62632 #60 (11 connections now open)
2018-06-29T19:37:57.372+0200 I NETWORK  [listener] connection accepted from 127.0.0.1:62634 #10 (4 connections now open)
2018-06-29T19:37:57.377+0200 I COMMAND  [conn60] CMD: drop home.component.versions
2018-06-29T19:37:57.377+0200 I STORAGE  [conn60] dropCollection: home.component.versions (623af0a3-ee8d-4b8a-9e28-349bd1094b32) - renaming to drop-pending collection: home.system.drop.1530293877i1t5.component.versions with drop optime { ts: Timestamp(1530293877, 1), t: 5 }
2018-06-29T19:37:57.379+0200 I NETWORK  [listener] connection accepted from 127.0.0.1:62636 #61 (12 connections now open)
2018-06-29T19:37:57.379+0200 I STORAGE  [conn60] createCollection: home.component.versions with generated UUID: f5cb88f9-df22-4990-9ef8-cdd689892b50
2018-06-29T19:37:57.380+0200 I COMMAND  [repl writer worker 9] CMD: drop home.component.versions
2018-06-29T19:37:57.380+0200 I STORAGE  [repl writer worker 9] dropCollection: home.component.versions (623af0a3-ee8d-4b8a-9e28-349bd1094b32) - renaming to drop-pending collection: home.system.drop.1530293877i1t5.component.versions with drop optime { ts: Timestamp(1530293877, 1), t: 5 }
2018-06-29T19:37:57.382+0200 I NETWORK  [listener] connection accepted from 127.0.0.1:62638 #62 (13 connections now open)
2018-06-29T19:37:57.383+0200 I COMMAND  [conn61] CMD: drop piedpiper.component.versions
2018-06-29T19:37:57.383+0200 I STORAGE  [conn61] dropCollection: piedpiper.component.versions (1eaf6561-eea5-414d-80d2-b914f5110559) - renaming to drop-pending collection: piedpiper.system.drop.1530293877i3t5.component.versions with drop optime { ts: Timestamp(1530293877, 3), t: 5 }
2018-06-29T19:37:57.384+0200 I STORAGE  [repl writer worker 0] createCollection: home.component.versions with provided UUID: f5cb88f9-df22-4990-9ef8-cdd689892b50

这是在带有 mongodb-osx-x86_64-enterprise-3.6.5 的 MacOS High Sierra 上

我有这个精确的(很可能不精确,因为它正在工作)设置在另一台 Mac 上运行,也使用 MacOS High Sierra,但可能使用 mongodb-3.6.4。

有小费吗?

标签: mongodb

解决方案


您的 mongorestore 命令行正在默认端口上连接到 localhost 上的独立 mongod,您发布的日志片段表明辅助节点将无法进行写入。

为了使 monorestore 自动切换到可写节点,您需要在命令行中指定副本集

connection options:
-h, --host=<hostname>                                     mongodb host to connect to (setname/host1,host2 for replica sets)
--port=<port>                                         server port (can also use --host hostname:port)

/opt/mongo-db/bin/mongorestore --host=rs/localhost:27017,localhost:27016 --drop dump/

推荐阅读