Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Establecer los atributos de división de lectura y escritura y los pesos de lectura

Última actualización: Sep 17, 2026

Cada endpoint del proxy de base de datos de ApsaraDB RDS for MySQL cuenta con dos ajustes que controlan el enrutamiento del tráfico SQL: un read/write attribute (qué nodos procesan las escrituras frente a las lecturas) y un peso de lectura (cómo se distribuye el tráfico de lectura entre esos nodos). Una configuración correcta le permite escalar el throughput de lectura, aislar cargas de trabajo de reportes y ejecutar mantenimientos de forma segura sin interrumpir el servicio.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Enabled the database proxy para su instancia de RDS

  • Una instancia que ejecute High-availability Edition o Cluster Edition

    • High-availability Edition: Create at least one read-only instance para habilitar la división de lectura y escritura

    • Cluster Edition: los nodos primario y secundario gestionan la división de lectura y escritura de forma nativa

Atributos de lectura y escritura

Elegir un modo

Mode

Best for

Write requests

Read requests

Read/Write

Escalar el throughput de lectura entre instancias primarias y de solo lectura

Siempre se enruta a la instancia primaria

Se distribuye entre los nodos configurados según el peso

Read-only

Aislar cargas de trabajo de solo lectura, como los reportes

No se aceptan; los clientes reciben un error de conexión

Se distribuye entre las instancias de solo lectura mediante round-robin

El modo Read/Write requiere como mínimo una instancia primaria y una de solo lectura en la directiva de acceso del proxy. Es compatible con transaction splitting y connection pools.

El modo Read-only requiere como mínimo una instancia de solo lectura. La instancia primaria no participa en el enrutamiento y no se admite la división de transacciones. Cada conexión de cliente se asigna a una única conexión en una instancia de solo lectura. La capacidad total de conexiones equivale a la suma de las conexiones de todas las instancias de solo lectura configuradas.

En las instancias de Cluster Edition, el modo Read/Write envía las escrituras únicamente al nodo primario, mientras que el modo Read-only enruta las lecturas a los nodos secundarios mediante round-robin. La lista de permitidos de IP del proxy de base de datos se sincroniza automáticamente con la lista de permitidos de la instancia primaria.

Comportamiento de enrutamiento en casos extremos

La tabla a continuación muestra qué ocurre en el modo Read/Write cuando las instancias de solo lectura no están disponibles, así como en el modo Read-only bajo todos los escenarios de peso.

Mode

Weight method

Primary weight

Normal operation

Last read-only instance deleted

All read-only instances fail

Read-only

Asignado por el sistema o Custom

No se puede establecer

Primaria: sin lecturas ni escrituras (sin reenvío). Proxy: legible, no escribible

Primaria: sin lecturas ni escrituras. Proxy: error de conexión

Primaria: sin lecturas ni escrituras. Proxy: error de conexión

Read/Write

Asignado por el sistema

0 (predeterminado)

Primaria: solo escrituras, sin lecturas. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Read/Write

Custom

Mayor que 0

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Read/Write

Custom

0

Primaria: solo escrituras, sin lecturas. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

Primaria: lecturas y escrituras. Proxy: lecturas y escrituras

En el modo Read-only, "sin reenvío" significa que la instancia primaria no acepta solicitudes de lectura. Si el proxy no cuenta con instancias legibles, los clientes reciben un error de conexión.
En el modo Read/Write con el peso de la instancia primaria establecido en 0, las lecturas no se envían a dicha instancia de manera predeterminada. Solo se enrutan ahí si un nodo de solo lectura presenta errores, si un hint fuerza el enrutamiento hacia él o si la división de transacciones está habilitada.

Algoritmos de balanceo de carga

El proxy es compatible con dos algoritmos para distribuir las solicitudes de lectura entre los nodos.

Versiones anteriores a la 2.25.4: solo está disponible el balanceo de carga basado en pesos.

Versiones 2.25.4 y posteriores: ambos algoritmos están disponibles. Utilice el balanceo de carga basado en solicitudes activas, a menos que tenga un motivo específico para preferir la distribución estricta por pesos. Este método ofrece un mejor rendimiento máximo en los clústeres y reduce el impacto ante el fallo de un solo nodo.

Balanceo de carga basado en solicitudes activas (recomendado)

Enruta cada solicitud al nodo con la proporción (Active Requests / Node Weight) más baja. Se adapta en tiempo real a cargas desiguales y resulta menos afectado por los nodos lentos.

Ejemplo con un peso de 100 para la instancia primaria, 200 para el nodo de solo lectura 1 y 200 para el nodo de solo lectura 2:

Round

Primary active requests

Read-only node 1 active requests

Read-only node 2 active requests

Routed to

1

1 (proporción: 0.01)

5 (proporción: 0.025)

6 (proporción: 0.03)

Nodo primario

2

2

4

6

Nodo de solo lectura 1

3

2

5

3

Nodo de solo lectura 2

4

1

2

3

