mongodb configパラメータ解説
DESCRIPTION
丸の内MongoDB勉強会 #4で@fetarodcさんが発表した「MongoDB全設定値解説」のスライドです。https://github.com/syokenz/marunouchi-mongodb/tree/master/20121106/fetarodcTRANSCRIPT
1
MongoDB Configパラメータ解説
第4回 丸の内MongoDB勉強会
NRI OpenStandia
渡部 徹太郎、藤崎 祥見
2
• このスライドでは公式マニュアルと丸の内MongoDB勉強会の資料をもとに、MongoDBの設定値を解説します。
• 公式マニュアル:Configuration File Options http://docs.mongodb.org/manual/reference/configuration-options/
• 丸の内MongoDB勉強会#4 MongoDB全設定値解説 詳細な解説と一部パラメータの検証結果があります。このスライドで不明な点があった場合、まずはこちらを参照すると解決するかもしれません。 https://github.com/syokenz/marunouchi-mongodb/tree/master/20121106/fetarodc
• ※以下の環境に依存したオプションは省略させてもらいました。
• Replication Options
• Master/Slave Replication
• Sharding Cluster Options
はじめに
3
丸の内mongodb
丸の内MongoDB勉強会とは
4
• [ログ、情報出力] logpath logappend syslog verbose quiet pidfilepath cpu diaglog profile slowms sysinfo traceExceptions
• [インターフェイス] port bind_ip rest nohttpinterface jsonp ipv6 nounixsocket unixSocketPrefix
• [セキュリティ] auth / noauth keyFile objcheck noscripting
• [その他] dbpath fork repair repairpath upgrade
• [チューニング] maxConns notablescan directoryperdb journal / nojournal journalCommitInterval noprealloc nssize quota quotaFiles smallfiles syncdelay
Configパラメータ一覧
5
重要パラメータ一覧 重要パラメータ
• [ログ、情報出力] logpath logappend syslog verbose quiet pidfilepath cpu diaglog profile slowms sysinfo traceExceptions
• [インターフェイス] port bind_ip rest nohttpinterface jsonp ipv6 nounixsocket unixSocketPrefix
• [セキュリティ] auth / noauth keyFile objcheck noscripting
• [その他] dbpath fork repair repairpath upgrade
• [チューニング] maxConns notablescan directoryperdb journal / nojournal journalCommitInterval noprealloc nssize quota quotaFiles smallfiles syncdelay
6
• mongod(またはmongos)起動時に、コマンドライン引数かconfigファイルで設定する。両方にあった場合、configファイルが優先される。
• コマンドラインの場合
• configファイルの場合
• 一部のパラメータはmongo shellのrunCommandからset,get可能。 logLevel, notablescan, traceExceptions, quiet, syncdelay
$ mongod --dbpath /data/db/ --verbose
dbpath = /data/db/ verbose = true
2) configファイルの読み込み(以下の2つは同じ)
$ mongod --config /etc/mongodb.conf $ mongod -f /etc/mongodb.conf
> use admin > db.runCommand( { setParameter: 1, logLevel: 3 } ) > db.runCommand( { getParameter: 1, logLevel: 1 } )
1) 設定ファイルの作成
パラメータ設定方法
7
パラメータ名 デフォルト値 説明
logpath None ログの出力先。デフォルトでは標準出力に出る。
logappend false ログに追記する。
syslog false ログをsyslogに出す。
verbose false ログに詳細な情報を表示する。-v(--vervose)から-vvvvvまでの5段階がある。設定ファイルだとv=true(vervose=true)からvvvvv=true。
quiet false ログ情報を少なくする。以下のもの以外は出力しない。
・drop,dropindex,diagLogging,validate,cleanのコマンド結果
・レプリケーションの状態
・接続受付、接続解除
pidfilepath None PIDファイルのパス。指定しないとPIDファイルを作らない。
cpu false 4秒おきにcpu使用率をログに出力
diaglog 0 トラブルシューティングで使うバイナリログを出す。出す場所はdbpath。レベルは、0,1,2,3,7がある。mongosniff –source DIAGLOG “diaglogファイル”で読む。
profile 0 プロファイラのレベル。レベルは、0,1,2がある。db.system.profileに保存される。
slowms 100[ms] プロファイラが、クエリをslowと判断する閾値。プロファイラがOFFの場合ログに出力。ONの場合、db.system.profileに出力。
sysinfo false システム情報を出力する。出力されるだけで終了し、DBは起動しないので設定ファイルでtrueにすると悲しいことになる。
traceExceptions false ログにフルスタックトレースを出力する。
パラメータ:ログ、情報出力関連
8
パラメータ名 デフォルト値 説明
port 27017 待ち受けるポート番号
bind_ip All 待ち受けるIPアドレス。
","区切りで複数指定可能。127.0.0.1を指定すればローカルからしかアクセスできなくなる。
rest false restインターフェースを有効にする。
http://localhost:28017/{db_name}/{collection_name}/でGETするとJSONが返ってくる。 検索条件も追加可能。
nohttpinterface false HTTPインターフェースの無効化。 restオプションで上書きされる。
jsonp false HTTPのインターフェースを通してJSONPを許可する。
これをtrueにする前にセキュリティを考えよう。JSONPはクロスドメインでJSONデータをやりとりする仕組み。
ipv6 false trueにするとIPv6を有効にする。
nounixsocket false trueにした場合、Unixソケットを使わない。デフォルトではUnixソケットを使用する。ローカルであればTCPではなくUnixソケットを使用し、パフォーマンスが向上するかも。
unixSocketPrefix /tmp Unixソケットファイルの配置場所。
パラメータ:インターフェイス関連
9
パラメータ名 デフォルト値 説明
maxConns 20000 最大接続数。OSによって制限される(ulimitやファイルディスクリプタ)ので最大値が保証されるわけではない。
notablescan false trueにするとindexが効かないクエリ実行時にエラーを返す。
directoryperdb false データベースごとにデータファイルを作る。
journal (64bit) true
(32bit) false
trueだとジャーナルを確実に永続化し、一貫性を保つ。
一貫性を保証しなくてもよい場合はnojournal=trueとしてジャーナルを無効にする。そのほうがオーバーヘッドがない。ジャーナル書き込みによるディスクへの影響を減らしたい場合は、ジャーナルのレベルを変えて、smallfiles=trueとしジャーナルファイルのデータ量を減らすとよい。
nojournal (64bit) false
(32bit) true
journalの逆。configファイルでjournal=falseとしても” warning: remove or comment out
this line by starting it with „#‟, skipping now : journal = false”とされてskipされるので、64bitシステムでジャーナルを無効にしたい場合にはnojournal=trueとする。
journalCommitInterval 100[ms] ジャーナルを書き込む間隔(msec)。減らすとディスクへの負荷が減る。2~300の間で変更可能。
syncdelay 60[ms] この設定値は、ディスクへの書き込みをflash(保留しているデータを書き込む)の最大時間。この時間内はディスクが壊れるとデータを破損する可能性がある。多くの場合、実際のディスクへの書き込み間隔はもっと小さい。
0に設定するとmongodは即時ディスク書き込みをするが、パフォーマンスは低下する。journalを設定している場合、journalCommitIntervalの時間内であれば、すべての書き込みは保証される。
パラメータ:チューニング関連(1/2)
10
パラメータ名 デフォルト値 説明
noprealloc false データファイルを分割しない。
スタートアップが早くなることがあるが、普通の操作が遅くなることがあるかも。
nssize 16(MB) ネームスペースファイルのデフォルトサイズ。コレクションやインデックスで使用される。多くのコレクションを作る必要がある場合、nssizeを大きくする必要がある。最大値は2GB。設定後に作成されるものだけに影響する。既存のDBに適用したい場合は、db.repairDatabase()コマンドを使う。
quota false データベースファイルごとにデータサイズに制限をかける。
quotaFiles 8 データベールごとにデータベースファイル数を制限する。ファイルは64Mスタートで倍々に容量が増えていく。8個ファイルがあるということはほぼ16G。
(64M + 128M + ・・・ + 8192M = 64 * (2^8 - 1) / (2 - 1) = 16363M ≒ 16G)
smallfiles false データファイルサイズを小さくする。設定すると、
・データファイルの最大サイズは512Mになる
・ジャーナルファイルは1Gから128Mになる
もし、データサイズが小さいならsmallfilesを設定したほうがパフォーマンスが上がる。
パラメータ:チューニング関連(2/2)
11
パラメータ名 デフォルト値 説明
auth false 認証を有効にする。
認証を有効にした後、adminのデータベースにユーザ情報を入れれば、ユーザ認証できる。
noauthが同時に設定されていた場合でもauthが優先され認証が有効になる。
noauth true authの逆
authと同時に設定されていた場合、authが優先され認証が有効になる。 認証はデフォルトで無効にされているので、存在意義が不明な設定項目。いつ使うの?
keyFile None レプリカセットやシャーディングにて、メンバを認証する鍵ファイルを指定する。
鍵はopenSSLのコマンドで作るとよい。
objcheck false ユーザのリクエストをvalidateして、不正なBSONオブジェクトの挿入を防ぐ。
オーバーヘッドがあるためデフォルトはfalse。ちなみに、validateはmongo shellからも実行可能で、db.users.validate()と打つとできる。
noscripting false db.eval()を無効にしてサーバサイドでのjavascriptを許可しない。
パラメータ:セキュリティ関連
12
パラメータ名 デフォルト値 説明
dbpath /data/db/ DBファイルを格納するディレクトリのパス。WindowsのデフォルトはC:¥data¥db¥
fork false バックグラウンドで動かす。
ログが標準出力に出ないので、logpathかsyslogの指定が必須。Windowsにはない。
repair false サーバがクラッシュした時にデータ等をリペアする。
実行するとリペアして終わりなので、その後mongodを別に立ち上げる必要あり。
repairpath dbpath リペアするDBパスを指定。
upgrade false dbpathで指定されたデータファイルのフォーマットを最新版にアップデートする。
古いフォーマットの時にだけ有効。
Note: 勝手にアップデートされてしまうので、普通はこのオプションは使うべきではない。
パラメータ:その他
13
Thank you
Github: https://github.com/syokenz/marunouchi-mongodb
Mail: [email protected], [email protected]
Twitter: @syokenz, @fetarodc