Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Set read/write splitting attributes and read weights

Dernière mise à jour :Aug 19, 2026

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 :

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 :

  1. Sélection : Le nœud avec la valeur current_weight la plus élevée est sélectionné. En cas d'égalité, la position dans la liste de configuration départage les nœuds.

  2. Accumulation : Après chaque tour, la valeur current_weight de chaque nœud augmente de son propre poids.

  3. Réinitialisation : La valeur current_weight du 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

  1. 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.

  2. Dans le volet de navigation de gauche, cliquez sur Database Proxy.

  3. Dans la section Connection Information, recherchez l'endpoint de proxy cible et cliquez sur Modify Configuration dans la colonne Actions.

  4. 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)

  5. 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 :

  1. Accédez à la page RDS Instances, sélectionnez la région et cliquez sur l'ID de l'instance primaire A.

  2. Dans le volet de navigation de gauche, cliquez sur Database Proxy. Dans la section Connection Topology Management, cliquez sur Modify Configuration.

    image

  3. 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.

    image

  4. Accédez à la page Monitoring and Alerts pour l'instance en lecture seule C. Dans la section Session Connection, surveillez la métrique active_session et attendez qu'elle tombe à 0.

    Si active_session n'atteint pas 0 après une attente raisonnable, arrêtez manuellement les sessions restantes.

    image

  5. 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