Nodo de solo lectura 1

5

1

2

1

Nodo de solo lectura 2

6

0

3

3

Nodo primario

Balanceo de carga basado en pesos

Distribuye las solicitudes de lectura de forma estricta según la proporción de pesos mediante un algoritmo round-robin. En cada ronda de programación se selecciona el nodo con el valor current_weight más alto y luego se ajustan los pesos de la siguiente manera:

  1. Selección: se elige el nodo con el valor current_weight más alto. Los empates se resuelven según la posición en la lista de configuración.

  2. Acumulación: después de cada ronda, el valor current_weight de cada nodo aumenta según su propio peso.

  3. Restablecimiento: el valor current_weight del nodo seleccionado se reduce en la suma de los pesos de todos los nodos.

Ejemplo con un peso de 100 para la instancia primaria, 200 para el nodo de solo lectura 1 y 200 para el nodo de solo lectura 2:

Round

Primary current_weight

Read-only node 1 current_weight

Read-only node 2 current_weight

Routed to

1

0

0

0

Nodo primario

2

−400

200

200

Nodo de solo lectura 1

3

−300

−100

400

Nodo de solo lectura 2

4

−200

100

100

Nodo de solo lectura 1

5

−100

−200

300

Nodo de solo lectura 2

6

0

0

0

Nodo primario

Configurar los atributos de lectura/escritura y los pesos de lectura

  1. Vaya a la página RDS Instances. En la barra de navegación superior, seleccione una región y haga clic en el ID de la instancia de destino.

  2. En el panel de navegación izquierdo, haga clic en Database Proxy.

  3. En la sección Connection Information, busque el endpoint del proxy de destino y haga clic en Modify Configuration dentro de la columna Actions.

  4. En el cuadro de diálogo, establezca Read/Write Attributes en una de las opciones siguientes:

    • Read/Write (Read/Write Splitting)

    • Read-only (Primary Instance Not Connected to Receive Write Requests)

  5. En la sección Read Weight Allocation, elija un método de ponderación:

    Method

    Behavior

    When to use

    Automatic Distribution

    El sistema asigna los pesos según el tipo de instancia. Las nuevas instancias de solo lectura se incluyen automáticamente con system-assigned weights, por lo que no se requiere ninguna actualización manual.

    Clústeres homogéneos donde la capacidad de las instancias es similar

    Custom

    Establezca un peso explícito (de 0 a 10,000) para cada instancia. Las nuevas instancias de solo lectura adoptan 0 de forma predeterminada y deben configurarse manualmente.

    Clústeres heterogéneos donde necesita un control preciso sobre la distribución del tráfico

    Cómo funcionan los pesos: un peso mayor implica más solicitudes de lectura. Por ejemplo, si la instancia primaria tiene un peso de 0 y tres instancias de solo lectura tienen pesos de 100, 200 y 200, las lecturas se distribuyen en una proporción de 1:2:2. La instancia primaria sigue recibiendo todas las escrituras.

El peso de lectura controla cómo el proxy distribuye las lecturas hacia las bases de datos del backend y es independiente de la función nearest access. Utilice ambas en conjunto para minimizar la latencia.
No se puede establecer el peso de las instancias que tengan un replication delay configurado.
Al eliminar una instancia de solo lectura, se quita su peso automáticamente. Los pesos de las demás instancias permanecen sin cambios.
Los cambios de peso surten efecto de inmediato sin interrumpir el servicio. Las conexiones existentes no se desconectan; tanto las nuevas como las actuales se enrutan según los pesos actualizados.
Antes de quitar una instancia de solo lectura del proxy: primero establezca su peso en 0, espere a que finalicen las sesiones activas y luego elimínela. Consulte Dar de baja una instancia de solo lectura sin interrumpir el servicio para conocer el procedimiento completo.

Efecto de los cambios de peso en las sesiones existentes

El comportamiento de los cambios de peso sobre las sesiones activas depende de la versión del motor del proxy de base de datos. Para comprobar o actualizar su versión, consulte View the minor engine version of a database proxy y Upgrade the minor engine version of a database proxy.

Scenario

Engine version 2.8.41 and later

Earlier than 2.8.41

¿Una nueva sesión se conecta a un nodo con peso 0?

No

No

Peso cambiado de distinto de cero a 0: ¿se elimina el nodo de las sesiones existentes?

No

No

Peso cambiado de distinto de cero a 0: ¿las sesiones existentes se enrutan con el nuevo peso?

No

Protocolo PS (Prepared Statement): No. Protocolo basado en texto: Sí

Peso cambiado de 0 a distinto de cero: ¿se añade el nodo a las sesiones existentes?

No

Sí

Peso cambiado de 0 a distinto de cero: ¿las sesiones existentes se enrutan con el nuevo peso?

No

Protocolo PS: No. Protocolo basado en texto: Sí

¿Quitar un nodo de solo lectura con peso distinto de cero genera conexiones transitorias?

