Memo/MongoDB

https://dexlab.net:443/pukiwiki/index.php?Memo/MongoDB
 

MongoDB

MongoDBは、オープンソースソフトウェアのドキュメント指向データベースである。C++言語で記述されており、開発とサポートはMongoDB Inc.によって行なわれている。
  • 各OS向けにバイナリが配布されている。RHEL/CentOS 6/7向けあり
  • docs:

Capped Collections: コレクションの上限サイズを指定する

  • createCollection: 新規collection作成時に上限を設定する。
    • 「test01」collectionの上限サイズを「8MB」に設定。
      mongo sample --quiet --eval 'printjson(db.createCollection("test01", { capped: true, size: 8*1024*1024}))'
  • convertToCapped: 既存collectionをcappedへ変更
    • 作業中はロックされる。大きいcollectionはロック時間が長くなるため注意。
    • 「test01」collectionの上限サイズを「8MB」に設定
      mongo --quiet --eval 'printjson(db.runCommand({ convertToCapped: "test01", size: 16*1024*1024}))' sample
  • 確認: maxは最大要素数
    mongo --quiet --eval 'printjson(db.test01.stats(1024*1024))' sample
  • cappedが無効なコレクション表示
    mongo --quiet --eval 'db.getCollectionNames().forEach(function(n){print(n + "," + db[n].stats().capped)})' sample| grep -v -E '^system|,true$'

mongodサービス起動時のtimeoutを延長する

データが多くなってくるとでデフォルトの90秒では起動しない事がある。

  • CentOS 7 64bit
  • mongodのTimeoutStartSecを90秒から3分に伸ばす
    sudo vim /etc/systemd/system/mongod.service.d/timeout.conf
    --
    [Service]
    TimeoutStartSec=3m
    --
    
    sudo systemctl daemon-reload
    systemctl show mongod -p TimeoutStartUSec
    TimeoutStartUSec=3min
  • TimeoutStartSec="3m" のようにダブルクオーテーションで括ると認識せず、デフォルトの値に戻ってしまう。特にエラーもでない

レプリケーション


mongoコマンド

  • rs.status()を実行してJSON表示
    mongo --quiet --eval 'printjson(rs.status())'
  • hostとdbを指定してコマンド実行
    mongo --quiet --host localhost --eval 'db.col.count()' sample
  • mongodに接続
    mongo
  • DB一覧
    show dbs
  • DB切替
    use <db name>
  • collection一覧
    show collections
  • 「test01」collectionの情報表示。サイズをMBで。
    db.test01.stats(1024*1024)
  • コレクション毎のストレージサイズをMB単位で表示
    db.getCollectionNames().forEach(function(n){print(n + "," + db[n].stats().storageSize/1024/1024 + " MB")})
  • コレクション毎の要素数を表示
    db.getCollectionNames().forEach(function(n){print(n + "," + db[n].count())})
  • コレクション毎のIndexを表示
    db.getCollectionNames().forEach(function(n){print(n); printjson(db[n].getIndexes())});

Max open files/Max processesの設定

  • RHEL/CentOS 6/7のデフォルトでは1024と低いため、最大値を上げる必要がある
    sudo cat /proc/$(pidof mongod)/limits | grep -P "open|proc"
    Max processes             1024                 64000                processes
    Max open files            1024                 4096                 files
  • initd (RHEL/CentOS 6), systemd(RHEL/CentOS 7)で設定箇所が異なるので注意
  • RHEL/CentOS 7: systemdの場合
    sudo mkdir /etc/systemd/system/mongod.service.d
    sudo vim /etc/systemd/system/mongod.service.d/limits.conf
    --
    # https://docs.mongodb.com/manual/reference/ulimit/ 
    #
    # The settings is what mongoDB officially recommends.
    #
    [Service]
    # Other directives omitted
    # (file size)
    LimitFSIZE=infinity
    # (cpu time)
    LimitCPU=infinity
    # (virtual memory size)
    LimitAS=infinity
    # (open files)
    LimitNOFILE=64000
    # (processes/threads)
    LimitNPROC=64000
    --
    sudo systemctl daemon-reload
    sudo service mongod restart
  • RHEL/CentOS 6: initdの場合
    sudo vim /etc/security/limits.d/99-mongodb-nproc.conf
    --
    # http://docs.mongodb.org/manual/reference/ulimit/
    mongod          soft    nproc     64000
    mongod          soft    nofile    64000
    --
    sudo service mongod restart

TLS/SSL接続

  • 記事

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-03 (月) 19:05:49 (15d)