MongoDB: Как обеспечить чтение из определенного вторичного объекта из кластера сегментов? - PullRequest
0 голосов
/ 16 октября 2018

Здесь у меня есть настройка кластера Монго с двумя конфигурационными серверами, два шарда, каждый из которых имеет 3 узла, и один сервер Монго.Например,

Серверы конфигурации IP1 configsvr1 IP2 configsvr2

Shard 1 IP3 shardsvr1 (первичный) IP4 shardsvr2 (вторичный) IP5 shardsvr3 (вторичный)

Shard 2 IP6 shardsvr4 (первичный) IP7 shardsvr5 (вторичный) IP8 shardsvr6 (вторичный)

IP9 mongos

Теперь можно ли сделать всескажем, операции чтения на определенном узле каждого шарда -

Все операции чтения должны выполняться в шарде 1 над узлом 'shardsvr3' и в шарде 2 над шардами vr.

Пожалуйста, поделитесь своими мыслями!

Заранее спасибо,

1 Ответ

0 голосов
/ 29 мая 2019

После изучения я узнал, что можно выполнять все операции чтения на определенном вторичном узле.

Вот несколько шагов, чтобы сделать это -

  • Добавить тег на вторичный узел conf = rs.conf () conf.members [0] .tags = {"use":"production"} rs.reconfig (conf)
  • установить предпочтение чтения вторичного db.getMongo (). setReadPref ('second')
  • Теперь запрос путем передачи тега в строке запроса

использованияКонтактная весенне-данных MongoDB

* * 1014 MongoClientOptions mongoClientOptions = MongoClientOptions.builder () .connectTimeout (connectionTimeoutInterval) .socketTimeout (socketTimeoutInterval) .serverSelectionTimeout (serverSelectionTimeoutInterval) .readPreference (TaggableReadPreference.secondary (новые множества ярлыков (createTagList ()))) .build ();

вернуть новый MongoClient (новый ServerAddress (хост, порт), Collections.singletonList (MongoCredential.createCredential (dbUserName, databaseName, dbPassword.toCharArray ())) mongo);

...