このチュートリアルの以前のバージョンは、 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とともにインストールするには、次のコマンドを実行します。

  1. sudo dnf install nano

このインストールプロセス中に、システムはソフトウェアをインストールすることを確認するように求めます。 これを行うには、yを押してから、ENTERを押します。

Output
Transaction Summary ================================================================================ Install 1 Package Total download size: 581 k Installed size: 2.2 M Is this ok [y/N]: y

インストールが完了したら、次のコマンドを実行して、編集用のリポジトリファイルを作成して開きます。

  1. sudo nano /etc/yum.repos.d/mongodb-org.repo

次に、次のコンテンツを空のファイルに追加します。 これにより、MongoDBのバージョン 4.4 (この記事の執筆時点での最新バージョン)がインストールされます。

/etc/yum.repos.d/mongodb-org.repo
[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 + XYENTERの順に押して作成します。

続行する前に、プログラムのrepolistコマンドを実行して、DNFがこのリポジトリを見つけて使用できるかどうかをテストできます。

  1. dnf repolist

サーバーのパッケージマネージャーがリポジトリを利用できる場合は、出力に次のように表示されます。

Output
repo id repo name AppStream CentOS-8 - AppStream BaseOS CentOS-8 - Base extras CentOS-8 - Extras mongodb-org MongoDB Repository

その後、次のコマンドでmongodb-orgパッケージをインストールできます。

  1. sudo dnf install mongodb-org

ここでも、yENTERの順に押して、パッケージをインストールするかどうかを確認するように求められます。 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権限で作成します。

  1. sudo nano /etc/systemd/system/disable-thp.service

このファイルには、いくつかの個別のセクションを追加する必要があります。 最初に追加するのは[Unit]セクションで、サービスユニットに関する一般的な情報が含まれています。

次の強調表示された行を追加します。

/etc/systemd/system/disable-thp.service
[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]セクションをファイルに追加します。

/etc/systemd/system/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/nullnullデバイスに渡します。書き込まれた情報はすぐに破棄されます。 これが実際にTHPを無効にするものです。

続いて、この強調表示された[Install]セクションを追加します。

/etc/systemd/system/disable-thp.service
. . .
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ユニットとユニットファイルの理解に関するガイドを確認することをお勧めします。

すべての行の追加が完了すると、サービスユニットファイル全体が次のようになります。

/etc/systemd/system/disable-thp.service
[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サービスを認識させます。

  1. sudo systemctl daemon-reload

次に、disable-thpサービスを開始します。

  1. sudo systemctl start disable-thp.service

/sys/kernel/mm/transparent_hugepage/enabledファイルの内容を確認することで、THPが無効になっていることを確認できます。

  1. cat /sys/kernel/mm/transparent_hugepage/enabled

THPが正常に無効化された場合、neverは出力で角かっこで囲まれます。

Output
always madvise [never]

その後、disable-thpサービスを有効にして自動的に起動し、サーバーが起動するたびにTHPを無効にします。 このコマンドには、サービスファイル定義に.serviceが含まれていないことに注意してください。 systemctlは、このサフィックスがまだ存在しない場合、自動的に渡す引数にこのサフィックスを追加するため、含める必要はありません。

  1. sudo systemctl enable disable-thp

disable-thpサービスは、MongoDBサービスが開始する前にサーバーが起動し、THPを無効にするたびに開始されるようになりました。 ただし、システムでTHPを無効にしたままにするために、もう1つの手順を実行する必要があります。

デフォルトでは、CentOS8にはtuned —カーネルチューニングツール—がインストールされ、有効になっています。 tunedは、いくつかの特定のユースケースのパフォーマンスを向上させることができる、いくつかの事前構成されたチューニングプロファイルを使用します。 これらのプロファイルを編集するか、システム用にカスタマイズされた新しいプロファイルを作成できます。

tunedツールは、システムのTHP設定に影響を与える可能性があるため、MongoDBのドキュメントでは、THPが予期せず有効にならないように、カスタムプロファイルも作成することを推奨しています。

カスタムtunedプロファイルを保持する新しいディレクトリを作成して、これを開始します。

  1. sudo mkdir /etc/tuned/no-thp

このディレクトリ内に、tuned.confという名前の構成ファイルを作成します。

  1. sudo nano /etc/tuned/no-thp/tuned.conf

次の2つのセクションをファイルに追加します。

/etc/tuned/no-thp/tuned.conf
[main]
include=virtual-guest

[vm]
transparent_hugepages=never

最初のセクション[main]は、すべてのtuned構成ファイルに含まれている必要があります。 ここでは、no-thpプロファイルがvirtual-guestという名前の別のtunedプロファイルの特性を継承するようにする1つのincludeステートメントのみを指定します。

:このようなvirtual-guestプロファイルの特性を継承することは多くの場合に機能しますが、すべての場合に最適であるとは限りません。 提供されている調整済みプロファイルに関するこのドキュメントを確認して、別のプロファイルの特性を継承することがシステムに適しているかどうかを判断することをお勧めします。

次のセクションでは、transparent_hugepagesブールオプションに続く値に基づいてTHPを有効または無効にするために特別に使用される特別なプラグイン[vm)を指定します。

これらの行を追加したら、ファイルを保存して閉じます。 次に、新しいプロファイルを有効にします。

  1. sudo tuned-adm profile no-thp

これで、サーバーでTHPを無効にしました。 これで、MongoDBサービスを開始し、データベースの機能をテストできます。

ステップ3— MongoDBサービスを開始し、データベースをテストする

手順1で説明したインストールプロセスでは、MongoDBがsystemdによって制御されるデーモンとして実行されるように自動的に構成されます。つまり、さまざまなsystemctlコマンドを使用してMongoDBを管理できます。 ただし、このインストール手順ではサービスは自動的に開始されません。

次のsystemctlコマンドを実行して、MongoDBサービスを開始します。

  1. sudo systemctl start mongod

次に、サービスのステータスを確認します。

  1. 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サービスを起動時に起動できるようにします。

  1. sudo systemctl enable mongod

データベースサーバーに接続して診断コマンドを実行することにより、データベースが動作していることをさらに確認できます。 次のコマンドはデータベースに接続し、現在のバージョン、サーバーアドレス、およびポートを出力します。 また、MongoDBの内部connectionStatusコマンドの結果も返します。

  1. mongo --eval 'db.runCommand({ connectionStatus: 1 })'

connectionStatusは、データベース接続のステータスを確認して返します。 応答のokフィールドの1の値は、サーバーが期待どおりに機能していることを示しています。

Output
MongoDB 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サービスのステータスをチェックすることを思い出してください。

  1. sudo systemctl status mongod

次のように入力すると、いつでもサービスを停止できます。

  1. sudo systemctl stop mongod

停止時にサービスを開始するには、次のコマンドを実行します。

  1. sudo systemctl start mongod

サーバーがすでに実行されているときにサーバーを再起動することもできます。

  1. sudo systemctl restart mongod

手順3では、MongoDBがサーバーで自動的に起動するようにしました。 この自動起動を無効にしたい場合は、次のように入力します。

  1. sudo systemctl disable mongod

次に、起動時に起動できるように再度有効にするには、enableコマンドを再度実行します。

  1. sudo systemctl enable mongod

systemdサービスの管理方法の詳細については、 Systemd Essentials:サービス、ユニット、およびジャーナルの操作を確認してください。

結論

このチュートリアルでは、公式のMongoDBリポジトリをDNFリポジトリのリストに追加し、データベースの最新バージョンをインストールしました。 次に、Transparent Huge Pagesを無効にしてデータベースのパフォーマンスを最適化し、Mongoの機能をテストし、いくつかのsystemctlコマンドを実行しました。

次のステップとして、 CentOS 8 でMongoDBを保護する方法に関するガイドに従って、MongoDBインストールのセキュリティを強化することを強くお勧めします。 保護されたら、リモート接続を受け入れるようにMongoDBを構成できます

MongoDBを構成および使用する方法に関するその他のチュートリアルは、これらのDigitalOceanコミュニティの記事にあります。 また、MongoDBが提供する可能性についての優れたリソースであるため、公式のMongoDBドキュメントを確認することをお勧めします。