ユーザ用ツール

サイト用ツール


mongodb:cluster

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
mongodb:cluster [2012/12/25 07:09] – [mongos] nullponmongodb:cluster [2015/03/16 09:08] (現在) – [トラブルシューティング] nullpon
行 1: 行 1:
-====== mongoDBクラスタ ======+====== mongoDB cluster ======
  
-※ 下書き +mongoDBはレプリカセットとシャーディング機能をサポートしている。レプリカセットはDBの複製を作成し、自動フェイルオーバーによってサーバが落ちたとき接続先をレプリケーションサーバに切り替えることで可用性を確保できる機能。シャーディングはコレクションを分割して複数のDBに分散して保存することで同時読み込み、書き込み機能を向上させてスケールアウトする機能。
- +
-mongoDBはレプリカセットとシャーディング機能が使える。レプリカセットはDBの複製を作成し、自動フェイルオーバーによってプライマリサーバが落ちても複製に切り替えることで可用性を確保できる機能。シャーディングはコレクションを分割して複数のDBに分散して保存することで同時読み込み、書き込み機能を向上させてスケールアウトする機能。+
  
 ===== シャーディング ===== ===== シャーディング =====
-シャーディングには3種類のサーバが必要以下はローカルでャーディグ環境を試すため設定実運用向けではない+mongod、mongoc、mongosの3種類のサーバプロセスあるこれらのプセスは本来はそれぞれ別のサバマシン上で立ち上げるもであるここでは全てのプロセスをローカルで起動させる
  
 ==== mongod ==== ==== mongod ====
-shardサーバ。portを変えて3ロセスぐらい起動する+データを格納するshardサーバ。 
 + 
 +**shardsvr**オションにtureを指定する。他は通常のmongodと同じように設定する。
 <code> <code>
 port = 27001 port = 27001
行 43: 行 43:
 </code> </code>
  
-shardsvrオプションをセットする。 +起動する
- +
-forkはdeamonモードでの起動(この場合はpidfilepath必須)。logappendは再起動時に以前のログを消さずに続けて書き込むかどうか。restはwebインターフェースを起動するかどうか+
  
 <code> <code>
行 54: 行 52:
  
 ==== mongoc ==== ==== mongoc ====
-正式はconfigサーバと呼ばれるが、mongocと呼ばれることが多い。クラスタ全体の情報を知っているサーバ。テストなので1プロセスしか立ち上げないが、3プロセスでクラスタリングするのが基本。実運用では単一障害点にならないように物理的に分けた3台のサーバで運用する。+正式名称はconfig serverだが、日本のユーザの間ではmongocと呼ばれることが多い。クラスタの情報を管理するサーバで、これが停止するとクラスタ全体が停止してしまう。テストなので1プロセスしか立ち上げないが、実運用では単一障害点にならないように物理的に分けた3台のサーバでプロセスを立ち上げて冗長化する。 
 + 
 +**configsvr**オプションにtrueを指定すると、config serverとして起動される。それ以外はmongodと同じ
  
 <code> <code>
行 67: 行 67:
 </code> </code>
  
-configsvrをセットするとmongocとして起動される+mongodコマンドで起動。
  
 <code> <code>
行 73: 行 73:
 </code> </code>
  
-mongodコマンド起動+==== mongos ==== 
 +mognosルータ。アプリから接続されるプロセスクラスタをアプリから隠蔽する。本番環境ではアプリケーションサーバ上にプロセスを立てて運用されることが多い
  
-==== mongos ==== +**configdb**にmongocのhost、portを指定する(複数台構成の場合はカンマ区切りで)。アプリからの接続先になportmongoDBのデフォルトを指定すい。 
-mognosルータ。アプリが直接接続するプロセスクラスタをアプリから隠蔽す。本番環境ではアプリケーションサーバ上で運用されことい。+
  
-設定ファイルは最低限以下のようにする 
 <code> <code>
 port = 27017 port = 27017
行 85: 行 84:
 logappend = true logappend = true
 fork = true fork = true
-configdb = "127.0.0.1:27020"+configdb = 127.0.0.1:27020 
 +configdb = "127.0.0.1:27020"   mongoDB 2.2ではダブルクオートで囲むとエラーになるので注意
 </code> </code>
  
-アプリからの接続先になるのでportmongoDBのデフォルトを指定するのがベスト。 +起動は **mongos** コマ
- +
-configdbが最も大事なオプションでconfig serverを指定する。複数台構成の場合はカンマ区切りで。+
  
 <code> <code>
 $ mongos --config=/etc/mongos.conf $ mongos --config=/etc/mongos.conf
 </code> </code>
- 
-起動はmongosコマンドで。mongosはmongoc起動後でないとエラーになる。 
  
 ==== シャーディングの設定 ==== ==== シャーディングの設定 ====
-クラタリングの情報はmongocが知っている。まずはmongocにクラスタサーバ情報教えなければならない+各プロセ起動後、クラスタの設定行う
  
-mongosに接続して+mongosでadmin dbに接続して
 <code> <code>
-$ mongo +$ mongo admin
 </code> </code>
  
-mongodをクラスタに追加する+mongodをシャードサーバとしてクラスタに追加する
 <code> <code>
-mongos> use admin; +mongos> db.runCommand({addshard:"127.0.0.1:27001", name:"ShardHogeDB01" , allowLocal:true}); 
-mongos> db.runCommand({addshard:"127.0.0.1:27001", name:"hoge01" , allowLocal:true}); +mongos> db.runCommand({addshard:"127.0.0.1:27002", name:"ShardHogeDB02" , 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:"ShardHogeDB03" , allowLocal:true});
-mongos> db.runCommand({addshard:"127.0.0.1:27003", name:"hoge03" , allowLocal:true});+
 </code> </code>
  
-dbレベルでシャーディングを有効化+dbシャーディングを設定
 <code> <code>
-mongos> db.runCommand({enablesharding:"hogedb"});+mongos> db.runCommand({enablesharding:"hogeDB"});
 </code> </code>
  
 コレクションにシャーディングを設定 コレクションにシャーディングを設定
 <code> <code>
-mongos> db.runCommand({shardcollection:"hogedb.someCollectionName", key:{ _id :1 }});+mongos> db.runCommand({shardcollection:"hogeDB.fugaCollection", key:{ _id :1 }});
 </code> </code>
  
 +シャーディングの設定は以下のコマンドで表示できるが、正直読みにくい
 +<code>
 +mongos> db.printShardingStatus(); 
 +</code>
 +
 +==== トラブルシューティング ====
 +<code>
 +"error creating initial database config information :: caused by :: can't find a shard to put new db on",
 +</code>
 +mongodがクラスタに1つも存在していない。1つ以上のmongodをクラスタに追加する
 +
 +==== flushRouterConfig ====
 +
 +mongosにキャッシュされているクラスタ情報をクリアします
 +
 +<code>
 +db.adminCommand("flushRouterConfig")
 +</code>
mongodb/cluster.1356419360.txt.gz · 最終更新: 2012/12/25 07:09 by nullpon