Проблема подключения Kubernetes MongoDB от Java - PullRequest
1 голос
/ 26 февраля 2020

Доброе утро, я развернул кластер MongoDB ReplicaSet (3 узла, 1 основной, 2 дополнительный) в Kubernetes, используя для этого следующее руководство:

Руководство

Развертывание прошло успешно, и я могу подключиться через оболочку mon go к моему удаленному кластеру MongoDB пользователем / pass (каждый узел моего кластера MongoDB имеет PublicIP для его подключения). Я создал базу данных и вставил в нее данные для проверки репликации, и она работает нормально.

Проблема возникает, когда я пытаюсь подключиться к кластеру MongoDB с приложением Java. Java код:

MongoCredential credential = 
MongoCredential.createCredential("user", 
"dbs","password".toCharArray());
Builder mongoBuilder = MongoClientOptions.builder();
MongoClientOptions options = mongoBuilder.build();

return new MongoClient(Arrays.asList(new ServerAddress("ip1",27017),
new ServerAddress("ip2", 27017),
new ServerAddress("ip3", 27017)),credential, options);

В этих решениях ошибка подключения Java выглядит следующим образом:

[ОШИБКА] - Возникло исключение в MongoDBManagement.mongoDBManagement: Превышено время ожидания после 30000 мс при ожидании сервера, который соответствует com.mongodb.client.internal. MongoClientDelegate$1@102a1baf. Клиентское представление состояния кластера: {type = REPLICA_SET, Servers = [{address = mongod-1.mongodb-service.default.sv c .cluster.local: 27017, тип = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ, исключение = {com.mongodb.MongoSocketException: mongod-1.mongodb-service.default.sv c .cluster.local}, вызванный {java . net .UnknownHostException: mongod-1.mongodb-service.default.sv c .cluster.local}}, {address = mongod-2.mongodb-service.default.sv c .cluster.local: 27017, type = UNKNOWN, state = CONNECTING, исключение = {com.mongodb.MongoSocketException: mongod-2.mongodb-service.default.sv c .cluster.local}, вызванное {java. net. UnknownHostException: mongod-2.mongodb-service.default.sv c .cluster.local}}, {address = mongod-0.mongodb-service.d efault.sv c .cluster.local: 27017, тип = UNKNOWN, состояние = CONNECTING, исключение = {com.mongodb.MongoSocketException: mongod-0.mongodb-service.default.sv c .cluster.local}, вызвано {java. net .UnknownHostException: mongod-0.mongodb-service.default.sv c .cluster.local}}]; вложенное исключение - com.mongodb.MongoTimeoutException:

Решено

Я обнаружил проблему, когда вы развертываете repSet, вы должны запустить эту команду:

rs.initiate({_id: "MainRepSet", version: 1, members: [
       { _id: 0, host : "ip1:27017" },
       { _id: 1, host : "ip2:27017" }
       { _id: 2, host : "ip3:27017" }
]})

И я запустил эту команду со следующими hostanmes:

mongod-0.mongodb-service.default.svc.cluster.local;
mongod-1.mongodb-service.default.svc.cluster.local;
mongod-2.mongodb-service.default.svc.cluster.local

Когда я изменил это через мои publicIPs работает нормально.

Спасибо

...