ApsaraDB for MongoDBシャードクラスターインスタンスは、各mongosノードの接続文字列を提供します。 mongosノードに接続した後、シャードクラスターインスタンスのデータベースにアクセスできます。 ただし、負荷分散と高可用性を実装するには、適切な方法を使用してシャードクラスターインスタンスに接続する必要があります。
背景情報
MongoDB のシャードクラスタは、高いスケーラビリティを促進するためにデータを複数のシャードに分散して格納します。 シャードクラスターを作成するとき、MongoDBはConfigserverを使用してクラスターのメタデータを格納し、1つ以上のmongosノードを使用してクラスターへの入り口をアプリケーションに提供します。 mongosノードはConfigserverからルーティング情報を読み取り、バックエンドの対応するシャードにリクエストをルーティングします。
mongosノードに接続すると、mongosノードはmongodプロセスとして機能します。
すべての Mongos ノードは等しいです。 1つ以上のmongosノードに接続して、シャードクラスターインスタンスにアクセスできます。
Mongosノードはステートレスであり、必要に応じてスケールアウトできます。 シャードクラスタインスタンスのサービス能力は、シャードの合計サービス能力とmongosノードの合計サービス能力の間の小さいものの影響を受けます。
シャードクラスターインスタンスにアクセスする場合、複数のmongosノード間でアプリケーションの負荷を均等に共有することを推奨します。
接続文字列URI
シャードクラスターインスタンスに正しく接続するには、MongoDBの接続文字列URIの形式を理解する必要があります。 あらゆる公式 drivers は、Connection string URI で MongoDB に接続することをサポートしています。
例:
mongodb://[username:password @]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
接続文字列URIで使用されるパラメータ:
mongodb://
: プレフィックス。接続文字列URIを示します。username:password @
: データベースへのログインに使用されるユーザー名とパスワード。hostX:portX
: mongosノードへの接続に使用される接続文字列のリスト。/database
: 認証が有効になっている場合、ユーザー名とパスワードに対応するデータベース。options
: インスタンスへの接続に使用される追加オプション。
Connection string URI を使用したシャードクラスタインスタンスへの接続
接続文字列URIを使用してシャードクラスターインスタンスに接続し、負荷分散と高可用性を実装できます。
シャードクラスタインスタンスの Connection string URI を取得します。 詳細については、「シャードクラスターインスタンスへの接続」をご参照ください。
取得した Connection string URI を使用して、アプリケーションをインスタンスに接続します。 詳細については、「異なる言語のプログラムコードを使用したApsaraDB For MongoDBスタンドアロンインスタンスへの接続」をご参照ください。
次の例は、Javaコード用です。 データベースアカウントはtestで、データベースはadminです。
文字列user = "test"; 文字列パスワード="MongoDB ****"; 文字列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を使用して複数のmongosノードに接続し、mongosノードに障害がある場合、クライアントはこの障害のあるノードを自動的にスキップし、他の通常のmongosノードに要求を配信できます。
多数のmongosノードが使用されている場合は、アプリケーションごとにグループ化できます。 たとえば、アプリケーション A、アプリケーション B、および 4 つの mongos ノードがあります。 アプリケーションAのURIにはmongos 1とmongos 2の接続文字列のみ、アプリケーションBのURIにはmongos 3とmongos 4の接続文字列のみを指定できます。このようにして、mongosノードを分離して、異なるアプリケーションに個別の入り口を提供できます。
アプリケーションは互いに分離された mongos ノードに接続されていますが、バックエンドでシャードを共有します。
一般的な接続オプション
読み書き分離を実装する
optionsパラメーターに
readPreference=secondaryPreferred
を追加して、読み取りプリファレンスをセカンダリノードに設定します。例:
データベースアカウントはtestで、データベースはadminです。
mongodb:// test:**** @ s-bp10fb1cf399 **** .mongodb.rds.aliyuncs.com:3717、s-bp10f49cdf5e **** .mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondaryPreferred
接続を制限する
optionsパラメーターに
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
大多数のノードにデータが書き込まれた後に確認応答を送信する
optionsパラメーターに
w= majority
を追加して、ApsaraDB for MongoDBが書き込み要求の大多数のノードにデータを書き込んだ後に確認応答をクライアントに送信するようにします。例:
データベースアカウントは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