Получение не может создавать пользовательские базы данных из-за ошибки экземпляра --configsvr при попытке запустить набор реплик сервера конфигурации

Я хочу создать набор реплик confiserver. Для этого я выполнил следующие шаги:

1. Я создал два сервера конфигурации, используя следующие конфигурации:

sharding:
 clusterRole: configsvr

replication:
 replSetName: TestConfigServer1

net:
 bindIp: 127.0.0.1
 port: 27018

storage:
 dbPath: E:\Programming\MongoDBProgramming\Mongodb

sharding:
 clusterRole: configsvr

replication:
 replSetName: TestConfigServer1

net:
 bindIp: 127.0.0.1
 port: 27019

storage:
 dbPath: E:\Programming\MongoDBProgramming\Mongodb1


2. Затем я подключил «mongo» к первой конфигурации и выполнил следующие команды:

rs.initiate()
rs.add( {_id: 1,host: 127.0.0.1:27019} )

Это создало набор реплик с портом 27018 в качестве основного.

Затем, после закрытия всех серверов mongod, я попытался снова запустить набор реплик.

Сначала я запустил порт 27018, используя соответствующий файл конфигурации, а затем таким же образом попытался запустить порт 27019. Для 27019 я получил следующую ошибку:

2020-05-20T21:48:37.449+0530 F - [replication-0] Фатальное утверждение 40088 InitialSyncFailure: ошибка клонирования баз данных :: вызвано :: Location14037: Ошибка клонирования коллекции '.new_enrollment' :: вызвано :: не может создавать пользовательские базы данных в экземпляре --configsvr в src\mongo\db\repl\replication_coordinator_impl.cpp 743

Кроме того, при подключении оболочки mongo к серверу 27018 и проверке состояния набора реплик он показал, что сервер 27018 является вторичным. Что я здесь делаю неправильно?


Изменить: результат от rs.status()

TestConfigServer1:SECONDARY> rs.status()
{
        "set" : "TestConfigServer1",
        "date" : ISODate("2020-05-20T17:03:47.950Z"),
        "myState" : 2,
        "term" : NumberLong(4),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "configsvr" : true,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1589991517, 1),
                        "t" : NumberLong(4)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1589991517, 1),
                        "t" : NumberLong(4)
                },
                "lastAppliedWallTime" : ISODate("2020-05-20T16:18:37.962Z"),
                "lastDurableWallTime" : ISODate("2020-05-20T16:18:37.962Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1589907661, 1),
        "lastStableCheckpointTimestamp" : Timestamp(1589907661, 1),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "127.0.0.1:27018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 3168,
                        "optime" : {
                                "ts" : Timestamp(1589991517, 1),
                                "t" : NumberLong(4)
                        },
                        "optimeDate" : ISODate("2020-05-20T16:18:37Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 2,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "127.0.0.1:27019",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2020-05-20T17:03:46.549Z"),
                        "lastHeartbeatRecv" : ISODate("2020-05-20T16:18:37.166Z"),
                        "pingMs" : NumberLong(7),
                        "lastHeartbeatMessage" : "Error connecting to 127.0.0.1:27019 :: caused by :: No connection could be made because the target machine actively refused it.",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : -1
                }
        ],
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(0, 0),
                "electionId" : ObjectId("7fffffff0000000000000004")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1589991517, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1589991517, 1)
}

person V K    schedule 20.05.2020    source источник
comment
Что вы получаете от rs.status()?   -  person Wernfried Domscheit    schedule 20.05.2020
comment
Вы пробовали localhost вместо 127.0.0.1   -  person Wernfried Domscheit    schedule 20.05.2020
comment
Добавил статус.   -  person V K    schedule 20.05.2020
comment
Также пробовал localhost, но получил ту же ошибку.   -  person V K    schedule 21.05.2020
comment
Вы смотрели свои лог-файлы?   -  person Wernfried Domscheit    schedule 21.05.2020
comment
Вы проверяли статус после rs.initiate() перед запуском rs.add()? Убедитесь, что каталоги данных пусты при инициализации сервера.   -  person Wernfried Domscheit    schedule 21.05.2020
comment
Нет, я не проверял статус после rs.initiate(). Для сервера 27019, который должен быть вторичным, я очистил каталог базы данных, но все равно получил ту же ошибку при его запуске.   -  person V K    schedule 22.05.2020
comment
А как насчет каталога основного? Он также должен быть пустым.   -  person Wernfried Domscheit    schedule 22.05.2020
comment
@WernfriedDomscheit Primary по-прежнему содержит полную базу данных.   -  person V K    schedule 23.05.2020
comment
Я думаю, тогда вы должны следовать преобразовать Набор реплик для разделенного кластера. Если ваша существующая база данных является автономной БД, вы должны Заранее преобразовать автономный набор в набор реплик   -  person Wernfried Domscheit    schedule 23.05.2020


Ответы (1)


Я предполагаю, что вы запустили первый сервер конфигурации в каталоге данных, который ранее использовался для другого развертывания. Начните с пустого каталога данных.

person D. SM    schedule 20.05.2020
comment
Вчера я запустил сервер конфигурации на пути к базе данных. Сегодня я столкнулся с этой проблемой. Итак, всякий раз, когда я перезапускаю свой сервер, мне нужно создавать новую базу данных? - person V K; 20.05.2020
comment
Нет, но вам нужно хранить каталоги для каждого экземпляра mongod отдельно и использовать каждый из них соответствующим образом. Такое имя, как E:\Programming\MongoDBProgramming\Mongodb, не говорит вам, что находится в этом каталоге. - person D. SM; 20.05.2020
comment
Он разделен, один находится в каталоге Mongodb1, а другой в Mongodb. - person V K; 21.05.2020
comment
Я указал другой путь для БД сервера 27019, но все равно получил ту же ошибку. - person V K; 21.05.2020
comment
new_enrollment — это база данных, которую вы создали в какой-то момент, да? - person D. SM; 21.05.2020
comment
Нет, это коллекция. - person V K; 22.05.2020
comment
Я не думаю, что вы можете создать коллекцию до того, как добавите первый осколок. Конечно, шарды можно добавлять только после инициализации. Похоже, вы выполнили команды в неправильном порядке. Строго придерживайтесь порядка, указанного в docs.mongodb.com/manual. /tutorial/deploy-shard-cluster/ - person Wernfried Domscheit; 22.05.2020
comment
@WernfriedDomscheit У меня уже была база данных, я пытался создать для нее осколки. - person V K; 23.05.2020