ApsaraDB for MongoDB のシャードクラスターインスタンスでは、各 mongos ノードにエンドポイントが提供されます。任意の mongos ノードに接続して、データベースにアクセスできます。接続文字列 URI を使用すると、負荷分散と高可用性を実現できます。
背景情報

MongoDB のシャードクラスターは、高いスケーラビリティを実現するために、複数のシャードにデータを分散します。コンフィグサーバーはクラスターのメタデータを保存し、mongos ノードはアプリケーションのエントリポイントとして機能します。mongos ノードはルーティング情報を読み取り、リクエストを適切なシャードに転送します。
-
mongos ノードへのアクセスは、単一の mongod プロセスへのアクセスと同様です。
-
すべての mongos ノードは対等です。1 つ以上の mongos ノードを介して、シャードクラスターにアクセスできます。
-
mongos ノードはステートレスであり、スケールアウトできます。全体のサービス容量は、シャードの総容量と mongos の総容量のうち小さい方によって決まります。
-
アプリケーションのリクエストを複数の mongos ノードに均等に分散します。
接続文字列 URI について
シャードクラスターインスタンスに接続するには、MongoDB の 接続文字列 URI 形式を理解する必要があります。すべての MongoDB 公式 ドライバー は、この形式をサポートしています。
接続文字列 URI の例:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
パラメーターの説明:
-
mongodb://:これが接続文字列 URI であることを示すプレフィックスです。 -
username:password@:データベースへのログオンに使用するユーザー名とパスワードです。 -
hostX:portX:mongos ノードのアドレスです。 -
/database:認証データベースです。 -
?options:追加の接続オプションです。
シャードクラスターインスタンスへの接続
ApsaraDB for MongoDB は、接続文字列 URI を使用したシャードクラスターインスタンスへの接続をサポートしています。これにより、自動的な負荷分散と高可用性を実現できます。
-
シャードクラスターインスタンスの接続文字列 URI を取得します。詳細については、「シャードクラスターインスタンスへの接続」をご参照ください。
-
アプリケーションで、接続文字列 URI を使用してインスタンスに接続します。詳細については、「コードを使用したシャードクラスターインスタンスへの接続」をご参照ください。
次の Java の例では、データベースアカウント test を使用して admin データベースに接続します:
String user = "test"; String password = "MongoDB****"; String myURI = "mongodb://" + user + ":" + password + "@s-bp1c04c07823****.mongodb.rds.aliyuncs.com:3717,s-bp1500549e0b****.mongodb.rds.aliyuncs.com:3717/admin"; MongoClient mongoClient = new MongoClient(new MongoClientURI(myURI));この方法では、クライアントが複数の mongos ノードにリクエストを自動的に分散し、負荷分散を実現します。URI に 2 つ以上の mongos ノードが含まれている場合、いずれかのノードに障害が発生しても、クライアントは正常な残りのノードに自動的にフェイルオーバーします。
複数の mongos ノードがある場合、アプリケーションごとにグループ化してアクセス分離を行うことができます。たとえば、mongos ノードが 4 つあり、アプリケーションが 2 つある場合、アプリケーション A は mongos 1 と 2 を使用し、アプリケーション B は mongos 3 と 4 を使用するように構成できます。各アプリケーションの URI には、対応する mongos のアドレスのみを指定してください。
アプリケーションがアクセスする mongos ノードは相互に分離されますが、バックエンドのシャードは共有されたままです。
一般的な接続パラメーター
-
読み書き分離の実装
接続文字列 URI のオプションに
readPreference=secondaryPreferredを追加して、読み取りリクエストを優先的にセカンダリノードにルーティングします。例:
データベースアカウントは test、データベースは admin です:
mongodb://test:****@s-bp10fb1cf399****.mongodb.rds.aliyuncs.com:3717,s-bp10f49cdf5e****.mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondaryPreferred -
接続数の制限
接続文字列 URI のオプションに
maxPoolSize=xxを追加して、クライアントごとのコネクションプールサイズをxxに制限します。次の例では、コネクションプールサイズを 100 に設定します。データベースアカウントは test、データベースは admin です:
mongodb://test:****@s-bp10fb1cf399****.mongodb.rds.aliyuncs.com:3717,s-bp10f49cdf5e****.mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondaryPreferred&maxPoolSize=100 -
過半数ノードによる書き込み確認の保証
接続文字列 URI のオプションに
w=majorityを追加して、書き込みが成功する前に、ノードの過半数からの確認応答を必須にします。例:
データベースアカウントは test、データベースは admin です:
mongodb://test:****@s-bp10fb1cf399****.mongodb.rds.aliyuncs.com:3717,s-bp10f49cdf5e****.mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondaryPreferred&maxPoolSize=100&w=majority