Chaque endpoint de proxy de base de données pour ApsaraDB RDS for MySQL dispose de deux paramètres qui contrôlent le routage du trafic SQL : un read/write attribute (déterminant quels nœuds gèrent les écritures par rapport aux lectures) et un poids de lecture (définissant la répartition du trafic de lecture entre ces nœuds). Une configuration correcte de ces paramètres vous permet d'augmenter le débit de lecture, d'isoler les charges de travail de reporting et d'effectuer des opérations de maintenance en toute sécurité sans interrompre le service.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Activé le proxy de base de données pour votre instance RDS
-
Une instance exécutant l'édition Haute disponibilité ou l'édition Cluster
Édition Haute disponibilité : Créez au moins une instance en lecture seule pour activer la séparation lecture/écriture
Édition Cluster : Les nœuds primaire et secondaire gèrent nativement la séparation lecture/écriture
Attributs de lecture/écriture
Choisir un mode
| Mode | Idéal pour | Requêtes d'écriture | Requêtes de lecture |
|---|---|---|---|
| Read/Write | Augmenter le débit de lecture sur les instances primaires et en lecture seule | Toujours acheminées vers l'instance primaire | Réparties entre les nœuds configurés en fonction du poids |
| Read-only | Isoler les charges de travail en lecture seule, telles que les rapports | Non acceptées — les clients reçoivent une erreur de connexion | Réparties entre les instances en lecture seule selon un algorithme round-robin |
Le mode Read/Write nécessite au moins une instance primaire et une instance en lecture seule dans la politique d'accès du proxy. Il prend en charge la séparation des transactions et les pools de connexions.
Le mode Read-only nécessite au moins une instance en lecture seule. L'instance primaire n'est pas impliquée dans le routage et la séparation des transactions n'est pas prise en charge. Chaque connexion client correspond à une seule connexion sur une instance en lecture seule. La capacité totale de connexion est égale à la somme des connexions sur toutes les instances en lecture seule configurées.
Pour les instances de l'édition Cluster, le mode Read/Write envoie les écritures uniquement au nœud primaire, tandis que le mode Read-only achemine les lectures vers les nœuds secondaires selon un algorithme round-robin. La liste d'autorisation IP du proxy de base de données reste automatiquement synchronisée avec celle de l'instance primaire.
Comportement de routage dans les cas limites
Le tableau ci-dessous indique ce qui se produit en mode Read/Write lorsque les instances en lecture seule ne sont pas disponibles, ainsi qu'en mode Read-only dans tous les scénarios de pondération.
| Mode | Méthode de pondération | Poids primaire | Fonctionnement normal | Dernière instance en lecture seule supprimée | Toutes les instances en lecture seule échouent |
|---|---|---|---|---|---|
| Read-only | Assigné par le système ou Personnalisé | Ne peut pas être défini | Primaire : ni lectures ni écritures (pas de transfert). Proxy : lisible, non inscriptible | Primaire : ni lectures ni écritures. Proxy : erreur de connexion | Primaire : ni lectures ni écritures. Proxy : erreur de connexion |
| Read/Write | Assigné par le système | 0 (par défaut) | Primaire : écritures uniquement, pas de lectures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures |
| Read/Write | Personnalisé | Supérieur à 0 | Primaire : lectures et écritures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures |
| Read/Write | Personnalisé | 0 | Primaire : écritures uniquement, pas de lectures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures | Primaire : lectures et écritures. Proxy : lectures et écritures |
En mode Read-only, « pas de transfert » signifie que l'instance primaire n'accepte pas les requêtes de lecture. Si le proxy ne dispose d'aucune instance lisible, les clients reçoivent une erreur de connexion.
En mode Read/Write avec le poids primaire défini sur 0, les lectures ne sont pas envoyées à l'instance primaire par défaut. Les lectures sont envoyées à l'instance primaire uniquement si un nœud en lecture seule est défaillant, si une indication force le routage vers celui-ci ou si la séparation des transactions est activée.
Algorithmes d'équilibrage de charge
Le proxy prend en charge deux algorithmes pour répartir les requêtes de lecture entre les nœuds.
Versions antérieures à 2.25.4 : Seul l'équilibrage de charge basé sur les poids est disponible.
Versions 2.25.4 et ultérieures : Les deux algorithmes sont disponibles. Utilisez l'équilibrage de charge basé sur les requêtes actives, sauf si vous avez une raison spécifique de préférer une distribution stricte basée sur les poids. Cette méthode offre de meilleures performances de pointe pour les clusters et réduit l'impact d'une panne d'un nœud unique.
Équilibrage de charge basé sur les requêtes actives (recommandé)
Achemine chaque requête vers le nœud présentant le ratio le plus faible (Active Requests / Node Weight). Cette approche s'adapte en temps réel à une charge inégale et est moins affectée par les nœuds lents.
Exemple avec un poids primaire de 100, un poids de 200 pour le nœud en lecture seule 1 et un poids de 200 pour le nœud en lecture seule 2 :
| Tour | Requêtes actives primaires | Requêtes actives du nœud en lecture seule 1 | Requêtes actives du nœud en lecture seule 2 | Acheminé vers |
|---|---|---|---|---|
| 1 | 1 (ratio : 0,01) | 5 (ratio : 0 025) | 6 (ratio : 0,03) | Nœud primaire |
| 2 | 2 | 4 | 6 | Nœud en lecture seule 1 |
| 3 | 2 | 5 | 3 | Nœud en lecture seule 2 |
| 4 | 1 | 2 | 3 | Nœud en lecture seule 1 |
| 5 | 1 | 2 | 1 | Nœud en lecture seule 2 |
| 6 | 0 | 3 | 3 | Nœud primaire |
Équilibrage de charge basé sur les poids
Répartit strictement les requêtes de lecture selon le ratio de poids en utilisant un algorithme round-robin. Chaque tour de planification sélectionne le nœud ayant la valeur current_weight la plus élevée, puis ajuste les poids comme suit :
Sélection : Le nœud avec la valeur
current_weightla plus élevée est sélectionné. En cas d'égalité, la position dans la liste de configuration départage les nœuds.Accumulation : Après chaque tour, la valeur
current_weightde chaque nœud augmente de son propre poids.Réinitialisation : La valeur
current_weightdu nœud sélectionné est réduite de la somme de tous les poids des nœuds.
Exemple avec un poids primaire de 100, un poids de 200 pour le nœud en lecture seule 1 et un poids de 200 pour le nœud en lecture seule 2 :
| Tour | **current_weight primaire** |
**current_weight du nœud en lecture seule 1** |
**current_weight du nœud en lecture seule 2** |
Acheminé vers |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | Nœud primaire |
| 2 | −400 | 200 | 200 | Nœud en lecture seule 1 |
| 3 | −300 | −100 | 400 | Nœud en lecture seule 2 |
| 4 | −200 | 100 | 100 | Nœud en lecture seule 1 |
| 5 | −100 | −200 | 300 | Nœud en lecture seule 2 |
| 6 | 0 | 0 | 0 | Nœud primaire |
Configurer les attributs de lecture/écriture et les poids de lecture
Accédez à la page RDS Instances. Dans la barre de navigation supérieure, sélectionnez une région, puis cliquez sur l'ID de l'instance cible.
Dans le volet de navigation de gauche, cliquez sur Database Proxy.
Dans la section Connection Information, recherchez l'endpoint de proxy cible et cliquez sur Modify Configuration dans la colonne Actions.
-
Dans la boîte de dialogue, définissez les Read/Write Attributes sur l'une des options suivantes :
Read/Write (Read/Write Splitting)
Read-only (Primary Instance Not Connected to Receive Write Requests)
-
Dans la section Read Weight Allocation, sélectionnez une méthode de pondération :
Méthode Comportement Quand l'utiliser Automatic Distribution Le système attribue les poids en fonction du type d'instance. Les nouvelles instances en lecture seule sont automatiquement incluses avec des poids assignés par le système — aucune mise à jour manuelle n'est nécessaire. Clusters homogènes où la capacité des instances est similaire Custom Définissez un poids explicite (0–10 000) pour chaque instance. Les nouvelles instances en lecture seule ont par défaut la valeur 0 et doivent être configurées manuellement. Clusters hétérogènes où vous souhaitez un contrôle précis de la répartition du trafic Fonctionnement des poids : Un poids plus élevé signifie davantage de requêtes de lecture. Par exemple, si l'instance primaire a un poids de 0 et que trois instances en lecture seule ont des poids de 100, 200 et 200, les lectures sont réparties selon un ratio de 1:2:2. L'instance primaire reçoit toujours toutes les écritures.
Le poids de lecture contrôle la manière dont le proxy distribue les lectures vers les bases de données backend et est indépendant de la fonctionnalité nearest access . Utilisez les deux conjointement pour minimiser la latence.
Les instances pour lesquelles un retard de réplication est configuré ne peuvent pas voir leur poids défini.
La suppression d'une instance en lecture seule supprime automatiquement son poids. Les poids des autres instances restent inchangés.
Les modifications de poids prennent effet immédiatement sans interruption de service. Les connexions existantes ne sont pas déconnectées ; les nouvelles connexions et les connexions existantes sont acheminées en fonction des poids mis à jour.
Avant de retirer une instance en lecture seule du proxy : Définissez d'abord son poids sur 0, attendez que les sessions actives soient vidées, puis retirez-la. Consultez la procédure complète dans Mettre hors ligne une instance en lecture seule sans interruption de service .
Impact des modifications de poids sur les sessions existantes
Le comportement des modifications de poids sur les sessions actives dépend de la version du moteur du proxy de base de données. Pour vérifier ou mettre à niveau votre version, consultez les rubriques Afficher la version mineure du moteur d'un proxy de base de données et Mettre à niveau la version mineure du moteur d'un proxy de base de données.
| Scénario | Version du moteur 2.8.41 et ultérieure | Antérieure à 2.8.41 |
|---|---|---|
| Une nouvelle session se connecte-t-elle à un nœud avec un poids de 0 ? | Non | Non |
| Poids modifié de non nul à 0 : le nœud est-il retiré des sessions existantes ? | Non | Non |
| Poids modifié de non nul à 0 : les sessions existantes sont-elles acheminées selon le nouveau poids ? | Non | Protocole PS (Prepared Statement) : Non. Protocole textuel : Oui |
| Poids modifié de 0 à non nul : le nœud est-il ajouté aux sessions existantes ? | Non | Oui |
| Poids modifié de 0 à non nul : les sessions existantes sont-elles acheminées selon le nouveau poids ? | Non | Protocole PS : Non. Protocole textuel : Oui |
| La suppression d'un nœud en lecture seule avec un poids non nul provoque-t-elle des connexions transitoires ? | Non. Le proxy dispose d'un mécanisme retry_failed_reads, mais le renvoi d'un jeu de résultats au moment de la suppression peut toujours provoquer une connexion transitoire. |
Oui |
| La suppression d'un nœud en lecture seule avec un poids de 0 provoque-t-elle des connexions transitoires ? | Non | Oui si des requêtes sont en cours d'exécution sur ce nœud au moment de la suppression ; sinon Non |
| Arrêt d'une connexion sur un nœud en lecture seule avec un poids de 0 : la connexion est-elle terminée ? | Oui | Proxy 1.x : terminée uniquement si des sessions actives existent ; sinon, la connexion n'est pas terminée et est automatiquement rétablie |
| Arrêt d'une connexion sur un nœud en lecture seule avec un poids non nul : la connexion est-elle terminée ? | — | — |
Bonnes pratiques
Mettre hors ligne une instance en lecture seule sans interruption de service
Pour supprimer une instance en lecture seule (par exemple, l'instance C dans un cluster avec l'instance primaire A et les instances en lecture seule B et C) sans perturber le trafic :
Accédez à la page RDS Instances, sélectionnez la région et cliquez sur l'ID de l'instance primaire A.
-
Dans le volet de navigation de gauche, cliquez sur Database Proxy. Dans la section Connection Topology Management, cliquez sur Modify Configuration.

