ApsaraDB for MongoDB シャードクラスタインスタンスは、各 mongos ノードの接続情報を提供します。 mongos ノードを通じて ApsaraDB for MongoDB にアクセスできます。 ただし、ロードバランシングと高可用性を実現するには、適切な方法を使用してシャードクラスタインスタンスに接続する必要があります。
背景
MongoDB のシャードクラスタは、高いスケーラビリティを促進するためにデータを複数のシャードに分散して格納します。 シャードクラスタを作成するとき、MongoDB はクラスタのメタデータを格納するための構成サーバーを導入し、アプリケーション用にクラスタへのエントリを提供するための 1 つ以上の mongos ノードを導入します。 mongos ノードは構成サーバーからルーティング情報を読み取り、バックエンドの対応するシャードにリクエストをルーティングします。
- mongos ノードに接続すると、mongod プロセスとして機能することができます。
- すべての Mongos ノードは等しいです。 シャードクラスタにアクセスするために 1 つ以上の mongos ノードに接続できます。
- mongos ノードはステートレスであり、必要に応じてスケールアウトできます。 シャードクラスターのサービス能力は、シャードの総サービス能力と mongos ノードの総サービス能力の小さい方に左右されます。
- シャードクラスタにアクセスするときは、複数の mongos ノード間でアプリケーションの負荷を均等に分担することをお勧めします。
Connection string URI
正しくシャードクラスタインスタンスに接続するには、MongoDB の URI 形式の Connection string を理解する必要があります。 あらゆる公式 drivers は、Connection string URI で MongoDB に接続することをサポートしています。
Connection string URI の例:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][? options]]
mongodb://
:このアドレスが Connection string URI であることを示すプレフィックス。username:password@
:認証が有効になっている場合のデータベースへのログインに使用されるユーザー名とパスワード。hostX:portX
:mongos ノードへの接続に使用されるアドレスのリスト。/database
:認証が有効になっている場合のユーザー名とパスワードに対応するデータベース。? options
:追加の接続オプション。
Connection string URI を使用して、シャードクラスタインスタンスに接続します。
ApsaraDB for MongoDB では、Connection string URI を使用してシャードクラスタインスタンスに接続し、ロードバランシングと高可用性を実現できます。
- シャードクラスタインスタンスの Connection string URI を取得します。 詳細は、ApsaraDB for MongoDB インスタンスへの接続をご参照ください。
- 取得した Connection string URI を使用して、アプリケーションをインスタンスに接続します。 詳細は、MongoDB driver の接続をご参照ください。
Java コードの例を次に示します。
MongoClientURI connectionString = new MongoClientURI("mongodb://:****@s-xxxxxxxx.mongodb.rds.aliyuncs.com:3717,s-xxxxxxxx.mongodb.rds.aliyuncs.com:3717/admin"); // Replace **** with the password of the root user. MongoClient client = new MongoClient(connectionString); MongoDatabase database = client.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("mycoll");
注上記の方法でシャードクラスタインスタンスに接続すると、クライアントは自動的にリクエストを複数の mongos ノードに分散して負荷を分散させることができます。 その同時に、connection string URI を使用して 2 つ以上の mongos ノードに接続し、mongos ノードに障害がある場合、クライアントは自動的に障害のあるノードをスキップして他の機能している mongos ノードにリクエストを分散します。
一般的な接続オプション
- 読み取りと書き込みの分離
Connection string URI のoptionsに
readPreference=secondaryPreferred
を追加し、read preference をシャードのセカンダリノードに設定します。以下は、read preference を指定した connection string URI の例です。mongodb://root:xxxxxxxx@dds-xxxxxxxxxxxx:3717,xxxxxxxxxxxx:3717/admin? replicaSet=mgset-xxxxxx&readPreference=secondaryPreferred
- 接続を制限する
Connection string URI のoptionsに
maxPoolSize=xx
を追加することで、クライアントの接続プール内の最大接続数を xx に制限できます。 - 返す前にデータがほとんどのノードに書き込まれるようにする方法
Connection string URI のoptions に
w=majority
を追加することで、ApsaraDB for MongoDB は書き込みリクエストの主要ノードにデータを書き込んだ後、クライアントに確認応答を送信します。