2013-06-22 2 views
1

Я создал осколок с двумя наборами реплик. Каждый набор реплик имеет 3 mongod сервер, и они работают нормально. Кроме того, сервер mongos работает. Вот это состояние:Не удается запросить коллекцию осколков

mongos> sh.status() 
--- Sharding Status --- 
    sharding version: { 
     "_id" : 1, 
     "version" : 3, 
     "minCompatibleVersion" : 3, 
     "currentVersion" : 4, 
     "clusterId" : ObjectId("51c5be46dda9b0a5cd83ad64") 
} 
    shards: 
     { "_id" : "s1", "host" : "s1/RemotePC_1:27017,RemotePC_1:27018,RemotePC_1:27019" } 
     { "_id" : "s2", "host" : "s2/RemotePC_2:27017,RemotePC_2:27018,RemotePC_2:27019" } 
    databases: 
     { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
     { "_id" : "student", "partitioned" : true, "primary" : "s1" } 
       student.grades 
         shard key: { "_id" : 1 } 
         chunks: 
           s1  1 
         { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : s1 { "t" : 1, "i" : 0 } 

Но, когда я выполнить любую команду (вставить, найти, граф, mongoimport) на student.grades коллекции я получаю назад эта ошибка:

mongos> db.grades.count() 
Sat Jun 22 20:07:00.968 JavaScript execution failed: count failed: { 
     "code" : 10429, 
     "ok" : 0, 
     "errmsg" : "exception: setShardVersion failed host: RemotePC_2:27017 { oldVersion: Timestamp 0|0, oldVersionEpoch: ObjectId 
     ('000000000000000000000000'), errmsg: \"exception: all servers down/unreachable when querying: My-PC:57017,My-PC:57018,My-PC:57019\", code: 8002, ok: 0.0 }" 
} at src/mongo/shell/query.js:L180 

Почему? Я что-то упускаю?

+0

Что такое «Мой компьютер: 57017, Мой компьютер: 57018, Мой компьютер: 57019» - это случайные ваши серверы конфигурации и возможно ли они недоступны? –

+0

Да, это сервер конфигурации, а 'My-PC' - имя компьютера моего компьютера. Они не недостижимы. Я могу подключиться к ним с помощью «mongo» и в наборах реплик (RemotePC_2: 27017 ...). – Schaliasos

+0

Ах, но вы локальны для «My-PC» - процессы mongod НЕ - поэтому это означает, что вы не можете связаться с «My-PC» с «RemotePC» - по крайней мере, не по имени, которое вы ему дали. –

ответ

2

Все члены кластерного кластера должны иметь возможность охватить всех остальных членов.

Вы используете mongos на своем локальном компьютере, он может достигать серверов конфигурации, которые также запускаются на вашем локальном компьютере, и он может достигать осколков, работающих на удаленных компьютерах.

Однако, если осколки на удаленных компьютерах не могут добраться до серверов конфигурации на вашем локальном компьютере, они будут не быть в состоянии нормально работать в кластере (и это сообщение об ошибке, которое вы видите).

Решение этой проблемы должно состоять в том, чтобы перезапустить mongos с аргументом сервера конфигурации (--configdb), указанным в качестве имен хостов, которые могут быть маршрутизированы (они же найдены) с «удаленного ПК». Если вы используете несколько процессов mongos, вам нужно будет сделать это для всех них.

+0

В этом была проблема. Я установил сервер config и mongos на компьютер, на котором у сервера репликации есть доступ, и он сработал. Спасибо. – Schaliasos