Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

自己管理型シャーディングされたクラスターの配置

項目一覧

  • Overview
  • Considerations
  • 手順

このチュートリアルでは、mongos、コンフィギュレーションサーバーのレプリカセット、2 つのシャーディングされたレプリカセットで構成される新しいシャーディングされたクラスターを作成します。

シャーディングされたクラスターの各ノードは、クラスター内の他のすべてのノードに接続できる必要があります。これには、すべてのシャードとコンフィギュレーションサーバーが含まれます。あらゆるインターフェースや、ファイアウォールなど、ネットワークとセキュリティ システムでこの接続が許可されていることを確認します。

重要

IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。

分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。

ホスト識別子のホスト名部分に localhost またはその IP アドレスを使用する場合、クラスター内の他の MongoDB コンポーネントのホスト設定としてその識別子を使用する必要があります

たとえば、sh.addShard() メソッドは、ターゲット シャードのホスト名として host パラメータを受け取ります。hostlocalhost に設定する場合、クラスター内の他のすべてのシャードのホスト名にも、localhost を使用する必要があります。

このチュートリアルには、自己管理型配置で 自己管理型内部認証とメンバーシップ認証 ロールベースのアクセス制御 を構成するために必要な手順は含まれて いませ ん 。

実稼働環境のシャーディングされたクラスターには、少なくとも x.509 セキュリティを内部認証とクライアントアクセスに採用する必要があります。

以下の手順でコンフィギュレーションサーバーのレプリカセットをデプロイします。

本番環境には、少なくとも 3 つのノードを含むコンフィギュレーションサーバーのレプリカセットをデプロイします。テスト用に、シングルノードのレプリカセットを作成できます。

注意

コンフィギュレーションサーバーのレプリカセットの名前には、どのシャードレプリカセットとも異なる名前を使用する必要があります。

このチュートリアルでは、コンフィギュレーションサーバーのレプリカセット ノードは次のホストに関連付けられています。

コンフィギュレーションサーバーのレプリカセット ノード
Hostname

Member 0

cfg1.example.net

Member 1

cfg2.example.net

Member 2

cfg3.example.net

1

mongod を起動するときに、構成ファイルまたはコマンド ラインで mongod 設定を指定します。

構成ファイルを使用する場合、

sharding:
clusterRole: configsvr
replication:
replSetName: <replica set name>
net:
bindIp: localhost,<hostname(s)|ip address(es)>
  • sharding.clusterRole から configsvr

  • replication.replSetName 希望するコンフィギュレーションサーバーのレプリカセットの名前に設定し、

  • net.bindIp オプションに、リモート クライアント (コンフィギュレーションサーバーのレプリカセットおよびシャーディングされたクラスターの他のノードを含む)がインスタンスに接続するために使用できるホスト名/IP アドレスまたはカンマ区切りのホスト名/IP アドレスのリストを設定します。

    警告

    非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。

  • storage.dbPathnet.port など、お使いの配置に適した追加設定。構成ファイルの詳細については、構成オプションを参照してください。

構成ファイル パスに --config オプションを設定して、mongod を起動します。

mongod --config <path-to-config-file>

コマンドライン オプションを使用する場合は、 --configsvr--replSet--bind_ip 、および配置に応じてその他のオプションを使用してmongodを起動します。 例:

警告

非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。

mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>

起動パラメータの詳細については、 mongodリファレンス ページを参照してください。

2

mongosh をコンフィギュレーションサーバーのノードの 1 つに接続します。

mongosh --host <hostname> --port <port>
3

mongoshから、 rs.initiate()メソッドを実行します。

rs.initiate() は、オプションのレプリカセット構成ドキュメントを指定できます。レプリカセット構成ドキュメントには、次を含めます。

  • _id は、replication.replSetName または --replSet オプションのいずれかで指定されたレプリカセット名に設定されます。

  • コンフィギュレーションサーバーのレプリカセットの configsvr フィールドが true に設定されます。

  • レプリカセットの各ノードごとのドキュメントを含む members 配列

重要

必ず 1 件のmongodインスタンス上でのみrs.initiate()を実行します。

rs.initiate(
{
_id: "myReplSet",
configsvr: true,
members: [
{ _id : 0, host : "cfg1.example.net:27019" },
{ _id : 1, host : "cfg2.example.net:27019" },
{ _id : 2, host : "cfg3.example.net:27019" }
]
}
)

レプリカセットの構成ドキュメントについて詳しくは、「自己管理型レプリカセット構成」を参照してください。

注意

rs.initiate()コマンドが完了するまでに数秒かかる場合があります。 この手順では、コンフィギュレーションサーバーのレプリカセット(CSRS)を使用するには、初期化が完了するまで待機する必要があります。 CSRS が初期化されていない場合、CSRS ノードで操作を実行しようとするとNotYetInitializedエラーが表示されます。

コンフィギュレーションサーバーのレプリカセット(CSRS)を初期化し、起動したら、シャード レプリカセットの作成に進みます。

本番環境には、少なくとも 3 つのノードを含むレプリカセットをデプロイします。テスト用に、シングルノードのレプリカセットを作成できます。

注意

シャード レプリカセットには、コンフィギュレーションサーバーのレプリカセットと同じ名前は使用できません。

