Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

レプリカセット タグセットの構成

項目一覧

  • 読み込み設定(read preference)でタグセットを使用する
  • カスタムマルチデータセンター書込み保証 (write concern)

レプリカセット ノードは、 tagsを使用して構成できます。

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

読み取り操作では、 読み込み設定 ( read preference ) でタグセットを指定して、特定のタグを持つノードに読み取り操作を指示できます。

書込み (write) 操作では、 タグを使用してカスタムの書込み保証 ( write concern) を作成できます。

レプリカセット メンバーがtagsに関連付けられている場合は、それらのメンバーをターゲットにするために読み込み設定( read preference )でタグセットを指定できます。 タグセットはドキュメントの配列であり、各ドキュメントにはタグと値のペアが含まれています。 一致が見つかるまで、指定は順番に試行されます。 見つかると、その仕様を使用して一致するすべてのノードを検索します。

注意

たとえば、レプリカセット には次のレプリカセット構成があります(簡潔にするために一部のフィールドは省略されています)。

{
"_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. 読み込み設定(read preference)でタグセットを指定します。

    特定のタグでタグ付けされたセカンダリに読み取り操作を指示するには、レプリカセットに接続されたmongo shell で、 readPref()メソッドを使用して 読み込み設定( read preference )とタグセットを指定します。 たとえば、

    • "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" } ] )

    Tip

    以下も参照してください。

レプリカセット メンバーがtagsに関連付けられている場合は、レプリカセットのsettings.getLastErrorModes設定を構成してカスタムの書込み保証 (write concern) を作成できます。

以下の 2 つのデータセンターにノードを含む 5 つのノードからなるレプリカセットがあるとします。

  1. VAdc_vaとタグ付けした施設

  2. CAdc_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. カスタム書込み保証 (write concern) を作成します。

    レプリカセット構成で、 settings.getLastErrorModes設定でカスタム書込み保証を定義します。 たとえば、次の は、異なるdc_vaタグ値を持つ 2 つのノードと、任意のdc_caタグ値を持つ 1 つのノードに書き込みを伝播することを要求するカスタム書込み保証MultipleDCを定義します。

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

    注意

    同じ"dc_va"タグを持つ 2 つのノードに書込みが伝播される場合、 MultipleDC書込み保証は満たされません。 たとえば、書込み (write) がmembers[0]members[4]にのみ伝達された場合、タグの値は同じ"rack1"であるため、 "dc_va": 2は満たされません。

  3. カスタム書込み保証 (write concern) を使用します。

    カスタム書込み保証を使用するには、次のように書込み保証内のwオプションに書込み保証名を渡します。

    db.collection.insertOne(
    { id: "xyz", status: "A" },
    { writeConcern: { w: "MultipleDC" } }
    )

戻る

タグセット