狠狠撸

狠狠撸Share a Scribd company logo
MongoDB Configパラメータ解説


              第4回 丸の内MongoDB勉強会
                    NRI OpenStandia
                 渡部 徹太郎、藤崎 祥見




1
はじめに
? このスライドでは公式マニュアルと丸の内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

2
丸の内惭辞苍驳辞顿叠勉强会とは

                 丸の内mongodb




3
颁辞苍蹿颈驳パラメータ一覧
    ? [ログ、情報出力]         ? [インターフェイス]         ? [チューニング]
      logpath             port                 maxConns
      logappend           bind_ip              notablescan
      syslog              rest                 directoryperdb
      verbose             nohttpinterface      journal / nojournal
      quiet               jsonp                journalCommitInterval
      pidfilepath         ipv6                 noprealloc
      cpu                 nounixsocket         nssize
      diaglog             unixSocketPrefix     quota
      profile                                  quotaFiles
      slowms                                   smallfiles
      sysinfo           ? [セキュリティ]             syncdelay
      traceExceptions     auth / noauth
                          keyFile            ? [その他]
                          objcheck             dbpath
                          noscripting          fork
                                               repair
                                               repairpath
                                               upgrade
4
重要パラメータ一覧
      重要パラメータ

    ? [ログ、情報出力]          ? [インターフェイス]         ? [チューニング]
      logpath              port                 maxConns
      logappend            bind_ip              notablescan
      syslog               rest                 directoryperdb
      verbose              nohttpinterface      journal / nojournal
      quiet                jsonp                journalCommitInterval
      pidfilepath          ipv6                 noprealloc
      cpu                  nounixsocket         nssize
      diaglog              unixSocketPrefix     quota
      profile                                   quotaFiles
      slowms                                    smallfiles
      sysinfo            ? [セキュリティ]             syncdelay
      traceExceptions      auth / noauth
                           keyFile            ? [その他]
                           objcheck             dbpath
                           noscripting          fork
                                                repair
                                                repairpath
                                                upgrade
5
パラメータ設定方法
? mongod(またはmongos)起動時に、コマンドライン引数かconfigファイルで設定す
  る。両方にあった場合、configファイルが優先される。
       ? コマンドラインの場合
               $ mongod --dbpath /data/db/ --verbose

       ? configファイルの場合
          1) 設定ファイルの作成
               dbpath = /data/db/
               verbose = true
          2) configファイルの読み込み(以下の2つは同じ)
               $ mongod --config /etc/mongodb.conf
               $ mongod -f /etc/mongodb.conf

    ? 一部のパラメータはmongo shellのrunCommandからset,get可能。
      logLevel, notablescan, traceExceptions, quiet, syncdelay
        > use admin
        > db.runCommand( { setParameter: 1, logLevel: 3 } )
6       > db.runCommand( { getParameter: 1, logLevel: 1 } )
パラメータ:ログ、情报出力関连
    パラメータ名            デフォルト値    説明

    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     ログにフルスタックトレースを出力する。
7
パラメータ:インターフェイス関连
    パラメータ名             デフォルト値   説明

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




8
パラメータ:チューニング関连(1/2)
    パラメータ名                  デフォルト値          説明

    maxConns                20000           最大接続数。OSによって制限される(ulimitやファイルディスクリプタ)ので最大値が
                                            保証されるわけではない。
    notablescan             false           trueにするとindexが効かないクエリ実行時にエラーを返す。
    directoryperdb          false           データベースごとにデータファイルを作る。
    journal                 (64bit) true    trueだとジャーナルを確実に永続化し、一貫性を保つ。
                            (32bit) false   一貫性を保証しなくてもよい場合はnojournal=trueとしてジャーナルを無効にする。そ
                                            のほうがオーバーヘッドがない。ジャーナル書き込みによるディスクへの影響を減ら
                                            したい場合は、ジャーナルのレベルを変えて、smallfiles=trueとしジャーナルファイル
                                            のデータ量を減らすとよい。
    nojournal               (64bit) false   journalの逆。configファイルでjournal=falseとしても” warning: remove or comment out
                            (32bit) true    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の時間内であれば、すべての書き込
                                            みは保証される。




9
パラメータ:チューニング関连(2/2)
     パラメータ名       デフォルト値   説明

     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を設定したほうがパフォーマンスが上がる。




10
パラメータ:セキュリティ関连
     パラメータ名        デフォルト値   説明

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




11
パラメータ:その他
     パラメータ名       デフォルト値       説明

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

     fork         false        バックグラウンドで動かす。
                               ログが標準出力に出ないので、logpathかsyslogの指定が必須。Windowsにはない。
     repair       false        サーバがクラッシュした時にデータ等をリペアする。
                               実行するとリペアして終わりなので、その後mongodを別に立ち上げる必要あり。
     repairpath   dbpath       リペアするDBパスを指定。
     upgrade      false        dbpathで指定されたデータファイルのフォーマットを最新版にアップデートする。
                               古いフォーマットの時にだけ有効。
                               Note: 勝手にアップデートされてしまうので、普通はこのオプションは使うべきではない。




