💬

ひとりMongoDB University 12/08 - Configuration File

2020/12/08に公開

この記録は、アドベントカレンダー形式の、MongoDB Universityの学習コースの記録、8日目になります!
ただいまコース: M103[1]を進めています。目標は12/25までにChapter1の完走!

Chapter 1: Configuration File (動画)

mongodの起動時のコマンドラインオプションは、いろいろなものがありますが、デフォルト設定での起動でなく、カスタマイズしたい場合に、コマンドラインで毎回オプションを指定して起動するのは大変...。

たとえば、こんな指定...。

mongod --dbpath /data/db --logpath /data/log/mongod.log --fork --replSet "M103" --keyFile /data/keyfile --bind_ip "127.0.0.1,192.168.103.100" --tlsMode requireTLS --tlsCAFile "/etc/tls/TLSCA.pem" --tlsCertificateKeyFile "/etc/tls/tls.pem"

代表的なオプションの例:

  • --dbpath (データファイルの場所)
  • --logpath (ログの場所)
  • --replSet (レプリケーションセットの名前)
  • --keyFile (クラスタの認証用のキーファイル)
  • --bind_ip (ネットワーク的なアクセス制限に利用)
  • --tlsMode (SSL/TLS接続の設定:ここでは扱わない)
  • --tlsCAFile (SSL/TLS接続の設定:ここでは扱わない)
  • --tlsCertificateKeyFile (SSL/TLS接続の設定:ここでは扱わない)
  • --fork (バックグラウンド・デーモンモードで起動するオプション)

オプションの中には、引数を取らないもの (--fork) や、入力がとても面倒なものもあります。
「そこでConfiguration fileですよ!」という導入で設定ファイルのお話が進みます。

上記のコマンドラインオプションを、設定ファイルに置き換え。
設定はyamlファイルを使う。

storage:
  dbPath: "/data/db"
systemLog:
  path: "/data/log/mongod.log"
  destination: "file"
replication:
  replSetName: M103
net:
  bindIp : "127.0.0.1,192.168.103.100"
tls:
  mode: "requireTLS"
  certificateKeyFile: "/etc/tls/tls.pem"
  CAFile: "/etc/tls/TLSCA.pem"
security:
  keyFile: "/data/keyfile"
processManagement:
  fork: true

↑設定は入子構造になっているよ!
たとえば、SSL/TLSに関するもの、ストレージに関するものといった具合に、グループ分けの上で設定のKey / Valueを指定します。

リファレンス

設定ファイルの指定の仕方

mongod --config /etc/mongod.config

# もしくはこちら
mongod -f /etc/mongod.config

Configuration File (クイズ)

Problem:

以下のコマンドラインオプションと同じ設定をファイルで指定する場合は、どんな設定ファイルになりますか?

mongod --dbpath /data/db --logpath /data/logs --replSet M103 --bind_ip '127.0.0.1,192.168.103.100' --keyFile /data/keyfile --fork

答え

※この問題は、設定のKey/Valueの値の正しさや指定の正確さではなくて、「正しいYAMLで設定しているか」というところを確認するための問題でした!

storage:
  dbPath: "/data/db"
systemLog:
  destination: file
  path: "/data/logs"
replication:
  replSetName: "M103"
net:
  bindIp: "127.0.0.1,192.168.103.100"
security:
  keyFile: "/data/keyfile"
processManagement:
  fork: true

Lab: Configuration File (実践問題)

Web IDEを使って実際にmongodを起動してみる課題です!

(1)IDEからmongodを起動してください。
その際には、設定ファイルを作成して、オプションで渡してください。
IDEには空のYAMLファイルが用意されているので、適切な設定を埋めてください。

以下の条件を指定してください:
run on port 27000 (port 27000で起動:デフォルトは27017)
authentication is enabled (認証ありに設定:デフォルトは無し)

(2) 設定ファイルを指定して起動してください。
(3) 起動したら別のターミナルからmongo(mongo shell)を起動してMongoDBに接続してください。

# 起動後に、adminオプションで接続し、テスト用のユーザを作成します
mongo admin --host localhost:27000 --eval '
  db.createUser({
    user: "m103-admin",
    pwd: "m103-pass",
    roles: [
      {role: "root", db: "admin"}
    ]
  })
'

答え

net:
   port: 27000
security:
  authorization: enabled

上記の設定での起動結果:

bash-4.4# mongod -f mongod.conf
2020-12-08T12:53:03.353+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-12-08T12:53:03.365+0000 I CONTROL  [initandlisten] MongoDB starting : pid=362 port=27000 dbpath=/data/db 64-bit host=jfG0ZPpqoU1STYYCWE

 -- [ 中略 ] ---

2020-12-08T12:53:03.365+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2020-12-08T12:53:03.365+0000 I CONTROL  [initandlisten] options: { config: "mongod.conf", net: { port: 27000 }, security: { authorization: "enabled" } }

.......

設定無しでのテスト

設定ありで起動

テストOK!

テストが通りました!

本日の進捗

Chapter1の7個めまで進みました! (7/27)
1日1動画&テストくらいのペースかな...。

きょうのzenn

8日目の記事作成。当日の記事を書き終わったあとに、次の日分のMarkdownを作成しておきます。

zenn-contents $ npx zenn new:article --slug 20201208-mongodb-univ
📄20201208-mongodb-univ.md created.
脚注
  1. M103: Basic Cluster Administration のコースになります。コースを開始すると、完了までの期限は2ヶ月以内です。 ↩︎

Discussion