2013-07-01 2 views
0

Я установил MongoDB и настроил его как сервис Windows. Когда я пытаюсь настроить replicaSet, я получаю сообщение об ошибке «Обычно разрешается использование только одного адреса каждого сокета (протокола/сетевого адреса/порта) для сокета: 0.0.0.0:27017».MongoDB as windows service и настройка replicaSet

Итак, я остановил службу Windows и настроил replicaSet. Теперь replicaSet работает нормально. Но я не вижу, как работает служба Windows. Означает ли это, что я не могу одновременно настроить службу replicaSet и MongoDB?

+2

Я думаю, что это принадлежит http://dba.stackexchange.com. Это не вопрос, связанный с программированием. –

+0

Я добавил теги «DBA» и «replication» для этого вопроса. – jmrio

ответ

10

Вы можете настроить набор реплик и службу MongoDB одновременно в Windows. Поскольку вы уже настроили набор реплик, вам известно, что вам нужно иметь каталог данных и файл журнала для каждого члена набора реплик. Если вы используете все элементы набора реплик на одной машине, каждому члену набора реплик должен быть присвоен другой номер порта. Образец предоставляется только для разработки или функционального тестирования. Настройка всех элементов набора реплик на одной машине будет составлять единую точку отказа в дополнение к общему снижению производительности.

Создайте файл конфигурации для каждого члена набора реплик, включая каталог данных, файл журнала, номер порта и имя набора реплик. Например, у меня есть набор реплик из 3 членов, один основной Mongodb, запущенный на порту 27017, и два вторичных, Mongodb1 на порт 37017 и Mongodb2 на порт 47017. Имя набора реплик - rs1.

Вот конфигурационный файл, например Mongodb.

# mongod.cong 

# data directory 
dbpath=C:\data\db 

# log file 
logpath=C:\mongodb-win32-i386-2.4.4\log\mongo.log 

logappend=true 

#port number 
port=27017 

#replica set name 
replSet=rs1 

Вот конфигурационный файл для одного из второстепенных.

# mongo.conf 

# data directory 
dbpath=C:\data\db2 

# log file 
logpath=C:\mongodb-win32-i386-2.4.4\log2\mongo.log 

logappend=true 

# port number 
port=47017 

# replica set name 
replSet=rs1 

Следующая ссылка содержит полный список параметров файла конфигурации. http://docs.mongodb.org/manual/reference/configuration-options/

Добавьте все три экземпляра MongoDB в качестве службы Windows. Так как я не указать имя службы и службы дисплея, служба MongoDB будет использовать имя службы по умолчанию/службы дисплея MongoDB

C:\mongodb-2.4.4\bin>mongod --config C:\mongodb-2.4.4\mongod.cfg --install 

Установите остальные два экземпляра MongoDB с именем службы и отображаемое имя службы.

C:\mongodb-2.4.4\bin>mongod --config C:\mongodb-2.4.4\mongod1.cfg --serviceName MongoDB1 --serviceDisplayName MongoDB1 --install 
C:\mongodb-2.4.4\bin>mongod --config C:\mongodb-2.4.4\mongod2.cfg --serviceName MongoDB2 --serviceDisplayName MongoDB2 --install 

Запусти все три экземпляра MongDB

C:\mongodb-2.4.4\bin>net start mongodb 
The Mongo DB service is starting. 
The Mongo DB service was started successfully. 

C:\mongodb-2.4.4\bin>net start mongodb1 
The MongoDB1 service is starting. 
The MongoDB1 service was started successfully. 

C:\mongodb-2.4.4\bin>net start mongodb2 
The MongoDB2 service is starting. 
The MongoDB2 service was started successfully. 

Проверьте состояние все три службы Windows, с помощью команды подкожно с опцией запроса.

C:\mongodb-2.4.4\bin>sc query mongodb 
C:\mongodb-2.4.4\bin>sc query mongodb1 
C:\mongodb-2.4.4\bin>sc query mongodb2 

Настроить набор реплик из оболочки MongoDB. В следующем примере экземпляр MongoDB на порте 27017 будет основным элементом набора реплик.

C:\mongodb-2.4.4\bin>mongo --port 27017 

Установить набор реплик конфигурации из оболочки MongoDB.

> config = { _id: "rs1", members:[ 
... { _id : 0, host : "localhost:27017"}, 
... { _id : 1, host : "localhost:37017"}, 
... { _id : 2, host : "localhost:47017"} 
... ] } 

В оболочке MongoDB инициализируйте набор реплик и проверьте его состояние.

> rs.initiate(config) 
{ 
     "info" : "Config now saved locally. Should come online in about a minute.", 
     "ok" : 1 
} 
> rs.status() 
{ 
     "set" : "rs1", 
     "date" : ISODate("2013-07-02T18:40:27Z"), 
     "myState" : 1, 
     "members" : [ 
       { 
         "_id" : 0, 
         "name" : "localhost:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 651, 
         "optime" : { 
           "t" : 1372790393, 
           "i" : 1 
         }, 
         "optimeDate" : ISODate("2013-07-02T18:39:53Z"), 
         "self" : true 
       }, 
       { 
         "_id" : 1, 
         "name" : "localhost:37017", 
         "health" : 1, 
         "state" : 2, 
         "stateStr" : "SECONDARY", 
         "uptime" : 31, 
         "optime" : { 
           "t" : 1372790393, 
           "i" : 1 
         }, 
         "optimeDate" : ISODate("2013-07-02T18:39:53Z"), 
         "lastHeartbeat" : ISODate("2013-07-02T18:40:26Z"), 
         "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
         "pingMs" : 0, 
         "syncingTo" : "localhost:27017" 
       }, 
       { 
         "_id" : 2, 
         "name" : "localhost:47017", 
         "health" : 1, 
         "state" : 2, 
         "stateStr" : "SECONDARY", 
         "uptime" : 31, 
         "optime" : { 
           "t" : 1372790393, 
           "i" : 1 
         }, 
         "optimeDate" : ISODate("2013-07-02T18:39:53Z"), 
         "lastHeartbeat" : ISODate("2013-07-02T18:40:26Z"), 
         "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
         "pingMs" : 0, 
         "syncingTo" : "localhost:27017" 
       } 
     ], 
     "ok" : 1 
} 
rs1:PRIMARY> 

Вы также можете проверить статус второстепенных.Здесь я подключение к одной из вторичных обмоток на порт 37017.

C:\mongodb-2.4.4\bin>mongo --port 37017 

В следующей строке будет присутствовать в MongoDB оболочке, показывающей вторичный статус.

rs1:SECONDARY> 
+0

Большое вам спасибо. Оно работает. Каковы способы тестирования replicaSet? Один из примеров - остановить PRIMARY и посмотреть, выбран ли один из Secondary как PRIMARY. Пожалуйста, дайте мне знать, если вы можете думать о других тестах. – jmrio

Смежные вопросы