12
Thank you
     Github: https://github.com/syokenz/marunouchi-mongodb
     Mail: syokenz@gmail.com, fetaro@gmail.com
     Twitter: @syokenz, @fetarodc




13

More Related Content

MongoDB Configパラメータ解説

  • 1. MongoDB Configパラメータ解説 第4回 丸の内MongoDB勉強会 NRI OpenStandia 渡部 徹太郎、藤崎 祥見 1
  • 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 2
  • 4. 颁辞苍蹿颈驳パラメータ一覧 ? [ログ、情報出力] ? [インターフェイス] ? [チューニング] logpath port maxConns logappend bind_ip notablescan syslog rest directoryperdb verbose nohttpinterface journal / nojournal quiet jsonp journalCommitInterval pidfilepath ipv6 noprealloc cpu nounixsocket nssize diaglog unixSocketPrefix quota profile quotaFiles slowms smallfiles sysinfo ? [セキュリティ] syncdelay traceExceptions auth / noauth keyFile ? [その他] objcheck dbpath noscripting fork repair repairpath upgrade 4
  • 5. 重要パラメータ一覧 重要パラメータ ? [ログ、情報出力] ? [インターフェイス] ? [チューニング] logpath port maxConns logappend bind_ip notablescan syslog rest directoryperdb verbose nohttpinterface journal / nojournal quiet jsonp journalCommitInterval pidfilepath ipv6 noprealloc cpu nounixsocket nssize diaglog unixSocketPrefix quota profile quotaFiles slowms smallfiles sysinfo ? [セキュリティ] syncdelay traceExceptions auth / noauth keyFile ? [その他] objcheck dbpath noscripting fork repair repairpath upgrade 5
  • 6. パラメータ設定方法 ? mongod(またはmongos)起動時に、コマンドライン引数かconfigファイルで設定す る。両方にあった場合、configファイルが優先される。 ? コマンドラインの場合 $ mongod --dbpath /data/db/ --verbose ? configファイルの場合 1) 設定ファイルの作成 dbpath = /data/db/ verbose = true 2) configファイルの読み込み(以下の2つは同じ) $ mongod --config /etc/mongodb.conf $ mongod -f /etc/mongodb.conf ? 一部のパラメータはmongo shellのrunCommandからset,get可能。 logLevel, notablescan, traceExceptions, quiet, syncdelay > use admin > db.runCommand( { setParameter: 1, logLevel: 3 } ) 6 > db.runCommand( { getParameter: 1, logLevel: 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 ログにフルスタックトレースを出力する。 7
  • 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ソケットファイルの配置場所。 8
  • 9. パラメータ:チューニング関连(1/2) パラメータ名 デフォルト値 説明 maxConns 20000 最大接続数。OSによって制限される(ulimitやファイルディスクリプタ)ので最大値が 保証されるわけではない。 notablescan false trueにするとindexが効かないクエリ実行時にエラーを返す。 directoryperdb false データベースごとにデータファイルを作る。 journal (64bit) true trueだとジャーナルを確実に永続化し、一貫性を保つ。 (32bit) false 一貫性を保証しなくてもよい場合はnojournal=trueとしてジャーナルを無効にする。そ のほうがオーバーヘッドがない。ジャーナル書き込みによるディスクへの影響を減ら したい場合は、ジャーナルのレベルを変えて、smallfiles=trueとしジャーナルファイル のデータ量を減らすとよい。 nojournal (64bit) false journalの逆。configファイルでjournal=falseとしても” warning: remove or comment out (32bit) true 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の時間内であれば、すべての書き込 みは保証される。 9
  • 10. パラメータ:チューニング関连(2/2) パラメータ名 デフォルト値 説明 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を設定したほうがパフォーマンスが上がる。 10
  • 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を許可しない。 11
  • 12. パラメータ:その他 パラメータ名 デフォルト値 説明 dbpath /data/db/ DBファイルを格納するディレクトリのパス。WindowsのデフォルトはC:?data?db? fork false バックグラウンドで動かす。 ログが標準出力に出ないので、logpathかsyslogの指定が必須。Windowsにはない。 repair false サーバがクラッシュした時にデータ等をリペアする。 実行するとリペアして終わりなので、その後mongodを別に立ち上げる必要あり。 repairpath dbpath リペアするDBパスを指定。 upgrade false dbpathで指定されたデータファイルのフォーマットを最新版にアップデートする。 古いフォーマットの時にだけ有効。 Note: 勝手にアップデートされてしまうので、普通はこのオプションは使うべきではない。 12
  • 13. Thank you Github: https://github.com/syokenz/marunouchi-mongodb Mail: syokenz@gmail.com, fetaro@gmail.com Twitter: @syokenz, @fetarodc 13