문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

복제본 세트 태그 세트 구성

이 페이지의 내용

  • 읽기 설정에서 태그 세트 사용
  • 사용자 지정 멀티데이터센터 쓰기 고려

복제본 세트 멤버는 tags을(를) 구성할 수 있습니다.

{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }

읽기 작업의 경우 읽기 설정에 태그 세트를 지정하여 특정 태그가 있는 멤버에게 읽기 작업을 지시할 수 있습니다.

쓰기 작업의 경우 태그를 지정하여 사용자 지정 쓰기 고려를 생성할 수 있습니다.

복제본 세트 멤버가 tags와(과) 연결된 경우 읽기 설정에서 해당 멤버를 대상으로 하는 태그 세트를지정할 수 있습니다. 태그 세트는 문서의 배열로 각 문서에는 태그와 값 쌍이 포함되어 있습니다. 일치하는 항목이 발견될 때까지 사양이 순서대로 시도됩니다. 일단 발견되면 해당 사양을 사용하여 모든 적격 일치 멤버를 찾습니다.

참고

읽기 설정 모드 primary을(를) 지정할 때 태그 세트를 지정할 수 없습니다.

예를 들어 복제본 세트에는 다음과 같은 복제본 세트 구성이 있습니다. 간결성을 위해 일부 필드는 생략되었습니다.

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{ "_id" : 0, "host" : "mongodb0.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 1, "host" : "mongodb1.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 2, "host" : "mongodb2.example.net:27017", ..., "tags": { }, ... }
],
"settings" : {
...
}
}
  1. 멤버에 태그를 추가합니다.

    mongosh 를 복제본 세트에 연결하고 rs.reconfig() 를 사용하여 멤버에 태그를 추가합니다.

    conf = rs.conf();
    conf.members[0].tags = { "dc": "east", "usage": "production" };
    conf.members[1].tags = { "dc": "east", "usage": "reporting" };
    conf.members[2].tags = { "dc": "west", "usage": "production" };
    rs.reconfig(conf);
  2. 복제본 세트 구성을 확인합니다.

    rs.conf()을(를) 실행하여 복제본 세트 구성을 확인합니다. 간결성을 위해 일부 필드는 생략되었습니다. rs.conf()은(는) 다음과 유사한 문서를 반환합니다.

    {
    "_id" : "rs0",
    "version" : 2,
    "protocolVersion" : NumberLong(1),
    "writeConcernMajorityJournalDefault" : true,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongodb0.example.net:27017",
    ...
    "tags" : {
    "dc": "east",
    "usage": "production"
    },
    ...
    },
    {
    "_id" : 1,
    "host" : "mongodb1.example.net:27017",
    ...
    "tags" : {
    "dc": "east",
    "usage": "reporting"
    },
    ...
    },
    {
    "_id" : 2,
    "host" : "mongodb2.example.net:27017",
    ...
    "tags" : {
    "dc": "west",
    "usage": "production"
    },
    ...
    }
    ],
    "settings" : {
    ...
    }
    }
  3. 읽기 설정에서 태그 세트를 지정합니다.

    특정 태그로 태그가 지정된 세컨더리에 읽기 작업을 지시하려면 복제본 세트에 연결된 mongo 셸에서 readPref() 메서드를 사용하여 읽기 설정 모드태그 세트를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    • "dc": "east""usage": "production" 태그가 모두 지정된 세컨더리에 읽기 작업을 지시하려면 다음 태그 세트를 포함하세요.

      db.collection.find({}).readPref( "secondary", [ { "dc": "east", "usage": "production" } ] )
    • "dc": "east" 태그가 지정된 세컨더리에 읽기 작업을 지시하고 찾을 수 없는 경우 "usage": "production" 태그가 지정된 세컨더리에 전달하려면 다음 태그 세트를 포함하세요.

      db.collection.find({}).readPref( "secondary", [ { "dc": "east"}, { "usage": "production" } ] )

    다음도 참조하세요.

복제본 세트 멤버가 tags 에 연결된 경우 복제본 세트의 settings.getLastErrorModes 설정을 구성하여 사용자 지정 쓰기 고려를 생성할 수 있습니다.

두 개의 데이터 센터에 멤버가 포함된 5개의 멤버 복제본 세트가 있다고 가정하면 다음과 같습니다.

  1. dc_va태그가 지정된 시설 VA

  2. dc_ca태그가 지정된 시설 CA

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{ "_id" : 0, "host" : "mongodb0.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 1, "host" : "mongodb1.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 2, "host" : "mongodb2.example.net:27017", ..., "tags": { }, ... }
{ "_id" : 3, "host" : "mongodb3.example.net:27017", ..., "tags": { }, ... }
{ "_id" : 4, "host" : "mongodb4.example.net:27017", ..., "tags": { }, ... }
],
"settings" : {
...
}
}
  1. 복제본 세트 멤버에 태그를 추가합니다.

    mongosh 를 복제본 세트에 연결하고 rs.reconfig() 를 사용하여 멤버에 태그를 추가합니다.

    conf = rs.conf();
    conf.members[0].tags = { "dc_va": "rack1"};
    conf.members[1].tags = { "dc_va": "rack2"};
    conf.members[2].tags = { "dc_ca": "rack1"};
    conf.members[3].tags = { "dc_ca": "rack2"};
    conf.members[4].tags = { "dc_va": "rack1"};
    rs.reconfig(conf);
  2. 사용자 지정 쓰기 고려를 생성합니다.

    복제본 세트 구성에서 settings.getLastErrorModes 설정에서 사용자 지정 쓰기 고려를 정의합니다. 예를 들어 다음은 서로 다른 dc_va 태그 값을 가진 두 멤버와 dc_ca 태그 값을 가진 한 멤버에 쓰기를 전파해야 하는 사용자 지정 쓰기 고려 MultipleDC을(를) 정의합니다.

    conf = rs.conf();
    conf.settings = { getLastErrorModes: { MultipleDC : { "dc_va": 2, "dc_ca": 1 } } };
    rs.reconfig(conf);

    참고

    쓰기가 동일한 "dc_va" 태그를 가진 두 멤버에게 전파되는 경우 MultipleDC 쓰기 고려가 충족되지 않습니다. 예를 들어 쓰기가 members[0]members[4](으)로만 전파된 경우 "dc_va": 2은(는) 동일한 태그 값 "rack1"을(를) 가지므로 충족되지 않습니다.

  3. 사용자 지정 쓰기 고려를 사용합니다.

    사용자 지정 쓰기 고려를 사용하려면 쓰기 고려 이름을 쓰기 고려의 w 옵션에 전달합니다.

    db.collection.insertOne(
    { id: "xyz", status: "A" },
    { writeConcern: { w: "MultipleDC" } }
    )
← 복제본 세트의 구성원 동기화