programing

MongoDB 복제 세트에서 기본 DB 서버 IP를 아는 방법은 무엇입니까?

bestprogram 2023. 5. 2. 23:01

MongoDB 복제 세트에서 기본 DB 서버 IP를 아는 방법은 무엇입니까?

3개 노드에서 mongodb 복제본 세트를 실행하고 있습니다. ip가 192.168.1.100, 192.168.1.101, 192.168.1.102라고 가정합니다.

현재 복제 세트 192.168.1.100은 기본이고 192.168.1.101과 192.168.1.102는 보조입니다. 쓰기 작업을 위해 192.168.1.100과 연결합니다. 이틀 후 192.168.1.100이 다운되고 mongodb가 192.168.1.101을 기본으로 선택합니다. 내 응용 프로그램이 192.168.1.101을 어떻게 알 수 있는지가 기본입니다.

주 서버가 복제본 세트에서 전환될 때 수동 작업이 필요하지 않도록 mongodb의 부동 IP 개념입니다.

"드라이버"(mongocli 도구 또는 기본 언어 바인딩, exnode-mongo)를 사용하여 복제본 집합의 모든 구성원에 연결할 수 있어야 합니다.연결되면 세트의 다른 멤버에 대해 현재 mongod serve를 요청합니다.

> db.runCommand("ismaster")
{
     "ismaster" : false,
     "secondary" : true,
     "hosts" : [
             "ny1.acme.com",
             "ny2.acme.com",
             "sf1.acme.com"
     ],
     "passives" : [
          "ny3.acme.com",
          "sf3.acme.com"
     ],
     "arbiters" : [
         "sf2.acme.com",
     ]
     "primary" : "ny2.acme.com",
     "ok" : true
}

제가 사용할 때는 기본에 연결하지 않는 것이 중요합니다.OP와 마찬가지로 보조 멤버를 찾는 데 필요한 연결 수를 최소화하고 싶습니다.이 방법은 사용자에게 적합해야 하지만 여기에 있는 설명서가 약간 오래되었을 수 있습니다.

http://docs.mongodb.org/meta-driver/latest/legacy/connect-driver-to-replica-set/

rs.isMaster().primary

만약 당신이 하나의 라이너에 빠져 있다면, 몽고 인스턴스 중 하나에 올라타서 그 악당을 실행하세요.

클라이언트가 복제본 집합의 지정된 구성원("시드")에 연결되면, 클라이언트는 복제본 집합에서 해당 구성원에 대해 복제본 집합을 쿼리합니다.따라서 .100에 연결하면 집합을 쿼리하고 .101과 .102도 집합의 유효한 구성원임을 알 수 있습니다.

드라이버가 .100과의 연결을 잃으면, 드라이버는 발견한 다른 시드를 통과하여 연결을 찾으려고 합니다.그러면 복제본 집합을 쿼리하고 현재 마스터가 누구인지 확인한 후 연결합니다.이 모든 것은 투명하게 일어납니다.

마스터에 로그인하고 다음을 실행하여 이를 테스트할 수 있습니다.

rs.stepDown(60)

이렇게 하면 해당 컴퓨터가 마스터에서 물러나고 새 마스터가 선택됩니다.60초 동안은 재선이 불가능합니다.이를 사용하여 기본 노드가 변경되는 상황에서 앱의 동작을 테스트할 수 있습니다.

복제 세트 연결을 설정할 때 일반적으로 연결할 호스트를 여러 개 지정합니다.이러한 모든 기능은 복제 세트를 매핑하는 데 드라이버가 사용할 시드 역할을 하므로 구성한 단일 호스트가 중단된 상태에서 응용 프로그램을 다시 시작할 경우 단일 장애 지점이 발생하지 않습니다.자세한 내용은 사용 중인 드라이버에 따라 달라집니다. 드라이버 설명서를 확인하십시오.

명령줄을 실행하여 현재 주 서버의 IP를 확인하려면 다음을 수행합니다.

rs.status().members.find(r=>r.state===1).name

응용프로그램의 스택 및 드라이버에 따라 복제본의 모든 호스트를 지정해야 응용프로그램이 쓰기를 위해 기본 호스트를 자동으로 선택할 수 있습니다.

저는 이것이 매우 오래된 게시물이고 게시된 이후로 상황이 바뀌었을 수도 있다는 것을 알고 있습니다.올바른 URI가 그렇게 하지 않습니까?URI에서 모든 노드와 복제본 세트 이름을 지정하면 매번 Primary에 연결되지 않을까요?

https://www.mongodb.com/docs/manual/reference/connection-string/ #std-label-connections-connection-interval

복제본 집합 URI에 대한 readPreference 옵션이 있으며, 표시되지 않으면 기본값으로 설정됩니다.읽기를 위해 기본값으로 설정된 경우...

언급URL : https://stackoverflow.com/questions/16292391/mongodb-how-to-know-primary-db-server-ip-in-a-replica-set