CentOS8にMongoDBをインストールする方法
このチュートリアルの以前のバージョンは、 MelissaAndersonによって作成されました。
序章
MongoDB は、 Mongo とも呼ばれ、多くの最新のWebアプリケーションで使用されているオープンソースのドキュメントデータベースです。 従来のテーブルベースのリレーショナルデータベース構造に依存しないため、NoSQLデータベースとして分類されます。
代わりに、動的スキーマを持つJSONのようなドキュメントを使用します。つまり、リレーショナルデータベースとは異なり、MongoDBでは、データベースにデータを追加する前に事前定義されたスキーマは必要ありません。 更新されたスキーマを使用して新しいデータベースを設定しなくても、いつでも必要な頻度でスキーマを変更できます。
このチュートリアルでは、CentOS 8サーバーにMongoDBをインストールしてテストし、systemd
サービスとして管理する方法を学習します。
前提条件
このチュートリアルを完了するには、CentOS8を実行しているサーバーが必要です。 このサーバーには、管理者権限を持つroot以外のユーザーと、firewalld
で構成されたファイアウォールが必要です。 これを設定するには、CentOS8の初期サーバーセットアップガイドに従ってください。
ステップ1—MongoDBをインストールする
標準のCentOSリポジトリで利用できる公式のMongoDBパッケージはありません。 サーバーにMongoをインストールするには、MongoDBの公式リポジトリを指すリポジトリファイルを追加する必要があります。 パッケージマネージャーは、パッケージを検索するときにこのファイルを読み取り、それを使用してMongoとその依存関係をインストールできるようになります。
このガイドでは、DNFパッケージマネージャーを使用してMongoをインストールするため、リポジトリファイルを/etc/yum.repos.d/
ディレクトリに追加する必要があります。 DNFは、パッケージソースを検索するときに、このディレクトリ内で.repo
サフィックスで終わるファイルをチェックします。
vi
(デフォルトでCentOSシステムにインストールされている広く使用されているテキストエディター)を使用してリポジトリファイルを作成できますが、vi
は、経験のないユーザーにとっては直感的ではない場合があります。 。 別の方法として、標準のCentOSリポジトリから入手できるよりユーザーフレンドリーなエディタであるnano
をお勧めします。
nano
をDNFとともにインストールするには、次のコマンドを実行します。
- sudo dnf install nano
このインストールプロセス中に、システムはソフトウェアをインストールすることを確認するように求めます。 これを行うには、y
を押してから、ENTER
を押します。
OutputTransaction Summary
================================================================================
Install 1 Package
Total download size: 581 k
Installed size: 2.2 M
Is this ok [y/N]: y
インストールが完了したら、次のコマンドを実行して、編集用のリポジトリファイルを作成して開きます。
- sudo nano /etc/yum.repos.d/mongodb-org.repo
次に、次のコンテンツを空のファイルに追加します。 これにより、MongoDBのバージョン 4.4 (この記事の執筆時点での最新バージョン)がインストールされます。
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
注:データベースの公式ドキュメントを参照すると、MongoDBの新しいバージョンが利用可能かどうかを確認できます。 Webブラウザーで、MongoDBのRedHatおよびCentOSのインストール手順のパッケージ管理システムの構成セクションに移動します。
そこには、MongoDBの最新バージョンのリポジトリ情報を含むコードブロックがあります。 以前のファイルの内容と異なる場合は、その構成をコピーして、代わりに.repo
ファイルに追加できます。
これらの各ディレクティブの機能は次のとおりです。
[mongodb-org]
:.repo
ファイルの最初の行は、リポジトリの識別子として機能する、角かっこで囲まれた単一の文字列です。name
:このディレクティブは、リポジトリを説明するために人間が読める名前を定義します。 ここには任意の名前を入力できますが、わかりやすくするためにMongoDB Repository
と入力できます。baseurl
:これは、リポジトリのメタデータを含むリポジトリのrepodata
ディレクトリを見つけることができるディレクトリのURLを指しますgpgcheck
:このディレクティブを1
に設定すると、DNFパッケージマネージャーにこのリポジトリでGPG署名チェックを有効にするように指示し、そこからインストールするパッケージが破損または改ざんされていないかどうかを確認する必要がありますとenabled
:このディレクティブを1
に設定すると、DNFにこのリポジトリをパッケージソースとして含めるように指示されます。0
に設定すると、この動作が無効になりますgpgkey
:このディレクティブは、このリポジトリからのパッケージの署名を検証するためにインポートする必要があるGPGキーのURLを指定します
リポジトリ情報を追加したら、ファイルを保存して閉じます。 nano
を使用してリポジトリファイルを作成した場合は、CTRL + X
、Y
、ENTER
の順に押して作成します。
続行する前に、プログラムのrepolist
コマンドを実行して、DNFがこのリポジトリを見つけて使用できるかどうかをテストできます。
- dnf repolist
サーバーのパッケージマネージャーがリポジトリを利用できる場合は、出力に次のように表示されます。
Outputrepo id repo name
AppStream CentOS-8 - AppStream
BaseOS CentOS-8 - Base
extras CentOS-8 - Extras
mongodb-org MongoDB Repository
その後、次のコマンドでmongodb-org
パッケージをインストールできます。
- sudo dnf install mongodb-org
ここでも、y
、ENTER
の順に押して、パッケージをインストールするかどうかを確認するように求められます。 DNFは、Mongoの署名キーのインポートを確認するように要求する場合もあります。 この場合は、もう一度y
を押してから、ENTER
を押してください。
コマンドが終了すると、MongoDBがサーバーにインストールされます。 ただし、データベースを起動する前に、MongoDBのドキュメントでは、パフォーマンスを最適化するために、サーバーで透過的な巨大ページを無効にすることを推奨しています。
ステップ2—パフォーマンスを向上させるために透過的な巨大ページを無効にする
CentOSは、デフォルトでLinuxメモリ管理システムであるTransparent Huge Pages(THP)を有効にします。 THPは、特大のメモリページを使用して、大量のメモリを搭載したマシンでのトランスレーションルックアサイドバッファルックアップの影響を軽減します。 ただし、このシステムはデータベースのパフォーマンスに悪影響を与える可能性があるため、MongoDBのドキュメントではTHPを無効にすることを推奨しています。
CentOS8でTransparentHugePagesを無効にするには、起動時に無効にするsystemd
ユニットファイルを作成します。 systemd
は、サーバーのさまざまな側面を制御できる多くのLinuxオペレーティングシステムで使用されるinitシステムおよびソフトウェアスイートです。 systemdでは、 unit は、システムが操作および管理する方法を知っているすべてのリソースを指します。 ユニットファイルは、これらのリソースの1つを定義する特別な構成ファイルです。
このファイルを/etc/systemd/system/
ディレクトリにsudo
権限で作成します。
- sudo nano /etc/systemd/system/disable-thp.service
このファイルには、いくつかの個別のセクションを追加する必要があります。 最初に追加するのは[Unit]
セクションで、サービスユニットに関する一般的な情報が含まれています。
次の強調表示された行を追加します。
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service
[Unit]
セクションヘッダーの後に、次のオプションがあります。
Description
:これはユニットの人間が読める名前を定義しますAfter
:これにより、disable-thp
サービスユニットは、指定された2つのターゲット(systemd
ユニットの事前定義されたグループ)の起動が完了した後にのみ起動します。Before
:このオプションにより、MongoDBサービスユニットであるmongod
が起動する前に、disable-thp
サービスの起動が常に終了します。
次に、強調表示された[Service]
セクションをファイルに追加します。
. . .
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
このセクションのType
オプションは、このユニットがoneshot
タイプのプロセスになることを定義します。つまり、これは1回限りのタスクであり、systemd
はプロセスが終了するのを待つ必要があります。継続します。
ExecStart
オプションは、プロセスを開始するコマンドのフルパスと引数を指定するために使用されます。 ここに含まれているコマンドは、シェルプロセスを開き、一重引用符の間にコマンドを実行します。 このコマンドは、文字列never
をエコーし、それを次のtee
コマンドにパイプします。 次に、tee
コマンドは、/sys/kernel/mm/transparent_hugepage/enabled
ファイルをnever
のみの内容として書き換え、出力を/dev/null
、nullデバイスに渡します。書き込まれた情報はすぐに破棄されます。 これが実際にTHPを無効にするものです。
続いて、この強調表示された[Install]
セクションを追加します。
. . .
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
[Install]
セクションには、ユニットの設置情報が記載されています。 このセクションには、WantedBy
という1つのオプションしかありません。これにより、basic.target
の起動時にdisable-thp
ユニットが起動します。
注:systemd
のユニットとサービスについて詳しく知りたい場合は、Systemdユニットとユニットファイルの理解に関するガイドを確認することをお勧めします。
すべての行の追加が完了すると、サービスユニットファイル全体が次のようになります。
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
終了したら、ファイルを保存して閉じます。 次に、systemd
をリロードして、システムに新しいdisable-thp
サービスを認識させます。
- sudo systemctl daemon-reload
次に、disable-thp
サービスを開始します。
- sudo systemctl start disable-thp.service
/sys/kernel/mm/transparent_hugepage/enabled
ファイルの内容を確認することで、THPが無効になっていることを確認できます。
- cat /sys/kernel/mm/transparent_hugepage/enabled
THPが正常に無効化された場合、never
は出力で角かっこで囲まれます。
Outputalways madvise [never]
その後、disable-thp
サービスを有効にして自動的に起動し、サーバーが起動するたびにTHPを無効にします。 このコマンドには、サービスファイル定義に.service
が含まれていないことに注意してください。 systemctl
は、このサフィックスがまだ存在しない場合、自動的に渡す引数にこのサフィックスを追加するため、含める必要はありません。
- sudo systemctl enable disable-thp
disable-thp
サービスは、MongoDBサービスが開始する前にサーバーが起動し、THPを無効にするたびに開始されるようになりました。 ただし、システムでTHPを無効にしたままにするために、もう1つの手順を実行する必要があります。
デフォルトでは、CentOS8にはtuned
—カーネルチューニングツール—がインストールされ、有効になっています。 tuned
は、いくつかの特定のユースケースのパフォーマンスを向上させることができる、いくつかの事前構成されたチューニングプロファイルを使用します。 これらのプロファイルを編集するか、システム用にカスタマイズされた新しいプロファイルを作成できます。
tuned
ツールは、システムのTHP設定に影響を与える可能性があるため、MongoDBのドキュメントでは、THPが予期せず有効にならないように、カスタムプロファイルも作成することを推奨しています。
カスタムtuned
プロファイルを保持する新しいディレクトリを作成して、これを開始します。
- sudo mkdir /etc/tuned/no-thp
このディレクトリ内に、tuned.conf
という名前の構成ファイルを作成します。
- sudo nano /etc/tuned/no-thp/tuned.conf
次の2つのセクションをファイルに追加します。
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
最初のセクション[main]
は、すべてのtuned
構成ファイルに含まれている必要があります。 ここでは、no-thp
プロファイルがvirtual-guest
という名前の別のtuned
プロファイルの特性を継承するようにする1つのinclude
ステートメントのみを指定します。
注:このようなvirtual-guest
プロファイルの特性を継承することは多くの場合に機能しますが、すべての場合に最適であるとは限りません。 提供されている調整済みプロファイルに関するこのドキュメントを確認して、別のプロファイルの特性を継承することがシステムに適しているかどうかを判断することをお勧めします。
次のセクションでは、transparent_hugepages
ブールオプションに続く値に基づいてTHPを有効または無効にするために特別に使用される特別なプラグイン[vm
)を指定します。
これらの行を追加したら、ファイルを保存して閉じます。 次に、新しいプロファイルを有効にします。
- sudo tuned-adm profile no-thp
これで、サーバーでTHPを無効にしました。 これで、MongoDBサービスを開始し、データベースの機能をテストできます。
ステップ3— MongoDBサービスを開始し、データベースをテストする
手順1で説明したインストールプロセスでは、MongoDBがsystemd
によって制御されるデーモンとして実行されるように自動的に構成されます。つまり、さまざまなsystemctl
コマンドを使用してMongoDBを管理できます。 ただし、このインストール手順ではサービスは自動的に開始されません。
次のsystemctl
コマンドを実行して、MongoDBサービスを開始します。
- sudo systemctl start mongod
次に、サービスのステータスを確認します。
- sudo systemctl status mongod
このコマンドは、サービスが稼働中であることを示す次のような出力を返します。
Output● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-10-01 20:31:26 UTC; 19s ago
Docs: https://docs.mongodb.org/manual
Process: 14208 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 14205 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 14203 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 14201 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 14210 (mongod)
Memory: 66.6M
CGroup: /system.slice/mongod.service
└─14210 /usr/bin/mongod -f /etc/mongod.conf
サービスが期待どおりに実行されていることを確認したら、MongoDBサービスを起動時に起動できるようにします。
- sudo systemctl enable mongod
データベースサーバーに接続して診断コマンドを実行することにより、データベースが動作していることをさらに確認できます。 次のコマンドはデータベースに接続し、現在のバージョン、サーバーアドレス、およびポートを出力します。 また、MongoDBの内部connectionStatus
コマンドの結果も返します。
- mongo --eval 'db.runCommand({ connectionStatus: 1 })'
connectionStatus
は、データベース接続のステータスを確認して返します。 応答のok
フィールドの1
の値は、サーバーが期待どおりに機能していることを示しています。
OutputMongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("460fe822-2881-477c-b095-aa3ccb49702d") }
MongoDB server version: 4.4.1
{
"authInfo" : {
"authenticatedUsers" : [ ],
"authenticatedUserRoles" : [ ]
},
"ok" : 1
}
また、データベースは127.0.0.1
のポート27017
で実行されており、ローカルループバックアドレスはlocalhostを表していることに注意してください。 これはMongoDBのデフォルトのポート番号です。
次に、systemd
を使用してMongoDBサーバーインスタンスを管理する方法を見ていきます。
ステップ4—MongoDBサービスの管理
前述のように、ステップ1で説明したインストールプロセスは、MongoDBをsystemd
サービスとして実行するように構成します。 これは、他のCentOSシステムサービスと同じように、標準のsystemctl
コマンドを使用して管理できることを意味します。
systemctl status
コマンドがMongoDBサービスのステータスをチェックすることを思い出してください。
- sudo systemctl status mongod
次のように入力すると、いつでもサービスを停止できます。
- sudo systemctl stop mongod
停止時にサービスを開始するには、次のコマンドを実行します。
- sudo systemctl start mongod
サーバーがすでに実行されているときにサーバーを再起動することもできます。
- sudo systemctl restart mongod
手順3では、MongoDBがサーバーで自動的に起動するようにしました。 この自動起動を無効にしたい場合は、次のように入力します。
- sudo systemctl disable mongod
次に、起動時に起動できるように再度有効にするには、enable
コマンドを再度実行します。
- sudo systemctl enable mongod
systemd
サービスの管理方法の詳細については、 Systemd Essentials:サービス、ユニット、およびジャーナルの操作を確認してください。
結論
このチュートリアルでは、公式のMongoDBリポジトリをDNFリポジトリのリストに追加し、データベースの最新バージョンをインストールしました。 次に、Transparent Huge Pagesを無効にしてデータベースのパフォーマンスを最適化し、Mongoの機能をテストし、いくつかのsystemctl
コマンドを実行しました。
次のステップとして、 CentOS 8 でMongoDBを保護する方法に関するガイドに従って、MongoDBインストールのセキュリティを強化することを強くお勧めします。 保護されたら、リモート接続を受け入れるようにMongoDBを構成できます。
MongoDBを構成および使用する方法に関するその他のチュートリアルは、これらのDigitalOceanコミュニティの記事にあります。 また、MongoDBが提供する可能性についての優れたリソースであるため、公式のMongoDBドキュメントを確認することをお勧めします。