No. El proxy cuenta con un mecanismo retry_failed_reads, pero devolver un conjunto de resultados justo en el momento de la eliminación aún podría generar una conexión transitoria.

Sí

¿Quitar un nodo de solo lectura con peso 0 genera conexiones transitorias?

No

Sí, si hay solicitudes ejecutándose en ese nodo al momento de quitarlo; de lo contrario, No

Al finalizar una conexión en un nodo de solo lectura con peso 0: ¿se termina la conexión?

Sí

Proxy 1.x: se termina solo si existen sesiones activas; de lo contrario, la conexión no se finaliza y se restablece automáticamente

Al finalizar una conexión en un nodo de solo lectura con peso distinto de cero: ¿se termina la conexión?

—

—

Mejores prácticas

Dar de baja una instancia de solo lectura sin interrumpir el servicio

Para quitar una instancia de solo lectura (por ejemplo, la instancia C en un clúster con la instancia primaria A y las instancias de solo lectura B y C) sin afectar el tráfico, siga estos pasos:

  1. Vaya a la página RDS Instances, seleccione la región y haga clic en el ID de la instancia primaria A.

  2. En el panel de navegación izquierdo, haga clic en Database Proxy. Dentro de la sección Connection Topology Management, haga clic en Modify Configuration.

  3. En el cuadro de diálogo Modify Proxy Endpoint (Terminal) Configuration, establezca el peso de lectura del nodo de solo lectura C en 0.

  4. Vaya a la página Monitoring and Alerts de la instancia de solo lectura C. En la sección Session Connection, supervise la métrica active_session y espere a que disminuya hasta 0.

    Si active_session no llega a 0 después de un tiempo de espera razonable, finalice las sesiones restantes de forma manual.
  5. En la pestaña Database Proxy de la instancia primaria A, quite la instancia de solo lectura C del endpoint del proxy.

Enrutar instrucciones SQL específicas con hints

Utilice hints de SQL para forzar la ejecución de una instrucción en un nodo específico. Esto resulta útil para escrituras dentro de una sentencia SELECT o para consultas que siempre deben usar una instancia de solo lectura.

Instancias de High-availability Edition:

  • /*FORCE_MASTER*/: enruta la instrucción a la instancia primaria, incluso si su peso de lectura es 0

  • /*FORCE_SLAVE*/: enruta la instrucción a una instancia de solo lectura

Instancias de Cluster Edition:

  • /*FORCE_MASTER*/: enruta la instrucción al nodo primario, incluso si su peso de lectura es 0

  • /*FORCE_SLAVE*/: enruta la instrucción a un nodo secundario

Agregue el hint al inicio de la instrucción:

/*FORCE_MASTER*/ SELECT * FROM table_name;

Reducir la latencia entre zonas

Para evitar un punto único de fallo, cree como mínimo dos instancias de solo lectura para una instancia primaria y despliéguelas en distintas zonas. Habilite la función nearest access para minimizar la latencia de red generada por el tráfico entre zonas. La función de acceso más cercano controla cómo su aplicación se conecta al proxy, mientras que los pesos de lectura determinan cómo el proxy enruta las solicitudes a las bases de datos del backend. Configure ambas en conjunto para obtener un rendimiento óptimo.

Preguntas frecuentes

¿La instancia primaria sigue siendo legible después de agregar instancias de solo lectura?

Después de agregar instancias de solo lectura, la instancia primaria permanece disponible para lectura y escritura en todo momento. Esta acción no afecta su capacidad de lectura ni de escritura.

La instancia primaria cuenta con su propio endpoint de conexión directa. Dicho endpoint se conecta directamente a la instancia primaria sin pasar por el proxy de base de datos, por lo que esta siempre es legible y escribible a través de él, independientemente de la configuración de los pesos de lectura.

El endpoint del proxy de base de datos se utiliza para la división de lectura y escritura. Cuando se establece la conexión mediante este endpoint, las solicitudes de lectura y escritura se enrutan según los pesos de lectura configurados. Si el peso de lectura de la instancia primaria se establece en 0, el proxy no reenvía las solicitudes de lectura a dicha instancia de manera predeterminada. Sin embargo, la instancia primaria en sí sigue siendo legible y escribible a través de su endpoint de conexión directa. Cuando todas las instancias de solo lectura experimentan una latencia que supera el umbral o dejan de estar disponibles, las solicitudes de lectura se enrutan automáticamente de vuelta a la instancia primaria para garantizar la continuidad del negocio.

Para controlar el enrutamiento de lectura y escritura a través del endpoint del proxy, ajuste los pesos de lectura en la configuración de Database Proxy.

Referencia de API

API operation

Description

DescribeDBProxy

Consultar los detalles del proxy de base de datos de una instancia de RDS

DescribeDBProxyEndpoint

Consultar la directiva de acceso de un endpoint del proxy de base de datos

ModifyDBProxyEndpoint

Modificar la directiva de acceso de un endpoint del proxy de base de datos

Pasos siguientes