2017-12-27 33 views
0

docker로 MongoDB 복제본 세트를 설정하고 싶습니다. 설치가 잘된 것 같지만 Java 응용 프로그램으로 클러스터에 연결할 수 없습니다. 저는 Windows 10에서 Docker 버전 17.06.0-ce를 VirtualBox와 함께 드라이버로 실행하고 있습니다. MongoDB에 연결하십시오. Docker에서 Java로 실행되는 복제 세트 (Windows)

나는이 튜토리얼에서 지시 사항을 준수 :

$ docker run --name mongo1 -d --net mongo-cluster -p 9042:27017 mongo:3.6.0 mongod --replSet my-mongo-set 
$ docker run --name mongo2 -d --net mongo-cluster -p 9142:27017 mongo:3.6.0 mongod --replSet my-mongo-set 
$ docker run --name mongo3 -d --net mongo-cluster -p 9242:27017 mongo:3.6.0 mongod --replSet my-mongo-set 

을 그럼 난에 연결 : 그래서 내가 먼저 고정 표시기의 내 - 몽고 클러스터 네트워크를 생성하고 다음 명령을 3 개 컨테이너를 실행

http://www.sohamkamani.com/blog/2016/06/30/docker-mongo-replica-set/ mongo1 컨테이너를 만들고 다음 설정을 사용하여 복제 세트를 설정하십시오.

config = {"_id" : "my-mongo-set", "members" : [{"_id" : 0,"host" : "mongo1:27017"},{"_id" : 1,"host" : "mongo2:27017"},{"_id" : 2,"host" : "mongo3:27017"}]} 
rs.initiate(config) 

이것은 잘 작동하는 것 같습니다. mongo1 컨테이너 로그에서 알 수 있듯이 모든 컨테이너는 서로 연결되어 있습니다.

이제 Java App에서 복제 세트에 연결하려고합니다. mongodb-driver 버전 3.6.0을 사용하고 있습니다. 이것은 내가 복제에 연결하는 데 사용하고 코드는 고정 표시기에서 실행 설정됩니다

List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>(); 
serverAddresses.add(new ServerAddress(InetAddress.getByName("192.168.99.100"), 9042)); 
serverAddresses.add(new ServerAddress(InetAddress.getByName("192.168.99.100"), 9142)); 
serverAddresses.add(new ServerAddress(InetAddress.getByName("192.168.99.100"), 9242)); 

MongoClient client = new MongoClient(serverAddresses); 

을 그리고 이것은 로그 출력 (27,017 또한 mongo1 나타납니다 끝에 MongoSocketException : 27017 및 mongo2)입니다 :

Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Cluster created with settings {hosts=[192.168.99.100:9042, 192.168.99.100:9142, 192.168.99.100:9242], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server 192.168.99.100:9042 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server 192.168.99.100:9142 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server 192.168.99.100:9242 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Cluster description not yet available. Waiting for 30000 ms before timing out 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Opened connection [connectionId{localValue:2, serverValue:5}] to 192.168.99.100:9142 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Opened connection [connectionId{localValue:1, serverValue:14}] to 192.168.99.100:9042 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Opened connection [connectionId{localValue:3, serverValue:5}] to 192.168.99.100:9242 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Monitor thread successfully connected to server with description ServerDescription{address=192.168.99.100:9242, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=5002651, setName='my-mongo-set', canonicalAddress=mongo3:27017, hosts=[mongo3:27017, mongo2:27017, mongo1:27017], passives=[], arbiters=[], primary='mongo1:27017', tagSet=TagSet{[]}, electionId=null, setVersion=1, lastWriteDate=Wed Dec 27 21:36:00 CET 2017, lastUpdateTimeNanos=440549516217673} 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Monitor thread successfully connected to server with description ServerDescription{address=192.168.99.100:9142, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=5542139, setName='my-mongo-set', canonicalAddress=mongo2:27017, hosts=[mongo3:27017, mongo2:27017, mongo1:27017], passives=[], arbiters=[], primary='mongo1:27017', tagSet=TagSet{[]}, electionId=null, setVersion=1, lastWriteDate=Wed Dec 27 21:36:00 CET 2017, lastUpdateTimeNanos=440549516254709} 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Monitor thread successfully connected to server with description ServerDescription{address=192.168.99.100:9042, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=4113767, setName='my-mongo-set', canonicalAddress=mongo1:27017, hosts=[mongo3:27017, mongo2:27017, mongo1:27017], passives=[], arbiters=[], primary='mongo1:27017', tagSet=TagSet{[]}, electionId=7fffffff0000000000000001, setVersion=1, lastWriteDate=Wed Dec 27 21:36:00 CET 2017, lastUpdateTimeNanos=440549515190458} 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Discovered cluster type of REPLICA_SET 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server mongo3:27017 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server mongo2:27017 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Adding discovered server mongo1:27017 to client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Canonical address mongo2:27017 does not match server address. Removing 192.168.99.100:9142 from client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Server 192.168.99.100:9242 is no longer a member of the replica set. Removing from client view of cluster. 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Server 192.168.99.100:9042 is no longer a member of the replica set. Removing from client view of cluster. 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Canonical address mongo1:27017 does not match server address. Removing 192.168.99.100:9042 from client view of cluster 
Dez 27, 2017 9:36:07 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: No server chosen by [email protected] from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=192.168.99.100:9242, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=mongo3:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=mongo2:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=mongo1:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=192.168.99.100:9042, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out 
Dez 27, 2017 9:36:09 PM com.mongodb.diagnostics.logging.JULLogger log 
INFORMATION: Exception in monitor thread while connecting to server mongo3:27017 
com.mongodb.MongoSocketException: mongo3 
at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188) 
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59) 
at com.mongodb.connection.SocketStream.open(SocketStream.java:57) 
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) 
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.net.UnknownHostException: mongo3 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) 
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) 
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) 
at java.net.InetAddress.getAllByName(InetAddress.java:1192) 
at java.net.InetAddress.getAllByName(InetAddress.java:1126) 
at java.net.InetAddress.getByName(InetAddress.java:1076) 
at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:186) 
... 5 more 
+0

