耐障害性と修復

based on v35 (2010/09/25 追従) - オリジナル

シングルサーバでの耐久性

MongoDBのバージョン1.8で、シングルサーバでの耐久性を持つことになります。http://jira.mongodb.org/browse/SERVER-980 で情報を追うことができます。

今のところ(そしておそらく永遠に)、シングルサーバは理由を問わず重大な問題になることがあるので、データをレプリケーションを使いコピーし続けることを推奨します。

repair コマンド

バージョン1.6.0では、repairとreplicaセットにバグがあります。 http://jira.mongodb.org/browse/SERVER-1614 を見てください。これを読まずに、repairコマンドを実行しないでください。 このバグは1.6.0のみです。 1.6.1では修正されています。しばらくの間ワークアラウンドがあります。

マシンがクラッシュした後や、 kipp -9 で停止させた後、 repairDatabase を実行することを考えてください。このコマンドは、すべてのデータが壊れていなかチェックし、壊れているものがあった場合取り除きます。またデータファイルを少し縮小します。

ハードウェアがクラッシュした場合、 repair ( fsck と似ています)を実行することを推奨します。スレーブがクラッシュした場合には、スレーブを最初からやり直すためのオプションがあります。

コマンドラインから:

mongod --repair

シェルから (ローカルを含むすべてのDBに対してする必要があります):

> db.repairDatabase();

repairコマンドの実行中、 mongod は作業中のファイルをディスクに書き出します。デフォルトでは mongod は、dbpathの下に作業用のディレクトリを作成します。代わりに、 --repairpath コマンドラインオプションで一時的なrepairファイルを置くディレクトリを指定できます。

repairは、デーベース全体を調査するため遅い操作であることに注意してください。

データベースが異常終了した後で、restartしようとすると mongod は以下のように表示します。

 
************** 
old lock file: /data/db/mongod.lock. probably means unclean shutdown 
recommend removing file and running --repair 
see: http://dochub.mongodb.org/core/repair for more information 
************* 

そして終了します。 --repair をつけて起動すると、 mongod は正常に起動します。

validate コマンド

もう一つの方法として、リスタートしてから、 validate コマンドを指定したテーブルで実行し、コレクション上のコンテンツが壊れてないか確認することができます。

たとえば、ここで、 users コレクションに対して validate を行ないます。

> db.users.validate(); 
{ 
"ns" : "test.users", 
"result" : " validate 
details: 0x1243dbbdc ofs:740bdc 
firstExtent:0:178b00 ns:test.users 
lastExtent:0:178b00 ns:test.users 
# extents:1 
datasize?:44 nrecords?:1 lastExtentSize:8192 
padding:1 
first extent: 
loc:0:178b00 xnext:null xprev:null 
nsdiag:test.users 
size:8192 firstRecord:0:178bb0 lastRecord:0:178bb0 
1 objects found, nobj:1 
60 bytes data w/headers 
44 bytes data wout/headers 
deletedList: 0000000010000000000 
deleted: n: 1 size: 7956 
nIndexes:2 
test.users.$_id_ keys:1 
test.users.$username_1 keys:1 ", 
"ok" : 1, 
"valid" : true, 
"lastExtentSize" : 8192 
} 

--syncdelay コマンドラインオプション

バージョン1.1.4から、 --syncdelay オプションで、どのくらいの間隔でディスクに書き込むか(デフォルトは60秒)設定することができます。レプリケーションが使われてない場合、この時間を短くするのもいい方法でしょう。

参照


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