Доброе утро, я развернул кластер 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 работает нормально.
Спасибо