Я новичок в mongo, и я только что настроил локальный набор реплик на своем ноутбуке.
Пытаюсь импортировать демо-базу ресторанов отсюда: https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json
и выполнил команду mongoimport следующим образом:
mongoimport -v --db test --collection restaurants --drop --file dataset.json
Завершить импорт просто остановится на 45%
2015-12-29T12:42:56.847-0500 filesize: 11880944 bytes
2015-12-29T12:42:56.847-0500 using fields:
2015-12-29T12:42:56.859-0500 connected to: localhost
2015-12-29T12:42:56.859-0500 ns: test.restaurants
2015-12-29T12:42:56.860-0500 connected to node type: replset
2015-12-29T12:42:56.860-0500 using write concern: w='majority', j=false, fsync=false, wtimeout=0
2015-12-29T12:42:56.861-0500 dropping: test.restaurants
2015-12-29T12:42:56.864-0500 using write concern: w='majority', j=false, fsync=false, wtimeout=0
2015-12-29T12:42:59.859-0500 [#########...............] test.restaurants 4.5 MB/11.3 MB (39.9%)
2015-12-29T12:43:02.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:05.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:08.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:11.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:14.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:17.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:20.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:23.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:26.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:29.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:32.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:35.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:38.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:41.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:44.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:47.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:50.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:53.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:56.850-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:43:59.849-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:44:02.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:44:05.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:44:08.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:44:11.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
2015-12-29T12:44:14.848-0500 [##########..............] test.restaurants 5.2 MB/11.3 MB (45.5%)
На ведомом устройстве создается тест базы данных, но если я попытаюсь найти: db.restaurants.find ();
Я вернусь :
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
Это моя конфигурация реплики от мастера:
repl1:PRIMARY> rs.config()
{
"_id" : "repl1",
"version" : 7,
"members" : [
{
"_id" : 0,
"host" : "mongo1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
},
{
"_id" : 1,
"host" : "mongo2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
},
{
"_id" : 2,
"host" : "mongo3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatTimeoutSecs" : 10,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
}
}
}
Похоже, ведомые устройства не распознают, что они являются частью набора реплик.
Где я могу найти дополнительную информацию о том, что происходит?
Завершить импорт просто остановится на 45%
Наверное, это нормально и просто построение индексов. Или у вас могут закончиться некоторые системные ресурсы, или это может быть просто медленно. Следите за журналами для этого mongod
процесс для получения дополнительной информации. Проверьте свой диск на наличие свободного места и проверьте top
или любые инструменты системного мониторинга, которые вам нужны, чтобы увидеть, какие ресурсы используются, в то время как импорт, кажется, остановлен на 45%.
На ведомом устройстве создается тест базы данных, но если я попытаюсь найти: db.restaurants.find ();
Я вернусь :
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
Вы не можете запрашивать данные на вторичном сервере, не сообщив сначала своему драйверу или оболочке mongo, что это нормально. Бегать rs.slaveOk()
сначала, а затем вы можете запустить свой find()
запрос.
Это был брандмауэр, который блокировал обратную связь ведомых устройств с мастером. Мастер смог связаться с подчиненными, но подчиненные не смогли ответить.
Если у вас есть подобная проблема, проверьте свой firewalld, если вы используете Centos7
Для импорта вы можете попробовать этот код:
mongoimport --db <database-name> --collection <collection-name> --file ~/path/file-name.json