CentOS7にMongoDBをインストールする方法
序章
MongoDBは、無料でオープンソースのドキュメント指向データベースです。 従来のテーブルベースのリレーショナルデータベース構造に依存しないため、NoSQLデータベースとして分類されます。 代わりに、動的スキーマを持つJSONのようなドキュメントを使用します。 リレーショナルデータベースとは異なり、MongoDBでは、データベースにデータを追加する前に事前定義されたスキーマは必要ありません。 更新されたスキーマを使用して新しいデータベースをセットアップしなくても、いつでも必要な頻度でスキーマを変更できます。
このチュートリアルでは、CentOS7サーバーにMongoDBCommunityEditionをインストールする方法について説明します。
前提条件
このチュートリアルを実行する前に、sudo
権限を持つ通常の非rootユーザーがいることを確認してください。 これらの権限を持つユーザーを設定する方法の詳細については、ガイドCentOSでSudoユーザーを作成する方法を参照してください。
ステップ1-MongoDBリポジトリを追加する
mongodb-org
パッケージは、CentOSのデフォルトリポジトリ内に存在しません。 ただし、MongoDBは専用のリポジトリを維持しています。 サーバーに追加しましょう。
vi
エディターを使用して、CentOSのパッケージ管理ユーティリティであるyum
の.repo
ファイルを作成します。
sudo vi /etc/yum.repos.d/mongodb-org.repo
次に、MongoDBのドキュメントの Install on Red Hat セクションにアクセスし、最新の安定版リリースのリポジトリ情報をファイルに追加します。
/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
ファイルを保存して閉じます。
先に進む前に、MongoDBリポジトリがyum
ユーティリティ内に存在することを確認する必要があります。 repolist
コマンドは、有効なリポジトリのリストを表示します。
yum repolist
Output. . . repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-3.2/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates . . .
MongoDB Repository
を配置したら、インストールを続行します。
ステップ2–MongoDBをインストールする
yum
ユーティリティを使用して、サードパーティのリポジトリからmongodb-org
パッケージをインストールできます。
sudo yum install mongodb-org
2つのIs this ok [y/N]:
プロンプトがあります。 1つ目は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
stop
コマンドは、実行中のすべてのmongod
プロセスを停止します。
sudo systemctl stop mongod
systemctl
ユーティリティは、start
コマンドを実行した後、結果を提供しませんでしたが、mongod.log
ファイルの終わりをtail
コマンド:
sudo tail /var/log/mongodb/mongod.log
Output. . . [initandlisten] waiting for connections on port 27017
接続待ちの出力は、MongoDBが正常に開始され、MongoDBシェルを使用してデータベースサーバーにアクセスできることを確認します。
mongo
<$>[注] ノート: MongoDBシェルを起動すると、次のような警告が表示される場合があります。
** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
MongoDBはスレッド化されたアプリケーションです。 ワークロードを処理するために追加のプロセスを起動できます。 警告は、MongoDBが最も効果的であるためには、スピンアップが許可されているプロセスの数が、任意の時点で開くことができるファイルの数の半分である必要があることを示しています。 警告を解決するには、20-nproc.conf
ファイルを編集して、mongod
のprocesses
ソフト制限値を変更します。
sudo vi /etc/security/limits.d/20-nproc.conf
ファイルの最後に次の行を追加します。
/etc/security/limits.d/20-nproc.conf
. . . mongod soft nproc 32000
MongoDBで利用できる新しい制限については、systemctl
ユーティリティを使用して再起動してください。
sudo systemctl restart mongod
その後、MongoDBシェルに接続すると、警告は表示されなくなります。 <$>
シェルからMongoDBを操作する方法を学ぶために、dbオブジェクトのメソッドのリストを提供するdb.help()
メソッドの出力を確認できます。
db.help()
OutputDB 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
OutputBye
ステップ3–スタートアップの確認
データベース駆動型アプリケーションはデータベースなしでは機能できないため、MongoDBデーモンmongod
がシステムで起動することを確認します。
systemctl
ユーティリティを使用して、起動ステータスを確認します。
systemctl is-enabled mongod; echo $?
ゼロの出力は、必要なデーモンが有効になっていることを確認します。 ただし、1つは、起動しない無効化されたデーモンを確認します。
Output. . . enabled 0
デーモンが無効になっている場合は、systemctl
ユーティリティを使用してデーモンを有効にします。
sudo systemctl enable mongod
これで、システムの再起動後に自動的に起動するMongoDBの実行中のインスタンスができました。
ステップ4–サンプルデータセットのインポート(オプション)
他のデータベースサーバーとは異なり、MongoDBにはtest
データベースのデータが含まれていません。 本番データを使用して新しいソフトウェアを試したくないので、「Getting StartedwithMongoDB」ドキュメントの「ImportExampleDataset」セクションからサンプルデータセットをダウンロードします。 JSONドキュメントにはレストランのコレクションが含まれており、MongoDBとの対話を練習し、機密データに害を及ぼすことを回避するために使用します。
書き込み可能なディレクトリに移動することから始めます。
cd /tmp
curl
コマンドとMongoDBからのリンクを使用して、JSONファイルをダウンロードします。
curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
mongoimport
コマンドは、データをtestデータベースに挿入します。 --db
フラグは使用するデータベースを定義し、--collection
フラグはデータベースのどこに情報を保存するかを指定し、--file
フラグはコマンドに実行するファイルを指示します。インポートアクション:
mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json
出力は、primer-dataset.json
ファイルからのデータのインポートを確認します。
Outputconnected to: localhost imported 25359 documents
サンプルデータセットを配置したら、それに対してクエリを実行します。
MongoDBシェルを再起動します。
mongo
シェルはデフォルトでtest
データベースを選択します。これは、データをインポートした場所です。
レストランコレクションをfind()
メソッドでクエリして、データセット内のすべてのレストランのリストを表示します。 コレクションには25,000を超えるエントリが含まれているため、オプションのlimit()
メソッドを使用して、クエリの出力を指定された数に減らします。 さらに、pretty()
メソッドは、改行とインデントを使用して情報をより人間が読めるようにします。
db.restaurants.find().limit( 1 ).pretty()
Output{ "_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
OutputBye
結論
このチュートリアルでは、yum
へのサードパーティのリポジトリの追加、MongoDBデータベースサーバーのインストール、サンプルデータセットのインポート、および簡単なクエリの実行について説明しました。 MongoDBの機能の表面をかろうじてかじっただけです。 複数のコレクションを使用して独自のデータベースを作成し、それらに多数のドキュメントを入力して、堅牢なアプリケーションの構築を開始できます。