-
Dans la boîte de dialogue Modify Proxy Endpoint (Terminal) Configuration, définissez le poids de lecture du nœud en lecture seule C sur 0.

-
Accédez à la page Monitoring and Alerts pour l'instance en lecture seule C. Dans la section Session Connection, surveillez la métrique
active_sessionet attendez qu'elle tombe à 0.Si
active_sessionn'atteint pas 0 après une attente raisonnable, arrêtez manuellement les sessions restantes.
Dans l'onglet Database Proxy de l'instance primaire A, retirez l'instance en lecture seule C de l'endpoint de proxy.
Router des instructions SQL spécifiques avec des indications
Utilisez des indications SQL pour forcer l'exécution d'une instruction sur un nœud spécifique. Cela s'avère utile pour les écritures au sein d'une instruction SELECT ou pour les requêtes qui doivent toujours utiliser une instance en lecture seule.
Instances de l'édition Haute disponibilité :
/*FORCE_MASTER*/— achemine l'instruction vers l'instance primaire, même si son poids de lecture est de 0/*FORCE_SLAVE*/— achemine l'instruction vers une instance en lecture seule
Instances de l'édition Cluster :
/*FORCE_MASTER*/— achemine l'instruction vers le nœud primaire, même si son poids de lecture est de 0/*FORCE_SLAVE*/— achemine l'instruction vers un nœud secondaire
Ajoutez l'indication au début de l'instruction :
/*FORCE_MASTER*/ SELECT * FROM table_name;
Réduire la latence inter-zones
Pour éviter un point de défaillance unique, créez au moins deux instances en lecture seule pour une instance primaire et déployez-les dans différentes zones. Activez la fonctionnalité nearest access afin de minimiser la latence réseau due au trafic inter-zones. La fonctionnalité nearest access contrôle la manière dont votre application se connecte au proxy, tandis que les poids de lecture contrôlent la façon dont le proxy achemine les requêtes vers les bases de données backend. Configurez les deux conjointement pour des performances optimales.
FAQ
L'instance primaire reste-t-elle lisible après l'ajout d'instances en lecture seule ?
Après l'ajout d'instances en lecture seule, l'instance primaire reste lisible et inscriptible à tout moment. L'ajout d'instances en lecture seule n'affecte ni la lisibilité ni l'inscriptibilité de l'instance primaire.
L'instance primaire possède son propre endpoint de connexion direct (par exemple, rm-xxxxx.mysql.rds.aliyuncs.com). Cet endpoint se connecte directement à l'instance primaire sans passer par le proxy de base de données, de sorte que l'instance primaire est toujours lisible et inscriptible via cet endpoint, indépendamment de la configuration du poids de lecture.
L'endpoint de proxy de base de données (par exemple, mr-xxxxx.rwlb.rds.aliyuncs.com) est utilisé pour la séparation lecture/écriture. Lors de la connexion via l'endpoint de proxy, les requêtes de lecture et d'écriture sont acheminées en fonction des poids de lecture configurés. Lorsque le poids de lecture de l'instance primaire est défini sur 0, le proxy ne transfère pas les requêtes de lecture vers l'instance primaire par défaut. Toutefois, l'instance primaire elle-même reste lisible et inscriptible via son endpoint de connexion direct. Lorsque toutes les instances en lecture seule présentent une latence dépassant le seuil ou deviennent indisponibles, les requêtes de lecture sont automatiquement reroutées vers l'instance primaire pour assurer la continuité des activités.
Pour contrôler le routage lecture/écriture via l'endpoint de proxy, ajustez les poids de lecture dans la configuration de Database Proxy.
Référence API
| Opération API | Description |
|---|---|
| DescribeDBProxy | Interroger les détails du proxy de base de données pour une instance RDS |
| DescribeDBProxyEndpoint | Interroger la politique d'accès d'un endpoint de proxy de base de données |
| ModifyDBProxyEndpoint | Modifier la politique d'accès d'un endpoint de proxy de base de données |
Étapes suivantes
Configurer l'accès le plus proche — réduire la latence en acheminant les connexions de l'application vers le nœud de proxy le plus proche
Utiliser la fonctionnalité de séparation des transactions — améliorer le débit de lecture pour les transactions mixtes lecture/écriture
Définir le type de pool de connexions — réduire la surcharge de connexion pour les charges de travail à forte concurrence
Règles par défaut d'attribution des poids de lecture — comprendre comment le système attribue les poids en mode Automatic Distribution