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