文書の過去の版を表示しています。
mongoDBクラスタ
※ 下書き
mongoDBではレプリカセットとシャーディング機能が使える。レプリカセットはDBの複製を作成し、自動フェイルオーバーによってプライマリサーバが落ちても複製に切り替えることで可用性を確保できる機能。シャーディングはコレクションを分割して複数のDBに分散して保存することで同時読み込み、書き込み機能を向上させてスケールアウトする機能。
シャーディング
シャーディングには3種類のサーバが必要。以下はローカルでシャーディング環境を試すための設定。実運用向けではない。
mongod
shardサーバ。portを変えて3プロセスぐらい起動する
port = 27001 logpath = /var/log/mongod_1.log pidfilepath = /command/var/run/mongod_1.pid logappend = true fork = true dbpath = /var/data/mongod_1 rest = true shardsvr = true
port = 27002 logpath = /var/log/mongod_2.log pidfilepath = /command/var/run/mongod_2.pid logappend = true fork = true dbpath = /var/data/mongod_2 rest = true shardsvr = true
port = 27003 logpath = /var/log/mongod_3.log pidfilepath = /command/var/run/mongod_3.pid logappend = true fork = true dbpath = /var/data/mongod_3 rest = true shardsvr = true
shardsvrオプションをセットする。
forkはdeamonモードでの起動(この場合はpidfilepath必須)。logappendは再起動時に以前のログを消さずに続けて書き込むかどうか。restはwebインターフェースを起動するかどうか
$ mongod --config=/etc/mongod_1.conf $ mongod --config=/etc/mongod_2.conf $ mongod --config=/etc/mongod_3.conf
mongoc
正式にはconfigサーバと呼ばれるが、mongocと呼ばれることが多い。クラスタ全体の情報を知っているサーバ。テストなので1プロセスしか立ち上げないが、3プロセスでクラスタリングするのが基本。実運用では単一障害点にならないように物理的に分けた3台のサーバで運用する。
port = 27020 logpath = /var/log/mongoc.log pidfilepath = /var/run/mongoc.pid logappend = true fork = true dbpath = /var/data/mongoc rest = true configsvr = true
configsvrをセットするとmongocとして起動される。
$ mongod --config=/etc/mongoc.conf
mongodコマンドで起動。
mongos
mognosルータ。アプリが直接接続するプロセス。クラスタをアプリから隠蔽する。
設定ファイルは最低限以下のようにする
port = 27017 logpath = /var/log/mongos.log pidfilepath = /var/run/mongos.pid logappend = true fork = true configdb = "127.0.0.1:27020"
アプリからの接続先になるのでportはmongoDBのデフォルトを指定するのがベスト。
configdbが最も大事なオプションでconfig serverを指定する。複数台構成の場合はカンマ区切りで。
$ mongos --config=/etc/mongos.conf
起動はmongosコマンドで。mongosはmongoc起動後でないとエラーになる。
シャーディングの設定
クラスタリングの情報はmongocが知っている。まずはmongocにクラスタサーバの情報を教えなければならない。
mongosに接続して
$ mongo
mongodをクラスタに追加する
mongos> use admin; mongos> db.runCommand({addshard:"127.0.0.1:27001", name:"hoge01" , allowLocal:true}); mongos> db.runCommand({addshard:"127.0.0.1:27002", name:"hoge02" , allowLocal:true}); mongos> db.runCommand({addshard:"127.0.0.1:27003", name:"hoge03" , allowLocal:true});
dbレベルでシャーディングを有効化
mongos> db.runCommand({enablesharding:"hogedb"});
コレクションにシャーディングを設定
mongos> db.runCommand({shardcollection:"hogedb.someCollectionName", key:{ _id :1 }});