programing

MongoDB 쉘에서 복제 세트에 연결하려면 어떻게 해야 합니까?

bestprogram 2023. 2. 26. 16:23

MongoDB 쉘에서 복제 세트에 연결하려면 어떻게 해야 합니까?

mongodb에 접속하는 어플리케이션을 쓰고 있는 경우는, 레플리카 세트의 시드 리스트를 제공할 수 있습니다.드라이버는 마스터 노드로 이동하여 write 명령을 실행할 수 있습니다.

해야 하나요?mongo복제 세트에 연결하기 위해 셸을 사용합니다.

하려면 프라이머리 셸을 합니다.--host★★★★

mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3],etc

예를 들어 다음과 같습니다.

$ mongo --host rs1/john.local:27019,john.local:27018
MongoDB shell version: v3.4.9
connecting to: mongodb://john.local:27019,john.local:27018/?replicaSet=rs1
2017-10-12T14:13:03.094+0000 I NETWORK  [thread1] Starting new replica set monitor for rs1/john.local:27019,john.local:27018
2017-10-12T14:13:03.096+0000 I NETWORK  [thread1] Successfully connected to john.local:27019 (1 connections now open to john.local:27019 with a 5 second timeout)
2017-10-12T14:13:03.096+0000 I NETWORK  [thread1] Successfully connected to john.local:27018 (1 connections now open to john.local:27018 with a 5 second timeout)
rs1:PRIMARY> db
test
rs1:PRIMARY>

주의: 버전 3.4.2에서 3.4.10까지는 --host 또는 --port를 사용할 때 이후 db를 지정할 수 없는 오류(SERVER-28072)가 있었습니다.

위의 답변은 Mongo 3.2용입니다.

Mongo 3.4 문서에 따르면 셸이 약간 변경되었습니다.

3.으로.2회:
mongo --host host1,host2,host3/myRS myDB
그 중에서도,
mongo --host host1:27017,host2:27017,host3:27017/myRS myDB

3으로.4분:
mongo "mongodb://host1,host2,host3/myDB?replicaSet=myRS"
그 중에서도,
mongo "mongodb://host1:27017,host2:27017,host3:27017/myDB?replicaSet=myRS"

--host를 사용하여 복제 세트에 있는 호스트 중 하나를 지정하고 복제 세트의 이름을 접두사로 지정하기만 하면 됩니다.

예를 들어 다음과 같습니다.

mongo --host my_mongo_server1

my_mongo_server1에 접속합니다.또 다른 secondary 노드일 수도 있습니다.

단,

mongo --host my_repl_set_name/my_mongo_server1

my_mongo_server1이 아니더라도 복제 세트의 PRIMAY 노드에 항상 연결됩니다.

왜요? 정답은 '리플리카 세트 모니터'입니다.위의 예에서 mongo 쉘은 지정된 노드에 접속하여 복제 세트의 새로운 복제 세트모니터를 시작하고 지정된 노드를 사용하여 시드합니다.여기서부터 모니터는 복제 세트의 모든 노드를 파악하여 연결을 Primary 노드로 전환합니다.

도움이 됐으면 좋겠네요

"name/seed1,seed2,..." 형식을 사용할 수 있습니다.

> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")

이것에 의해, 현재 프라이머리인 노드에의 접속이 가능하게 되어, 페일오버가 정상적으로 처리됩니다.하나 이상의 씨앗을 지정하면 나머지는 찾을 수 있습니다.

(AFAIK) 셸에서는 레플리카 세트 접속이 있는 secondary에 읽기를 라우팅 할 수 없습니다.

내가 아는 한 mongo 명령줄 클라이언트는 마스터노드로 전송하기 위한 시드를 받아들이지 않습니다.이는 전송이 아닌 세컨더리 노드에서 실제로 조작하는 경우가 많기 때문입니다.

내의 할 수 .rs.config() ★★★★★★★★★★★★★★★★★」db.isMaster()이 정보를 사용하여 프라이머리 노드에 재접속할 수 있습니다.셸에 , 「」를 할 수 경우가 .mongo --eval "db.isMaster()['primary']"마스터에 자동으로 연결합니다.

셸에서는 먼저 다음을 사용할 수 있습니다.

mongo --nodb

mongo 복제 세트에 연결하지 않고 mongo 세션을 열다

그럼 크리스티나가 말한대로, 그럼 넌 이 약을

conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")

복제 세트에 연결합니다.

아니면 결국엔

conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")

js 파일 및

mongo --nodb yourcode.js

를 사용할 수 있습니다.--hostparam : replSet 이름과 시드 목록을 지정합니다.mongo는, 현재의 프라이머리 호스트에 자동적으로 접속됩니다.

예:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]

이 2개의 bash 에일리어스는 Chris Hald의 답변을 바탕으로 마스터에 접속할 수 있습니다(db1.test.test는 레플리카 세트의 멤버 중 하나, acme는 데이터베이스 이름, mreppy는 내 계정 등).db1이 다운되어 있으면 당연히 실패합니다만, 아직 편리합니다.

alias whichprimary='mongo db1.test.test/acme --username mreppy --password testtest --quiet --eval "db.isMaster()['"'primary'"']"' 
alias connectprimary='mongo -u mreppy -p testtest `whichprimary`/acme'

평가판 에일리어스의 따옴표는 어려운데, 단일 따옴표 문자열 내에서 단일 따옴표를 이스케이프하는 방법을 사용했습니까?도움말:-)

v3.4를 사용하고 있습니다.몽고드비도 처음이라..."man mongo" 도움말 정보에서는 "--host replicaSet/host:port,host:port" URL을 사용할 것을 제안하지만, 나에게는 작동하지 않습니다.단, 다음과 같이 공식 문서에 따라 replicaSet에 연결할 수 있습니다.

$ mongo "mongodb://c1m,c2m,c3m/?replicaSet=rs0"
MongoDB shell version v3.4.1
connecting to: mongodb://c1m,c2m,c3m/?replicaSet=rs0
2017-02-08T14:46:43.818+0800 I NETWORK  [main] Starting new replica set monitor for rs0/c1m:27017,c2m:27017,c3m:27017
MongoDB server version: 3.4.1
Server has startup warnings:
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten]
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten]
rs0:PRIMARY>

그래서 mongo의 man page는 오래된 것 같습니다(CentOS 7.3을 사용하고 있습니다).

mongodb://< dbuser >:< dbpassword >@example.com:< port >,example2.com:< port >/< dbname >?replicaSet=setname

언급URL : https://stackoverflow.com/questions/13912765/how-do-you-connect-to-a-replicaset-from-a-mongodb-shell