하지 쉽게 사용하는 것입니다

이 솔루션은 (:/윈도우/SYSTEM32/드라이버/etc/hosts 파일 C에있는 Windows의) 호스트 파일에 호스트 이름을 추가했다 도커 - 간단한 네트워크에서 3 개의 복제본을 실행하도록 작성 하시겠습니까? 또한 확실히 모르겠지만, 설정 json에서 호스트는 9042 ... 포트를 가리켜서는 안됩니다? – PekosoG

답변

0

마지막으로 나는이 글을 읽는하여 해결책을 발견 :

https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#clients-use-the-hostnames-listed-in-the-replica-set-config-not-the-seed-list

마지막 문장이 중요하다 이 "결론적으로, 복제 세트의 주요 기능을 지원하기 위해, 우리는 호스트 이름이에서 사용하도록 요구 복제 세트 구성은 클라이언트에서 도달 할 수 있습니다. "

이렇게하면 구성의 호스트 이름을 외부에서 보거나 액세스 할 수 있어야합니다. 그러나 Windows에서 Docker를 VirtualBox로 실행하고 있으므로 MongoClient는 내 VM의 IP 만 볼 수 있으며 mongo1, mongo2, mongo3 (각각 컨테이너의 내부 IP)를 처리 할 수 ​​없습니다.

192.168.99.100 mongo1 192.168.99.100 mongo2 192.168.99.100 mongo3

0

문제는 복제 세트 노드 포트 9x42에서 밖에 볼 수 있습니다하지만, 그 노드 내부 (구성) 주소 27017. 있다는 것입니다 모두 당신이 --port 매개 변수를 제공해야합니다 당신이 mongod를 시작할 때 same.So을해야하는 컨테이너 외부에서 사용되는 것과 동일한 포트 번호.

+0

감사합니다. 나는 아직도 그것을 얻을 수 없다. 나는 컨테이너를 시작하려고 시도했다 : 'docker run --name mongo1 ... -p 27017 : 27017 mongo mongod --replSet my-mongo -set --port 27017'과' 'docker run --name mongo2 ... -p 27018 : 27018 mongo mongod --replSet my-mongo -set --port 27018' 그리고 포트 27019를 사용하는 세 번째 포트. 또한 mongo1 : 27017, mongo2 : 27018 및 mongo3 : 27019로 설정을 변경하고 Java- app이 3 개의 포트를 사용하여 서버 주소를 구축하고 있습니다.하지만 여전히 같은 예외 ... "정규 주소 mongo2 : 27018이 서버 주소와 일치하지 않습니다. 클러스터의 클라이언트보기에서 192.168.99.100:27018 제거" – Mia

+0

모든 노드에서/etc/hosts 파일에 행을 추가해야합니다. 'mongo2'와 같은 노드 이름은 그 IP 주소로 해석됩니다. 오류 메시지에서 알 수 있듯이 mongo2가 해결하지 못한다는 메시지가 나타납니다. 192.168.99.102 – JJussi

+0

이미 해결책을 찾았으며 혼자 질문에 답했습니다. 도와 줘서 고마워. :) – Mia