本文对常见的读写分离问题进行解答。
为什么修改后的权重没有生效 ?
修改权重后,新建的连接才会根据新权重进行分配,已存在的连接不会断开重连。
为什么各节点的负载不符合配置的读权重?
若各节点的负载与配置的读权重不同,主要检查如下两个方面:
- 请求语句是否包含了事务。包含了事务的所有请求只会路由到主库(包括事务读)。
- 是否只用了读写分离地址连接数据库。如果使用了主实例地址或者只读实例地址,这些地址收到的请求不会按权重分配。
为什么主库读权重为0时还有大量读请求路由到主库?
若读请求路由到主库,主要由如下两个原因造成:
- 包含了事务的所有请求只会路由到主库(包括事务读)。
- 所有被分配读权重的只读实例处于不可用状态或其延迟时间超过了您所设置的延迟阈值,系统将其判定为不可用状态。
读写分离如何确保数据读取的时效性?
详情请参见读写分离如何确保数据读取的时效性。
如何通过API设置读权重?
使用API修改延迟阈值和读权重请参见ModifyReadWriteSplittingConnection。
如何选择读写分离地址类型?
若您的应用程序部署在相同专有网络(VPC)内,建议使用内网地址,安全高效;若您的应用程序部署在本地或其他网络内,可以使用外网地址进行连接。切换方法请参见切换读写分离地址类型。
只读实例的同步为什么会延迟?
详情请参见RDS MySQL只读实例同步延迟原因与处理。
读写分离地址和主实例内外网地址有什么区别?
开通读写分离后将会生成一个读写分离地址,将其配置在应用程序中,客户端发出的请求到达该地址后会根据请求类型和实例权重自动分配给内部的各个实例。
应用程序中的地址如果是主实例的内网或外网地址,则请求只会交给主实例,而不会交给只读实例处理,必须在程序中添加主实例及各个只读实例的地址及权重,才能达到读写分离地址的效果。
读写分离地址可以修改吗?
读写分离地址暂不支持修改,当前读写分离地址是固定的,不会因为多次关闭/开启读写分离而变化,所以不用多次更改应用程序,降低了维护成本。
添加只读实例的时候会影响主实例吗?
创建只读实例的时候是从备实例复制数据,因此对主实例不会产生影响。
只读实例的读权重设置为0后,还可以访问它吗?
通过读写分离地址无法访问读权重为0的只读实例,只能使用只读实例的内网/外网地址进行访问。通常这种需求是为了将某个只读实例仅提供给某个业务使用。