NoSQLデータベーステクノロジを選択するときは、パフォーマンス、復元力、信頼性、セキュリティなどの重要な考慮事項を考慮する必要があります。これらの重要な要素は、少なくともデータベースに関する限り、ビジネス目標の達成とも一致している必要があります。
これらの側面を改善するために多くのテクノロジーが使用されています。組織は、顕著なオプションを改善し、それらをデータベースシステムに統合することをお勧めします。
新しいテクノロジーは、手頃な運用コストでビジネス目標の達成を強化するために最大のパフォーマンスを保証する必要がありますが、エラー検出やアラートシステムなどのより操作的な機能を備えています。
このブログでは、PerconaバージョンのMongoDBと、それがさまざまな方法でMongoDBの機能を拡張する方法について説明します。
MongoDB用のPerconaサーバーとは何ですか?
データベースのパフォーマンスを向上させるには、読み取りおよび書き込みトランザクションを強化するための最適に確立された基盤サーバーが必要です。 Percona Server for MongoDBは、MongoDB Community Editionの無料のオープンソースドロップイン代替品ですが、エンタープライズグレードの機能が追加されています。これは、デフォルトのMongoDBサーバー設定にいくつかの大きな改善を加えて設計されています。
プロプライエタリソフトウェアベンダーとの関係への支出を削減しながら、最適なパフォーマンスを実現するための高性能、セキュリティの向上、信頼性を提供します。
MongoDBの顕著な機能のためのPerconaサーバー
MongoDB Community Editionは、柔軟なスキーマ、分散トランザクション、JSONドキュメントの知識、ネイティブの高可用性などの重要な機能をすでに構成していることを考えると、Perconaサーバーの中核です。これに加えて、Percona Server for MongoDBは、上記の側面を満たすことを可能にする次の顕著な機能を統合しています。
- ホットバックアップ
- 保存データの暗号化
- 監査ログ
- Perconaメモリエンジン
- SASLを使用した外部LDAP認証
- HashiCorpVaultの統合
- 強化されたクエリプロファイリング
MongoDB用のPerconaサーバーは、動作を著しく低下させることなく、バックグラウンドで実行中のサーバーに物理データのバックアップを作成します。これは、adminデータベースで管理者としてcreateBackupコマンドを実行し、バックアップディレクトリを指定することで実現できます。
> use admin
switched to db admin
> db.runCommand({createBackup: 1, backupDir: "/my/backup/data/path"})
{ "ok" : 1 }
{"ok":1}を受信すると、バックアップは成功しました。そうしないと、たとえば空のバックアップディレクトリパスを指定すると、次のようなエラー応答が返される場合があります。
{ "ok" : 0, "errmsg" : "Destination path must be absolute" }
バックアップを復元するには、最初にmongodインスタンスを停止し、データディレクトリをクリーンアップし、ディレクトリからファイルをコピーしてから、mongodサービスを再起動する必要があります。これは、以下のコマンドを実行することで実行できます
$ service mongod stop && rm -rf /var/lib/mongodb/* && cp --recursive /my/backup/data/path /var/lib/mongodb/ && service mongod start
MongoDB 4.2.1-1にPerconaサーバーを使用している場合は、バックアップをアーカイブ形式で保存することもできます。
> use admin
> db.runCommand({createBackup: 1, archive: "path/to/archive.tar" })
デフォルト設定を使用して、またはより多くの構成を使用して、AWSS3に直接バックアップすることもできます。デフォルトのS3バケットバックアップの場合:
> db.runCommand({createBackup:1、s3:{bucket: "backup"、path: "newBackup"}})
MongoDBバージョン3.2では、WiredTigerストレージエンジンに保存データの暗号化が導入され、データファイルを復号化して、復号化キーのみを使用する当事者が読み取ることができるようになりました。 Percona Server for MongoDBの保存時のデータ暗号化は、MongoDBの保存時のデータ暗号化インターフェイスと連携するためにバージョン3.6で導入されました。ただし、最新バージョンには、AmazonAWSおよびKIMPキー管理サービスのサポートは含まれていません。
保存データが有効になっている場合、暗号化をロールバックファイルに適用することもできます。 Percona Server for MongoDBは、2つの選択暗号モードでencryptionCipherModeオプションを使用します:
- AES256-CBC(デフォルトの暗号モード)
- AES256-GCM
$ mongod ... --encryptionCipherMode or
$ mongod ... --encryptionCipherMode AES256-GCM
--ecryptionKeyFileオプションを使用して、暗号化キーを含むファイルへのパスを指定します。
$ mongod ... --enableEncryption --encryptionKeyFile <fileName>
すべてのデータベースシステムについて、管理者には、実行されているアクティビティを追跡する権限があります。 Percona Server for MongoDBでは、監査が有効になっている場合、サーバーは、承認や認証などのさまざまなユーザーイベントに関する情報を構成する監査ログファイルを生成します。ただし、監査を有効にしてサーバーを起動すると、実行時にログが動的に表示されなくなります。
MongoDB Community Editionの監査ログには、JSONとBSONの2つのデータ形式を使用できます。ただし、Percona Server for MongoDBの場合、監査ログはJSONファイルのみに制限されます。サーバーは、すべてをログに記録するMongoDBとは異なり、重要なコマンドのみをログに記録します。 Perconaのフィルタリング手順はフィルタリング構文の点で非常に不明確であるため、フィルタリングなしで監査ログを有効にすると、より多くのエントリが提供され、そこから独自の仕様に絞り込むことができます。
これは、ユーザーデータをディスクに保存しないWiredTigerストレージエンジンの特別な構成です。データは完全に常駐しており、ディスクに書き込まれる診断データを除いて、メインメモリですぐに利用できます。これにより、データ処理がはるかに高速になりますが、データセットを保持するのに十分なメモリがあることを確認する必要があり、サーバーがシャットダウンしないようにする必要があることを考慮してください。 --storageEngineコマンドで使用するストレージエンジンを選択できます。各ストレージエンジンには独自のデータモデルがあるため、1つのストレージエンジン用に作成されたデータは他のストレージエンジンと互換性がありません。たとえば、メモリ内ストレージエンジンを選択します。最初に実行中のmongodインスタンスを停止してから、次のコマンドを発行します:
$ service mongod stop
$ mongod --storageEngine inMemory --dbpath <newDataDir>
デフォルトのMongoDBCommunityエディションのデータが既にあり、Percona Memory Engineに移行する場合は、次のコマンドを発行して、mongodumbおよびmongorestoreユーティリティを使用します。
$ mongodump --out <dumpDir>
$ service mongod stop
$ rm -rf /var/lib/mongodb/*
$ sed -i '/engine: .*inMemory/s/#//g' /etc/mongod.conf
$ service mongod start
$ mongorestore <dumpDir>
SASLを使用した外部LDAP認証
クライアントがMongoDBmongodインスタンスに対して読み取りまたは書き込みリクエストを行う場合は常に、最初にMongoDBサーバーのユーザーデータベースに対して認証する必要があります。外部認証により、MongoDBサーバーはクライアントの資格情報(ユーザー名とパスワード)を別のサービスと照合できます。外部認証アーキテクチャには以下が含まれます:
- すべてのユーザー資格情報をリモートで保存するLDAPサーバー
- MongoDBサーバーとして使用されるSASLデーモン-リモートLDAPサービスのローカルプロキシ。
- SASLライブラリ:MongoDBクライアントとサーバーに必要な認証データを作成します。
- クライアントは実行中のmongodインスタンスに接続し、SASLライブラリを使用してPLAIN認証リクエストを作成します。
- 次に、認証リクエストは特別なMongoコマンドとしてサーバーに送信され、mongodサーバーはそのリクエストペイロードとともに受信します。
- サーバーは、SASLライブラリへの独自の参照を使用して、クライアントの資格情報から派生したいくつかのSASLセッションを作成します。
- mongodサーバーは認証ペイロードをSASLライブラリに渡し、SASLライブラリはそれをsaslauthdデーモンに渡します。デーモンはそれをLDAPに渡し、ユーザーが存在し、送信されたパスワードが正しいかどうかを確認することにより、認証要求時にYESまたはNOの応答を待ちます。
- saslauthdは、SASLライブラリを介してこの応答をmongodサーバーに渡し、SASLライブラリはそれに応じてリクエストを認証または拒否します。
このプロセスの図は次のとおりです:
外部ユーザーをmongodサーバーに追加するには:
> db.getSiblingDB("$external").createUser( {user : username, roles: [ {role: "read", db: "test"} ]} );
ただし、外部ユーザーは管理データベースで役割を割り当てることはできません。
HashiCorpVaultの統合
HashCorp Vaultは、機密情報へのアクセスを安全に保存および厳密に制御することにより、秘密を管理し、機密データを保護するように設計された製品です。以前のバージョンのPerconaでは、保存データの暗号化キーは、キーファイル内のサーバーにローカルに保存されていました。 HashCorp Vaultとの統合により、暗号化キーのセキュリティが大幅に向上します。
プロファイリングは、特に発行されたクエリが非常に多い場合に、データベースのパフォーマンスに低下の影響を及ぼします。 MongoDB用のPerconaサーバーは、データベースプロファイラーによって収集されるクエリの数を制限することで利用できるため、パフォーマンスへの影響が減少します。
Percona Server for MongoDBは、拡張されたオープンソースで高度にスケーラブルなデータベースであり、MongoDB Community Editionの互換性のあるドロップイン代替として機能しますが、構文と構成は類似しています。 Percona Serverエンジンを提供することで、特に保存中のデータセキュリティを強化し、データベースパフォーマンスを向上させ、他の機能の中でもプロファイリングレートを制限します。
Percona Server for MongoDBは、デプロイのオプションとしてClusterControlによって完全にサポートされています。