mongodb configパラメータ解説

13
1 MongoDB Configパラメータ解説 4丸の内MongoDB勉強会 NRI OpenStandia 渡部 徹太郎、藤崎 祥見

Upload: shoken-fujisaki

Post on 28-May-2015

8.658 views

Category:

Technology


9 download

DESCRIPTION

丸の内MongoDB勉強会 #4で@fetarodcさんが発表した「MongoDB全設定値解説」のスライドです。https://github.com/syokenz/marunouchi-mongodb/tree/master/20121106/fetarodc

TRANSCRIPT

Page 1: MongoDB Configパラメータ解説

1

MongoDB Configパラメータ解説

第4回 丸の内MongoDB勉強会

NRI OpenStandia

渡部 徹太郎、藤崎 祥見

Page 2: MongoDB Configパラメータ解説

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

はじめに

Page 3: MongoDB Configパラメータ解説

3

丸の内mongodb

丸の内MongoDB勉強会とは

Page 4: MongoDB Configパラメータ解説

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パラメータ一覧

Page 5: MongoDB 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

Page 6: MongoDB Configパラメータ解説

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) 設定ファイルの作成

パラメータ設定方法

Page 7: MongoDB Configパラメータ解説

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 ログにフルスタックトレースを出力する。

パラメータ:ログ、情報出力関連

Page 8: MongoDB Configパラメータ解説

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ソケットファイルの配置場所。

パラメータ:インターフェイス関連

Page 9: MongoDB Configパラメータ解説

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)

Page 10: MongoDB Configパラメータ解説

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)

Page 11: MongoDB Configパラメータ解説

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を許可しない。

パラメータ:セキュリティ関連

Page 12: MongoDB Configパラメータ解説

12

パラメータ名 デフォルト値 説明

dbpath /data/db/ DBファイルを格納するディレクトリのパス。WindowsのデフォルトはC:¥data¥db¥

fork false バックグラウンドで動かす。

ログが標準出力に出ないので、logpathかsyslogの指定が必須。Windowsにはない。

repair false サーバがクラッシュした時にデータ等をリペアする。

実行するとリペアして終わりなので、その後mongodを別に立ち上げる必要あり。

repairpath dbpath リペアするDBパスを指定。

upgrade false dbpathで指定されたデータファイルのフォーマットを最新版にアップデートする。

古いフォーマットの時にだけ有効。

Note: 勝手にアップデートされてしまうので、普通はこのオプションは使うべきではない。

パラメータ:その他

Page 13: MongoDB Configパラメータ解説

13

Thank you

Github: https://github.com/syokenz/marunouchi-mongodb

Mail: [email protected], [email protected]

Twitter: @syokenz, @fetarodc