MongoDB の レプリカセットメンバー設定 の 初期化 および 変更する

0 件のコメント

今回は「MongoDB の レプリカセットメンバー設定」について 「設定を初期化/変更する方法」 と 「変更できる内容」 まとめます。

レプリカセット設定を初期化する

レプリカセット構築時に行う初期化処理は mongo シェルで任意のメンバーに接続したのち、 rs.initiate() で初期化を行います。

  1. 任意のMongoDBレプリカセットメンバーへ接続

    mongo --host 127.0.0.1:8001
    
  2. 初期設定オブジェクトを作成

    > config = {
       _id : "rs0",
       members: [
          { _id: 0, host: "172.0.0.1:27001" },
          { _id: 1, host: "172.0.0.1:27002" },
          { _id: 2, host: "172.0.0.1:27003", arbiterOnly; true },
       ]
    }
    
  3. レプリカセットを初期化

    > rs.initiate(config)
    

レプリカセット設定を変更する

設定変更の手順は基本的に以下の4ステップで行います。 以下では「優先度」を変更する方法をサンプルに手順を載せています。 いずれも mongoシェル 上で実施します。

設定変更を行うと、プライマリサーバーは降格して、クライアントからの接続が切断されます。 この処理に10~20秒かかるので、設定変更はメンテナンス期間に実施するようにします。

  1. 任意のMongoDBレプリカセットメンバーへ接続

    mongo --host 127.0.0.1:8001
    
  2. 現在の設定を取得

    > config = rs.config()
    
  3. 設定を変更

    > config.members[0].priority = 1
    > config.members[1].priority = 2
    > config.members[2].priority = 2
    
  4. 変更した設定を適用

    > rs.reconfig(config)
    

主なレプリカセット設定例

レプリカセットメンバーの設定には以下のような項目があります。

config = {
  ...
  members: [
    {
      _id: <int>,
      host: <string>,
      arbiterOnly: <boolean>,
      buildIndexes: <boolean>,
      hidden: <boolean>,
      priority: <number>,
      tags: <document>,
      slaveDelay: <int>,
      votes: <number>
    },
    ...
  ]
  ...
}

以下ではよくある設定パターンを例に取り上げます。

プライマリにならないようにする

優先度(Priority)を 0 に設定することで、フェイルオーバー時にプライマリサーバーにならなくなります。 設定例は以下のようになります。

> config = rs.config()
> config.members[2].priority = 0
> rs.reconfig(config)

隠しメンバーにする

優先度(Priority)を 0 、隠し(hidden)を true に設定します。

> config = rs.config()
> config.members[2].priority = 0
> config.members[2].hidden = true
> rs.reconfig(config)

遅延メンバーにする

優先度(Priority)を 0 、隠し(hidden)を true 、遅延時間(slaveDelay)に 遅延させたい時間(秒) を設定します。 以下のサンプルでは1時間遅延させて反映するような遅延メンバー設定になっています。

遅延メンバーを利用する場合、遅延時間が長くなればなるほど oplog サイズが大きくなるので、oplog サイズが十分大きなサイズに設定されるよう注意が必要です。

> config = rs.config()
> config.members[2].priority = 0
> config.members[2].hidden = true
> config.members[2].slaveDelay = 3600
> rs.reconfig(config)

投票権のないメンバーにする

投票権(votes)のないメンバーは読み取り専用サーバーで、プライマリになれないサーバーです。

そのため、投票権(votes)が 0 のメンバーは必ず優先度(priority)も 0 にします。 逆に、優先度(priority)が 1以上 のメンバーは必ず投票権(votes)に 1 を設定します。 投票権は1つのレプリカセットで7つまでで奇数表となるよう設定する必要があるので投票権の設定時には制約が満たされていることを確認するよう注意します。

> config = rs.config()
> config.members[2].priority = 0
> config.members[2].votes = 0
> rs.reconfig(config)

アービターにする

アービターサーバーは投票権だけあるサーバーです。 優先度(Priority)は 1 、アービター(arbiterOnly)を true に設定します。 以下は通常のセカンダリ(優先度が1以上で投票権がある状態)に対する設定を前提に記載しています。

> config = rs.config()
> config.members[2].arbiterOnly = true
> rs.reconfig(config)

今回は「MongoDB の レプリカセットメンバー設定」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!