Master Slave

based on v28

Master/Slave構成のセットアップ

master-slaveの構成で、masterデータベースの設定をするには、 master モードと、 slave モードの両方のデータベースインスタンスをスタートさせておく必要があります。

Data Storage

次の例では、コマンドライン上でデータファイルの場所を明確に指定しています。これは、masterとslaveを別のマシンで走らせる場合には必要ありませんが、この設定を一台で試してみたい読者のために、念のため指定しています。

$ bin/mongod --master [--dbpath /data/masterdb/] 

このコマンドで作成されたmasterサーバプロセスは、 local.oplog.$main コレクションを作成します。これは、slave用のオペレーションのキューが入る"トランザクションログ"として使われます。

master-slave構成でslaveデータベースになるデータベースを設定するためには、

$ bin/mongod --slave --source <masterhostname>[:<port>] [--dbpath /data/slavedb/] 

sourceサーバの詳細は、 local.sources コレクションに保存されます。   --source パラメータを指定する代わりに、 masterサーバの情報を保存する local.sources へオブジェクトを追加する方法もあります。

$ bin/mongo <slavehostname>/local 
> db.sources.find(); // コレクションが空のことを確認。そして、
> db.sources.insert( { host: <masterhostname> } ); 
  • host: masterhostname は、masterデータベースのあるマシンのIP addressかFQDNです。 標準のポート以外を使いたい場合には、 :port をサーバホスト名に加えることもできます。
  • only: databasename (optional) これを指定した場合、指定したデータベースだけがレプリケーションされます。注意: バージョン1.2.4より前のバージョンでは only にバグがあります。

slaveは、複数のマスターから情報を持ってくることができます。 このようなケースでは、複数の設定を、 local.sources に入れることができます。 One Slave Two Masters を参照してください。

サーバは、同時に、slaveとmasterになれます。

slaveは、masterとの同期が長いこと失敗した場合や、slaveが切断され、その後、時間が経ってから再開された場合など、masterからの適切なアップデートが存在しない場合に、syncされない状態(out of sync)になることがあります。もしslaveがこの状態になってしまった場合、レプリケーションは中断されます。もし再開したい場合には、デフォルトでは、人が手動で直す必要があります。

{resync:1} コマンドを使って、レプリケーションを再開させます。 または、 --autoresync オプションをコマンドラインで付けると、out of syncの状態だった場合、slaveは自動的に(10秒待った後)、レプリケーションを再開します。 --autoresync オプションが指定されている場合でも、slaveは、10分に一度以上の再試行をしません。

--oplogSize コマンドラインオプションで ( --master と一緒に指定され) 、slaveノードへアップデートするための情報を保存するための、ディスクスペースをメガバイト単位で指定します。 --oplogSize を指定しない場合、64bitマシーンではディスクスペースの5%(ただし1GBは最小限必要)が、32bitマシンでは50MBが使われます。

セキュリティ

セキュリティ機能が有効になっている場合の設定の例。

$ dbshell <slavehostname>/admin -u <existingadminusername> -p<adminpassword> 
> use local 
> db.addUser('repl', <replpassword>); 
^c 
$ dbshell <masterhostname>/admin -u <existingadminusername> -p<adminpassword> 
> use local 
> db.addUser('repl', <replpassword>); 

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.

These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group.

blog comments powered by Disqus