MognoDB の シャードクラスタ に シャードサーバー を追加する 方法

0 件のコメント

今回は「MongoDB の シャードクラスタにシャードサーバーを追加する方法」についてまとめます。

概要

今回はシャードサーバー(レプリカセット) shard2-rs を作成してシャードクラスタに追加する手順について見ていきます。 基本的な手順はシャードクラスタ環境構築と一緒です。 ルーターサーバーの初期設定がないくらいが違いです。

それでは、以下に具体的な手順を記載しているので順に見ていきましょう。

手順

シャードサーバーは「レプリカセット」なので単純にレプリカセットを準備して、それをシャードクラスタへ追加していきます。 今回は shard2-rs というシャードサーバー(レプリカセット)を作成して、シャードクラスタへ追加していきます。

シャードサーバーの準備

  1. 設定ファイルの準備

    シャードサーバーとしてレプリカセットを構成する場合、 sharding.clusterRole: shardsvr を設定します。

    mongod.shard2-1.cfg

    systemLog:
      destination: file
      logAppend: true
      path: C:\work\MongoDB\shard\log\mongod.shard2-1.log
    storage:
      dbPath: C:\work\MongoDB\shard\shard2-1\data
      journal:
        enabled: true
    replication:
      replSetName: "shard2-rs"
    sharding:
      clusterRole: shardsvr
    net:
      bindIpAll: true
      port: 27021
    

    同様に mongod.shard2-2.cfgmongod.shard2-3.cfg を作っておきます。

  2. レプリカセットを起動

    設定ファイルを指定して各サーバーを起動していきます。

    mongod --config "./mongod.shard2-1.cfg"
    

    同様に mongod.shard2-2.cfgmongod.shard2-3.cfg についても起動します。

  3. 任意のサーバーへ接続

    レプリカセットにしたいサーバー群のうちのいずれかへ接続します。

    mongo 127.0.0.1:27011
    
  4. レプリカセットを初期化

    rs.initiate() を利用してレプリカセットを初期化します。

    > rs.initiate({
      _id: "shard2-rs",
      members: [
        { _id: 0, host: "127.0.0.1:27021" },
        { _id: 1, host: "127.0.0.1:27022" },
        { _id: 2, host: "127.0.0.1:27023" },
      ]
    })
    

シャードクラスタにシャードサーバー追加

  1. ルーターサーバーへ接続

    ルーターサーバーとなるmongosサーバーへ接続します。

    mongos 127.0.0.1:8000
    
  2. シャードサーバーを追加

    sh.addShard( [URL] ) コマンドを利用してシャードサーバーを追加します。 指定するURLは "[レプリカセット名]/[サーバー1], [サーバー2], ..." のように指定します。

    mongos > sh.addShard( "shard2-rs/127.0.0.1:27021,127.0.0.1:27022,127.0.0.1:27023" )
    

確認

動作確認は単純にルーターサーバー(mongosサーバー)へ接続して sh.status() で追加したシャードサーバーが増えいていることを確認するだけです。

  1. ルーターサーバーへ接続

    mongo 127.0.0.:8000
    
  2. シャードクラスタの状態を確認

    mongos > sh.status()
    
    --- Sharding Status ---
      sharding version: {
            "_id" : 1,
            "minCompatibleVersion" : 5,
            "currentVersion" : 6,
            "clusterId" : ObjectId("5b2de11015e5c83be5461bc1")
      }
      shards:
            {  "_id" : "shard1-rs",  "host" : "shard1-rs/127.0.0.1:27011,127.0.0.1:27012,127.0.0.1:27013",  "state" : 1 }
            {  "_id" : "shard2-rs",  "host" : "shard2-rs/127.0.0.1:27021,127.0.0.1:27022,127.0.0.1:27023",  "state" : 1 }
      active mongoses:
            "3.6.2" : 1
      autosplit:
            Currently enabled: yes
      balancer:
            Currently enabled:  yes
            Currently running:  no
            Failed balancer rounds in last 5 attempts:  1
            Last reported error:  Could not find host matching read preference { mode: "primary" } for set shard1-rs
            Time of Reported error:  Sat Jul 14 2018 23:04:02 GMT+0900
            Migration Results for the last 24 hours:
                    4 : Success
      databases:
            {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                    config.system.sessions
                            shard key: { "_id" : 1 }
                            unique: false
                            balancing: true
                            chunks:
                                    shard1-rs       1
                            { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1-rs Timestamp(1, 0)
            {  "_id" : "sample",  "primary" : "shard1-rs",  "partitioned" : true }
                    sample.users
                            shard key: { "email" : "hashed" }
                            unique: false
                            balancing: true
                            chunks:
                                    shard1-rs       2
                                    shard2-rs       2
                            { "email" : { "$minKey" : 1 } } -->> { "email" : NumberLong("-4611686018427387902") } on : shard2-rs Timestamp(5, 0)
                            { "email" : NumberLong("-4611686018427387902") } -->> { "email" : NumberLong(0) } on : shard2-rs Timestamp(6, 0)
                            { "email" : NumberLong(0) } -->> { "email" : NumberLong("4611686018427387902") } on : shard1-rs Timestamp(6, 1)
                            { "email" : NumberLong("4611686018427387902") } -->> { "email" : { "$maxKey" : 1 } } on : shard1-rs Timestamp(4, 0)
    

今回は「MongoDB の シャードクラスタにシャードサーバーを追加する方法」についてまとめました。 ポイントは以下の通りです。

  • 基本的にはシャードクラスタ環境構築に同じ手順
  • シャードサーバーの追加は sh.addShard()

参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

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