Les instances de jeu de réplicas ApsaraDB for MongoDB proposent six types de points de terminaison, allant des chaînes de connexion haute disponibilité aux adresses individuelles des nœuds. Cette rubrique décrit chaque type, présente le format des chaînes de connexion et vous guide pour récupérer votre point de terminaison et vous connecter à la base de données.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une instance de jeu de réplicas ApsaraDB for MongoDB dont l'état est Running
Un compte de base de données et un mot de passe (le compte par défaut est
root; créez un compte dédié pour les environnements de production)Un accès réseau à l'instance : l'hôte client figure dans la liste d'autorisation de l'instance et peut atteindre celle-ci via un réseau privé virtuel (VPC) ou le réseau public
(Réseau public uniquement) Un point de terminaison public demandé et activé
Choisir un type de point de terminaison
Pour les applications de production, utilisez une adresse ConnectionStringURI SRV ou ConnectionStringURI. Ces deux options offrent l'équilibrage de charge et le basculement automatique. L'adresse SRV est recommandée car le client découvre automatiquement tous les membres du jeu de réplicas et s'adapte aux changements de topologie : lorsque vous ajoutez ou supprimez des nœuds, aucune mise à jour de la chaîne de connexion n'est requise.
Les adresses à nœud unique (Primary, Secondary, ReadOnly) sont réservées à l'accès ponctuel et aux tâches administratives.
| Type de point de terminaison | Cas d'utilisation |
|---|---|
| ConnectionStringURI SRV (recommandé) | Applications de production. Le client découvre automatiquement tous les membres du jeu de réplicas, répartit les requêtes de lecture et effectue un basculement sans modifier la chaîne de connexion lors de l'ajout ou de la suppression de nœuds. |
| ConnectionStringURI | Applications de production lorsque l'option SRV n'est pas disponible. Contient les adresses de tous les nœuds et prend en charge readPreference pour la séparation lecture/écriture. Doit être mise à jour manuellement en cas de modification de la topologie du cluster. |
| ReadOnly ConnectionStringURI | Applications qui lisent uniquement les données lorsque l'instance dispose de nœuds en lecture seule. Achemine toutes les lectures vers les nœuds en lecture seule ; les requêtes d'écriture sont dirigées vers le nœud primaire. |
| Adresse Primary | Accès ponctuel ou tâches administratives. À ne pas utiliser en production : l'adresse change après un basculement primaire/secondaire. |
| Adresse Secondary | Accès ponctuel en lecture seule. À ne pas utiliser en production : le nœud peut être promu primaire après un basculement, ce qui entraînerait l'échec des requêtes d'écriture. |
| Adresse ReadOnly | Accès direct à un nœud en lecture seule spécifique. Disponible uniquement lorsque l'instance possède des nœuds en lecture seule. |
Les adresses Primary, Secondary et ReadOnly sont des points de terminaison à nœud unique. Lorsqu'un basculement primaire/secondaire se produit, les rôles des nœuds changent, ce qui peut perturber les applications connectées à ces adresses.
Récupérer le point de terminaison de la base de données
Accédez à la page Instances de jeu de réplicas. Sélectionnez un groupe de ressources et une région, puis cliquez sur l'ID de l'instance cible.
Dans le volet de navigation de gauche, cliquez sur Database Connections. La page affiche tous les points de terminaison disponibles pour l'instance, regroupés par type de réseau (VPC et réseau public).
(Adresse SRV uniquement) La console n'affiche pas les adresses SRV par défaut. Pour en obtenir une, cliquez sur Apply for Private SRV Endpoint ou Apply for Public SRV Endpoint. Avant de demander une adresse SRV publique, activez d'abord un point de terminaison public pour l'instance.
Les adresses SRV sont disponibles uniquement pour les instances utilisant des disques.
Formats de chaîne de connexion
Adresse ConnectionStringURI SRV
mongodb+srv://<username>:<password>@<srv-host>/<database>?[authSource=<authenticationDatabase>][&readPreference=<readPreference_value>][&readPreferenceTags=<readonly_Tags>]<other_options>
Paramètres :
| Paramètre | Description |
|---|---|
mongodb+srv:// |
Indique que les enregistrements DNS SRV sont utilisés pour la découverte de service. |
<username> |
Nom du compte de base de données. |
<password> |
Mot de passe du compte de base de données. |
<srv-host> |
Nom d'hôte du point de terminaison SRV. |
<database> |
Base de données à accéder. Par défaut : admin. |
authSource=<authenticationDatabase> (facultatif) |
Base de données où le compte est défini. L'enregistrement TXT des adresses SRV ApsaraDB for MongoDB définit authSource=admin par défaut, ce qui remplace la valeur <database>. Pour s'authentifier auprès d'une autre base de données, définissez explicitement authSource=<authenticationDatabase>. Pour plus d'informations, consultez la documentation officielle MongoDB. |
readPreference (facultatif) |
Contrôle le nœud qui reçoit les requêtes de lecture. Voir Routage des requêtes de lecture ci-dessous. |
readPreferenceTags (facultatif) |
Filtre les nœuds par tag. Utilisé avec readPreference. Voir Routage des requêtes de lecture ci-dessous. |
<other_options> |
Options de connexion supplémentaires. SSL est activé par défaut pour les connexions SRV. Ajoutez ssl=false pour le désactiver. Pour toutes les options, consultez la documentation officielle MongoDB. |
Les adresses SRV ou la découverte automatique des nœuds nécessitent une version minimale du pilote : pymongo >= 3,9.0, mongo-java-driver >= 3,10.0, mongodb-go-driver >= 1,1.0, pilote MongoDB Node.js >= 3,3.0, mongo-cxx-driver >= 3,8.
Exemple :
mongodb+srv://test:****@dds-bp19215393a0****-srv.mongodb.nosql.aliyuncs.com/admin?ssl=false
Adresse ConnectionStringURI
mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>][&readPreference=<readPreference_value>][&readPreferenceTags=<readonly_Tags>]
Paramètres :
| Paramètre | Description |
|---|---|
<username> |
Nom du compte de base de données. Par défaut : root. |
<password> |
Mot de passe du compte de base de données. |
<host> |
Nom de domaine d'un nœud primaire, secondaire ou en lecture seule. La chaîne répertorie tous les nœuds. |
<port> |
Port du nœud correspondant. |
<database> |
Base de données à accéder. Par défaut : admin. |
replicaSet=<replicaSet_value> |
Achemine les requêtes de lecture vers tous les nœuds du jeu de réplicas. <replicaSet_value> est l'ID unique du point de terminaison haute disponibilité. |
authSource=<authenticationDatabase> (facultatif) |
Base de données où le compte est défini. Si omis, <database> est utilisé comme base de données d'authentification. |
readPreference (facultatif) |
Contrôle le nœud qui reçoit les requêtes de lecture. Voir Routage des requêtes de lecture ci-dessous. |
readPreferenceTags (facultatif) |
Filtre les nœuds par tag. Utilisé avec readPreference. Voir Routage des requêtes de lecture ci-dessous. |
Lorsque vous ajoutez ou supprimez des nœuds de l'instance, mettez à jour cette chaîne de connexion pour inclure ou supprimer les adresses de nœuds correspondantes.
Exemple :
mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
Adresse ReadOnly ConnectionStringURI
mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
Paramètres :
| Paramètre | Description |
|---|---|
<username> |
Nom du compte de base de données. Par défaut : root. |
<password> |
Mot de passe du compte de base de données. |
<host> |
Domain Name d'un nœud en lecture seule. |
<port> |
Port du nœud en lecture seule. |
<database> |
Base de données à accéder. Par défaut : admin. |
readPreference=secondary&readPreferenceTags=role:readonly |
Achemine les requêtes de lecture vers les nœuds en lecture seule. La valeur readPreferenceTags est fixée à role:readonly et ne peut pas être modifiée. |
replicaSet=<replicaSet_value> |
Achemine les requêtes de lecture vers tous les nœuds du jeu de réplicas. <replicaSet_value> est l'ID unique du point de terminaison haute disponibilité. |
authSource=<authenticationDatabase> (facultatif) |
Base de données où le compte est défini. Si omis, <database> est utilisé comme base de données d'authentification. |
Si un nœud en lecture seule tombe en panne, les requêtes de lecture basculent automatiquement vers un autre nœud en lecture seule. Si tous les nœuds en lecture seule échouent, la connexion renvoie une erreur.
Exemple :
mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=mgset-6108****
Adresses Primary, Secondary et ReadOnly
Les trois types d'adresses à nœud unique utilisent le même format :
mongodb://<username>:<password>@<host>:<port>/<database>?[directConnection=true]
| Paramètre | Description |
|---|---|
<username> |
Nom du compte de base de données. |
<password> |
Mot de passe du compte de base de données. |
<host> |
Domain Name du nœud. |
<port> |
Port du nœud. |
<database> |
Base de données à accéder. Par défaut : admin. |
directConnection=true (facultatif) |
Envoie toutes les requêtes uniquement au nœud spécifié, en contournant la découverte de service. Sans ce paramètre, le client peut transférer les requêtes vers d'autres nœuds. |
Comportement par type de nœud :
| Type de nœud | **directConnection=true** |
**directConnection=false (par défaut)** |
|---|---|---|
| Primary | Les lectures et écritures sont dirigées vers le nœud primaire. | Les requêtes de lecture peuvent être transférées vers d'autres nœuds. |
| Secondary | Les requêtes d'écriture sont rejetées. | Les requêtes d'écriture sont transférées vers le nœud primaire. |
| ReadOnly | Les requêtes d'écriture sont rejetées. | Les requêtes d'écriture sont transférées vers le nœud primaire. |
Exemple :
mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?directConnection=true
Types de réseau
| Type de réseau | Description |
|---|---|
| VPC (par défaut) | Un réseau privé virtuel (VPC) offre un réseau isolé avec une sécurité et des performances accrues. Toutes les instances disposent de points de terminaison VPC par défaut. |
| Réseau classique | Réseau non isolé protégé par des groupes de sécurité ou des listes d'autorisation. Les nouvelles instances ne prennent plus en charge le réseau classique. Consultez [[Avis] Les nouvelles instances ApsaraDB for MongoDB ne prennent plus en charge le réseau classique](t2186680.xdita#). |
| Réseau public | La connexion via le réseau public est intrinsèquement moins sécurisée. Les points de terminaison publics ne sont pas activés par défaut : demandez un point de terminaison public avant de vous connecter. |
Routage des requêtes de lecture
Les paramètres readPreference et readPreferenceTags dans les adresses ConnectionStringURI SRV et ConnectionStringURI contrôlent le nœud qui gère les requêtes de lecture.
Valeurs readPreference
| Valeur | Comportement |
|---|---|
primary |
Toutes les lectures sont dirigées vers le nœud primaire. |
primaryPreferred |
Les lectures sont dirigées vers le nœud primaire en priorité. Si le primaire échoue, les lectures basculent vers les nœuds secondaires et en lecture seule. |
secondary |
Les lectures sont dirigées uniquement vers les nœuds secondaires et en lecture seule. En cas d'échec de tous ces nœuds, les lectures échouent (aucun basculement vers le primaire). |
secondaryPreferred |
Les lectures sont dirigées vers les nœuds secondaires et en lecture seule en priorité. Si tous échouent, les lectures basculent vers le nœud primaire. |
Valeurs readPreferenceTags
Utilisez readPreferenceTags avec readPreference pour cibler un sous-ensemble spécifique de nœuds. Ce paramètre n'est pas compatible avec readPreference=primary.
| Valeur du tag | Nœuds ciblés | Condition |
|---|---|---|
role:electable |
Nœuds secondaires (éligibles pour être élus primaires) | Instances sur disque uniquement |
role:readonly |
Nœuds en lecture seule | — |
Référence de la politique de routage
Combinez readPreference et readPreferenceTags pour répondre à vos exigences en matière de cohérence de lecture et de basculement.
| Politique | Nœud cible | Paramètres |
|---|---|---|
| Basculement vers le primaire autorisé | Primaire en priorité | readPreference=primaryPreferred |
| Secondaire et lecture seule en priorité | readPreference=secondaryPreferred |
|
| Secondaire en priorité (basculement vers le primaire si le secondaire échoue) | readPreference=secondaryPreferred&readPreferenceTags=role:electable |
|
| Lecture seule en priorité (basculement vers le primaire si la lecture seule échoue) | readPreference=secondaryPreferred&readPreferenceTags=role:readonly |
|
| Aucun basculement vers le primaire | Secondaire et lecture seule | readPreference=secondary |
| Secondaire uniquement (échec si tous les nœuds secondaires échouent) | readPreference=secondary&readPreferenceTags=role:electable |
|
| Lecture seule (échec si tous les nœuds en lecture seule échouent) | readPreference=secondary&readPreferenceTags=role:readonly |
Lorsque les lectures sont réparties entre les nœuds secondaires et en lecture seule, la charge peut être inégale. Utilisez readPreferenceTags pour cibler un type de nœud spécifique.
Exemple de séparation lecture/écriture
Pour les applications nécessitant une cohérence lecture-après-écriture sur certaines opérations, créez des clients de connexion distincts : l'un pointant vers le primaire pour les écritures, l'autre utilisant secondaryPreferred pour les lectures :
import pymongo
# Write client: sends all requests to the primary node
client_primary = pymongo.MongoClient(
"mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717"
"/admin?replicaSet=mgset-6108****&readPreference=primary"
)
# Read client: sends reads to secondary and read-only nodes first,
# falls back to primary if all secondary nodes fail
client_reads = pymongo.MongoClient(
"mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717"
"/admin?replicaSet=mgset-6108****&readPreference=secondaryPreferred"
)
db_write = client_primary["mydb"]
db_read = client_reads["mydb"]
# Use db_write for operations that require read-after-write consistency
db_write["orders"].insert_one({"order_id": "12345", "status": "pending"})
# Use db_read for general read queries
results = list(db_read["products"].find({"category": "electronics"}))
Connexion à la base de données
Après avoir récupéré votre point de terminaison, connectez-vous à l'aide de l'une des méthodes suivantes :
N'utilisez pas le compte root en production. Créez un compte de base de données dédié avec uniquement les autorisations nécessaires. Si vous avez oublié le mot de passe, réinitialisez-le avant de vous connecter.
Scénarios de connexion courants
Connexion depuis une instance ECS lorsque les types de réseau diffèrent
Connexion depuis une instance ECS dans une région différente via un réseau interne
Connexion depuis une instance ECS appartenant à un autre compte Alibaba Cloud via un réseau interne
Mise en œuvre de la séparation lecture/écriture pour une instance de jeu de réplicas