2014-11-17 2 views
0

У меня есть настройка mongodb для среды кластера. Мой конфигурационный сервер и маршрутизатор работают на одной машине, тогда как оштрафование выполняется на трех разных машинах. Я хочу знать, доступна ли какая-либо команда, которую я могу запустить на терминале (на котором запущены configsvr и маршрутизатор), и отобразит все имя маршрута, конфигурационный сервер (связанный с ним), другие связанные с ним базы данных (связанные с ним).Проверить конфигурацию настройки mongodb

Чтобы упростить его больше.

Предположим, что я запустил mycommand/часть кода, это отображение.

router1---> configserver1----> Shardeddb1 
         ----> Shardeddb2 
         -----> shardeddb3 

Изменение, чтобы сделать его более понятным.

Мой маршрутизатор1 и configserver1 работают на одной машине (скажем, ip 19.0.0.123), Shardeddb1 (скажем, ip 19.0.0.124), Shardeddb2 (скажем, ip 19.0.0.125), Shardeddb3 (скажем, ip 19.0.0.126).

Я хочу сделать Shardeddb1 основным и (Shardeddb2, Shardeddb3) как вторичный. Если я запустил sh.status(); он показывает мне подробности, но не о том, какая база данных принадлежит какой машине. Так есть ли какой-нибудь скрипт, который может показать мне более подробную информацию?

sharding version: { 
    "_id" : 1, 
    "version" : 4, 
    "minCompatibleVersion" : 4, 
    "currentVersion" : 5, 
    "clusterId" : ObjectId("545b632e9be3f019d6ef788f") 
} 
shards: 
    { "_id" : "ps1", "host" : "ps1/19.0.0.123:27017","draining" : true } 
    { "_id" : "ps2", "host" : "ps2/19.0.0.124:27017" } 
    { "_id" : "shard0000", "host" : "19.0.0.125:27017" } 
    { "_id" : "shard0001", "host" : "19.0.0.126:27017" } 
databases: 
    { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
    { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } 
    { "_id" : "demo", "partitioned" : true, "primary" : "shard0000" } 
    { "_id" : "db", "partitioned" : false, "primary" : "ps1" } 
    { "_id" : "mongotestDB", "partitioned" : true, "primary" : "ps1" } 
      mongotestDB.logcoll 
        shard key: { "id" : 1 } 
        chunks: 
          shard0000  4 
          shard0001  9 
          ps2  7 
          ps1  5 
        too many chunks to print, use verbose if you want to force print 
+0

Маркус делает несколько хороших пунктов ниже. Я думаю, вам может понадобиться лучшее понимание архитектуры осколков, а затем вы можете переоценить свой вопрос. Наивно, ['sh.status'] (http://docs.mongodb.org/manual/reference/method/sh.status/#sh.status) наиболее близок к тому, что вы ищете с точки зрения монго функция оболочки. – wdberkeley

+0

Первичный осколок (не путать с основным членом набора реплик) для каждой базы данных должен отображаться выходом 'sh.status()'. Можете ли вы отправить сообщение? –

+0

@MarkusWMahlberg Я добавил sh.status() – user3526896

ответ

0

Поскольку ваша диаграмма показывает, в противном случае:

  1. Вы можете иметь ровно 1 или 3 конфигурации серверов.
  2. Вы должны всегда ваши mongos экземпляры имеют точную ту же строку для параметра configdb. И эта строка должна содержать все серверы конфигурации в том же порядке. В противном случае вы рискуете повреждением метаданных.
  3. Все конфигураторы и монго должны иметь возможность подключаться и соединяться всеми узлами в кластере.
  4. Самый простой способ получить обзор на вашем кластере - это бесплатный мониторинг MongoDB Management Service.
  5. Запуск mongos' и конфигураторы на одной машине возможны - при условии, что вы следите за нагрузкой. Если ситуация становится грубой, и у конфигураторов есть задержки при обновлении метаданных, потому что mongos потребляют все IO, вы можете ухудшить ситуацию. Если блокировка фрагментов задерживается (и они более вероятны при большой нагрузке), это может привести к тому, что JumboChunks, которые нужно разделить вручную и - пока это не будет выполнено - не могут быть перенесены. Поэтому очень плохой идеей является наличие экземпляров mongos на конфигурационных серверах imvho. Гораздо лучшее решение состоит в том, чтобы экземпляры mongos запускались на серверах приложений, по одному на каждом.
+0

За # 5, о чем вы говорите? Диск? mongos не имеет каталогов данных и не хранит много, если что-либо на диске, поэтому я не думаю, что он должен бороться с конфигурационными серверами через дисковый ввод-вывод. Как правило, монгосы принадлежат на сервере приложений, так как монгоры достаточно легки, чтобы сосуществовать, и это экономит сетевые перелеты. – wdberkeley

+0

Сеть IO. Я видел, как люди запускали как монго, так и configserver на небольшом VPS, и это стало проблемой. Фактически, мы заметили это только после того, как другие монго попытались обновить его кеш метаданных. И я полностью согласен с вами: mongos на _appserver_ - это лучшее, что можно сделать. –

+0

Ah ok - они могли конкурировать за сетевые ресурсы. – wdberkeley