CentOS 7にMongoDBをインストールする方法
はじめに。
MongoDBは、無料かつオープンソースのドキュメント指向型データベースです。伝統的なテーブルをベースとした関係型データベース構造に依存しないため、NoSQLデータベースとして分類されています。代わりに、動的スキーマを持つJSONのようなドキュメントを使用します。関係型データベースとは異なり、MongoDBではデータをデータベースに追加する前に事前に定義されたスキーマが必要ありません。スキーマは必要に応じていつでも変更でき、更新されたスキーマで新しいデータベースをセットアップする必要もありません。
このチュートリアルでは、CentOS 7 サーバーにMongoDB Community Editionをインストールします。
前提条件
このチュートリアルを始める前に、必ず準備が整っていることを確認してください。
- A CentOS 7 server with a non-root sudo-enabled user. For guidance, please see our tutorial, Initial Server Setup with CentOS 7.
ステップ1 – MongoDBリポジトリの追加
CentOSのデフォルトのリポジトリには、mongodb-orgパッケージは存在しません。しかし、MongoDBは専用のリポジトリを維持しています。それをサーバーに追加しましょう。
VIエディタを使用して、CentOSのパッケージ管理ユーティリティであるYumのための.repoファイルを作成してください。
- sudo vi /etc/yum.repos.d/mongodb-org.repo
それでは、MongoDBのドキュメントの「Red Hatでのインストール」セクションを訪れ、最新の安定版リリースのリポジトリ情報をファイルに追加してください。
/etc/yum.repos.d/mongodb-org.repo/etc/yum.repos.d/mongodb-org.repoの日本語での表現を教えてください。
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
ファイルへの変更を保存するためにESCキーを押し、:wqと入力し、ENTERキーを押してください。 (ファイルへの変更を保存するためにESCキーを押した後、:wqと入力し、ENTERキーを押してください。)
続行する前に、yumユーティリティ内にMongoDBのリポジトリが存在するかを確認してください。repolistコマンドは有効なリポジトリの一覧を表示します。
- yum repolist
. . . repo id repo name base/7/x86_64 CentOS-7 – Base extras/7/x86_64 CentOS-7 – Extras mongodb-org-6.0/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 – Updates . . .
MongoDBリポジトリが準備できているなら、インストールを進めることができます。
ステップ2 – MongoDBのインストール
「mongodb-orgパッケージは、yumユーティリティを使用してサードパーティのリポジトリからインストールすることができます。」
- sudo yum install mongodb-org
2つの「これでよいですか [y/N]:」のプロンプトがあります。最初のプロンプトはMongoDBのパッケージのインストールを許可し、2つ目のプロンプトはGPGキーをインポートします。MongoDBのパブリッシャーはソフトウェアに署名し、yumはダウンロードしたパッケージの正当性を確認するためにキーを使用します。各プロンプトでYと入力し、ENTERキーを押してください。
次に、systemctlユーティリティを使用してMongoDBサービスを開始してください。
- sudo systemctl start mongod
このチュートリアルでは使いませんが、reloadコマンドとstopコマンドを使用してMongoDBサービスの状態も変更することができます。
reloadコマンドは、mongodプロセスに対して再起動なしで、設定ファイルである/etc/mongod.confを読み込み、変更内容を適用するように要求します。
- sudo systemctl reload mongod
全ての実行中のmongodプロセスを停止するのは、停止コマンドです。
- sudo systemctl stop mongod
systemctlユーティリティは、startコマンドを実行した後に結果を提供しませんでしたが、mongod.logファイルの末尾をtailコマンドで確認することで、サービスが開始されたことを確認できます。
- sudo tail /var/log/mongodb/mongod.log
. . . [initandlisten] waiting for connections on port 27017
接続待機の出力は、MongoDBが正常に起動し、MongoDBシェルを使用してデータベースサーバーにアクセスできることを確認します。
- mongo
Note
**注意:** ソフト制限が非常に低いです。設定された制限は4096プロセス、64000ファイルです。プロセスの数はファイルの数の0.5倍以上でなければなりません。
MongoDBはスレッド型のアプリケーションです。MongoDBはワークロードを処理するために追加のプロセスを起動することができます。警告には、MongoDBが最も効果的に動作するためには、同時にオープンできるファイルの数と比べて、起動できるプロセスの数が半分である必要があると述べられています。警告を解決するには、mongodのプロセスのソフト制限値を変更するために、20-nproc.confファイルを編集します:
sudo vi /etc/security/limits.d/20-nproc.conf
ファイルの末尾に以下の行を追加してください:
/etc/security/limits.d/20-nproc.conf
. . .
mongod soft nproc 32000
変更を保存するために、ESCキーを押し、:wqと入力し、ENTERキーを押します。
MongoDBが新しい制限を認識するためには、systemctlユーティリティを使用してmongodを再起動してください:
sudo systemctl restart mongod
再起動後、MongoDBシェルに接続すると、警告が表示されなくなります。
MongoDBのシェルからのインタラクション方法を学ぶためには、db.help() メソッドの出力を確認すると、dbオブジェクトのメソッドのリストが提供されます。
- db.help()
DB methods: db.adminCommand(nameOrDocument) – switches to ‘admin’ db, and runs command [ just calls db.runCommand(…) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : …, capped : …, max : … } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . .
バックグラウンドでmongodプロセスを実行したまま、exitコマンドでシェルを終了してください。
- exit
Bye
ステップ3 – スタートアップの検証を行う
データベースを使用するアプリケーションは、データベースがなければ動作しないため、システムと共にMongoDBのデーモンであるmongodが起動するようにします。
systemctlユーティリティを使用して、起動状態を確認してください。
- systemctl is-enabled mongod; echo $?
出力がゼロの場合、有効なデーモンであることが確認されます。これは私たちが望んでいる状態です。しかし、出力が1の場合は、起動しない無効なデーモンであることが確認されます。
. . . enabled 0
デーモンが無効になった場合は、systemctlユーティリティを使用してそれを有効にします。
- sudo systemctl enable mongod
システムの再起動後も自動的に起動する、実行可能なMongoDBインスタンスが現在あります。
ステップ4 – サンプルデータセットのインポート(任意)
他のデータベースサーバーとは異なり、MongoDBにはテストデータが含まれていません。新しいソフトウェアを本番データで実験したくないため、MongoDBの例からサンプルデータセットをダウンロードします。このJSONドキュメントにはレストランのコレクションが含まれており、MongoDBとの対話を練習するために使用し、機密データに損害を与えることを避けます。
書き込み可能なディレクトリに移動してください。
- cd /tmp
curlコマンドとMongoDBのリンクを使用して、JSONファイルをダウンロードします。
- curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
mongoimportコマンドは、データをテストデータベースに挿入します。–dbフラグは使用するデータベースを指定し、–collectionフラグは情報がデータベース内のどこに保存されるかを指定します。また、–fileフラグはコマンドがインポート操作を行うファイルを指定します。
- mongoimport –db test –collection restaurants –file /tmp/primer-dataset.json
出力は、primer-dataset.jsonファイルからデータを取り込んでいることを確認します。
connected to: localhost imported 25359 documents
サンプルデータセットを準備したら、それに対してクエリを実行することができます。
MongoDBシェルを再起動してください。
- mongo
データをインポートした場所であるテストデータベースがシェルによってデフォルトで選択されます。
データセット内のすべてのレストランのリストを表示するために、find() メソッドを使用してレストランのコレクションをクエリしてください。コレクションには25,000以上のエントリが含まれているため、クエリの出力を指定された数に減らすために、オプションのlimit()メソッドを使用してください。さらに、pretty() メソッドを使うと改行とインデントを含めて情報がより人間に読みやすくなります。
- db.restaurants.find().limit(1).pretty()
{ “_id” : ObjectId(“57e0443b46af7966d1c8fa68”), “address” : { “building” : “1007”, “coord” : [ -73.856077, 40.848447 ], “street” : “Morris Park Ave”, “zipcode” : “10462” }, “borough” : “Bronx”, “cuisine” : “Bakery”, “grades” : [ { “date” : ISODate(“2014-03-03T00:00:00Z”), “grade” : “A”, “score” : 2 }, { “date” : ISODate(“2013-09-11T00:00:00Z”), “grade” : “A”, “score” : 6 }, { “date” : ISODate(“2013-01-24T00:00:00Z”), “grade” : “A”, “score” : 10 }, { “date” : ISODate(“2011-11-23T00:00:00Z”), “grade” : “A”, “score” : 9 }, { “date” : ISODate(“2011-03-10T00:00:00Z”), “grade” : “B”, “score” : 14 } ], “name” : “Morris Park Bake Shop”, “restaurant_id” : “30075445” }
MongoDBに慣れるためには引き続きサンプルデータセットを使用するか、db.restaurants.drop()メソッドを使用して削除することができます。
- db.restaurants.drop()
最後に、exit コマンドでシェルを終了してください。
- exit
Bye
結論
このチュートリアルでは、yumにサードパーティのリポジトリを追加し、MongoDBデータベースサーバーをインストールし、サンプルデータセットをインポートして、簡単なクエリを実行しました。まだMongoDBでできることはたくさんあります。たとえば、コレクションを持つデータベースの作成、多くのドキュメントでデータベースを埋めること、そして堅牢なアプリケーションの作成などです。MongoDBについてもっと学びたい方は、当社の「MongoDBを使用したデータベースの管理方法」シリーズや他のMongoDBチュートリアルをご覧ください。