各シャードに対してシャード レプリカセットを作成するには、次の手順を行います。

1

mongod を起動するときに、構成ファイルまたはコマンド ラインで mongod 設定を指定します。

構成ファイルを使用する場合、

sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
net:
bindIp: localhost,<ip address>

構成ファイル パスに --config オプションを設定して、mongod を起動します。

mongod --config <path-to-config-file>

コマンドライン オプションを使用する場合、--replSet--shardsvr--bind_ip オプション、および配置に応じてその他のオプションを使用して mongod を開始します。以下がその例です。

mongod --shardsvr --replSet <replSetname> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>

起動パラメータの詳細については、 mongodリファレンス ページを参照してください。

2

mongoshレプリカ セット ノードの 1 つに接続します。

mongosh --host <hostname> --port <port>
3

mongoshから、 rs.initiate()メソッドを実行します。

rs.initiate() は、オプションのレプリカセット構成ドキュメントを指定できます。レプリカセット構成ドキュメントには、次を含めます。

  • _id は、replication.replSetName または --replSet オプションのいずれかで指定されたレプリカセット名に設定されます。

  • レプリカセットの各ノードごとのドキュメントを含む members 配列

次の例では、ノードが 3 つあるレプリカセットを初期化します。

重要

必ず 1 件のmongodインスタンス上でのみrs.initiate()を実行します。

rs.initiate(
{
_id : "myReplSet",
members: [
{ _id : 0, host : "s1-mongo1.example.net:27018" },
{ _id : 1, host : "s1-mongo2.example.net:27018" },
{ _id : 2, host : "s1-mongo3.example.net:27018" }
]
}
)

mongos を起動するには、構成ファイルまたはコマンドライン パラメータを使用して構成サーバーを指定します。

構成ファイルを使用する場合は、sharding.configDB をコンフィギュレーションサーバーのレプリカセット名に設定し、レプリカセットの少なくとも 1 つのノードを <replSetName>/<host:port> 形式で設定します。

警告

非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。

sharding:
configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019
net:
bindIp: localhost,<hostname(s)|ip address(es)>

--configオプションと構成ファイルへのパスを指定して、mongos を起動します。

mongos --config <path-to-config>

構成ファイルの詳細については、構成オプションを参照してください。

コマンドライン パラメーターを使用する場合は、mongos を起動し、配置に応じて --configdb--bind_ip などのオプションを指定します。たとえば次のとおりです。

警告

非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。

mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>

配置に適したその他のオプションを含めます。

この時点で、シャーディングされたクラスターは mongos サーバーとコンフィギュレーションサーバーで構成されています。mongosh を使用してシャーディングされたクラスターに接続できるようになりました。

mongoshmongosに接続します。 mongosが実行されているhostportを指定します。

mongosh --host <hostname> --port <port>

mongoshmongos に接続したら、次の手順に進み、クラスターにシャードを追加します。

mongos に接続されている mongosh セッションで、sh.addShard() メソッドを使用して各シャードをクラスターに追加します。

次の操作では、単一のシャード レプリカセットをクラスターに追加します。

sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")

クラスターに必要なシャードがすべて含まれるまで、これらの手順を繰り返します。

コレクションをシャーディングする前に、コレクションのデータベースのシャーディングを有効にする必要があります。 データベースのシャーディングを有効にしてもデータは再分配されませんが、そのデータベース内のコレクションをシャーディングできるようになります。

に接続されているmongosh セッションから、mongos sh.enableSharding()メソッドを使用して、ターゲット データベースでシャーディングを有効にします。データベースでシャーディングを有効にすると、データベース内のコレクションをシャーディングできるようになります。

sh.enableSharding("<database>")

データベースのシャーディングを有効にすると、MongoDB はそのデータベースにプライマリシャードを割り当て、MongoDB はすべてのデータをそのデータベースに保存します。

重要

コレクションをシャーディングする前に、まずそのコレクションが存在するデータベースのシャーディングを有効にする必要があります。

コレクションをシャードするには、mongoshmongos に接続し、sh.shardCollection() メソッドを使用します。

注意

シャーディングとインデックス

コレクションにすでにデータが含まれている場合は、コレクションをシャードする前に、シャード キーをサポートするインデックスを作成する必要があります。コレクションが空の場合、MongoDB により sh.shardCollection() の一部としてインデックスが作成されます。

MongoDB でコレクションをシャードするには、次の 2 つの方法があります。

  • ハッシュ シャーディングでは、1 つのフィールドのハッシュ インデックスシャードキーとして使用して、シャーディングされたクラスター間でデータをパーティショニングします。

    sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )
  • 範囲ベースのシャーディングでは、複数のフィールドをシャードキーとして使用して、シャードキー値によって決定される連続した範囲にデータを分割できます。

    sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )

シャードキーの選択は、シャーディングの効率だけでなく、 ゾーンなどの特定のシャーディング機能を利用する能力にも影響します。効果的なシャードキーを選択する方法については、「シャードキーの選択」を参照してください。

mongosh は、convertShardKeyToHashed() メソッドを提供します。このメソッドでは、ハッシュインデックスと同じハッシュ関数が使用され、キーのハッシュ値を確認できます。

Tip

以下も参照してください。

戻る

自己管理型シャーディングされたクラスターの配置と管理