本文将介绍实例的连接地址及设置项,通过对设置项的配置,可使用读写分离功能。
背景信息
当您只购买了主实例时,只会有一个连接地址,也叫集群地址(Cluster Endpoint),主要面向在线通用业务场景。 在主实例页面上,如果添加了只读实例,每个只读实例页面上会提供一个只读地址(Read Only Endpoint),专注离线拖数、跑批等资源链路隔离场景,确保只读资源可被独享。在HTAP场景下,购买了主实例和只读实例,您可以使用集群地址(Cluster Endpoint)和只读地址(Read Only Endpoint),通过集群地址的配置项,可使用读写分离功能。
配置集群地址和读写分离
在页面左上角选择目标实例所在地域。
在实例列表页,单击PolarDB-X 2.0页签。
单击主实例名称,打开基本信息界面。
在连接信息区域单击配置管理,查看集群地址配置项。
配置项说明:
参数
说明
资源配置
若已成功购买只读实例,可以选择将需要分担读流量的只读实例加入到主实例资源池中,未加入的将不分担主实例的流量。
只读实例自动加入
控制新购的只读实例是否加入到主实例资源池,默认开启。
智能读写分离
此功能默认为开启,会自动将AP流量路由给多个只读实例去计算,并做MPP并行加速,详细信息请参见读写分离。
只读流量占比
将原本路由给主实例存储的读查询按一定的比例规则路由给只读实例存储。
数据读一致性
强一致性:路由到只读实例的请求,保证一定能够查询到读请求执行前在主实例上已完成更新的数据,提供外部强一致性;
弱一致性:路由到只读实例的请求,读请求仅访问只读实例上当前的最新数据,会因为主从异步复制的架构产生数据读取延迟。
说明在主从复制延迟的条件下,强一致性读会等待直到读取到已完成更新的数据,默认的等待超时是3s。
只读实例延迟阈值
只读实例延迟超过阈值后,只读流量会发送给其他延迟正常的只读实例,或者根据只读实例可用性决定是否切回主库。
只读流量切回主实例
当所有只读实例的延迟超过阈值或者出现HA状态,则认为当前所有只读实例处于不可用的状态,判断是否将只读流量回切主库(建议只读实例个数≥2来提升可用性)。
已购买只读实例后,默认自动将只读实例加入到主实例资源池,自动开启智能读写分离;但是默认不会将TP读流量路由给只读实例,需要用户显式配置读写分离权重(只读流量占比)。
在强一致性读下的等待超时是3s,您可以在参数设置界面调整
loose_replica_read_timeout
参数控制等待超时时间。读写分离功能要求PolarDB-X版本需为5.4.13-16415631及以上。
配置只读实例的只读地址
在页面左上角选择目标实例所在地域。
在实例列表页,单击PolarDB-X 2.0页签。
在控制台上,单击只读实例名称,打开基本信息页面。
在连接信息区域,单击配置管理,查看只读地址配置项。
配置项说明:
强一致性:通过只读地址可以查看到主实例上提交的最新数据,满足全局数据查询一致性。如果主备延迟过大,提交的查询会等待。
弱一致性:通过只读地址可以查看到当前只读实例上最新数据,如果在主实例和只读实例间数据同步有延迟的话,不会等待,查询到数据立即返回。
常见问题
Q:购买了只读实例,为什么在只读实例的DN节点上没有任何流量?
A:您的读流量可能是TP类的读流量,已成功购买只读实例后,需要在集群地址的配置界面,配置只读流量占比。
Q:购买了只读实例,配置的读流量占比是0,为什么在只读实例上有流量?
A:您的流量可能是AP类型的流量,已成功购买只读实例后,智能读写分离功能默认是开启的,会自动将AP类型的流量转发给只读实例。您可以关闭智能读写分离功能,AP流量将不会被转发给只读实例。
Q:购买了只读实例,配置了读流量占比,为什么在只读实例的DN节点上没有任何流量?
A:主实例只会把流量按照配置的比例转发给加入主实例资源池的只读实例,已购买成功的只读实例可能从主实例的资源池中被移除了。
Q:是否支持不使用PolarDB-X提供的透明读写分离功能,在应用上通过使用不同的连接串来做读写分离?
A:支持。如无需使用PolarDB-X的读写分离功能,您可以将指定的只读实例从主实例资源池移除。
Q:是否必须要开启强一致性读能力?
A:如果业务没有强一致性读的需求,建议关闭强一致性读,此时性能更优。否则是有必要开启强一致性读功能的,开启后主备延迟大的时候(例如在做DDL),容易触发查询超时。开启强一致性读后的性能参数请参见谈谈PolarDB-X在读写分离场景的实践。
Q:如何关闭强一致性读?
A:如果应用连接了主实例,在主实例集群地址的配置项对话框中,选择弱一致性读;如果应用连接了只读实例,在只读实例连接地址的配置项对话框中,选择弱一致性读。
Q:使用PolarDB-X提供的读写分离,经常遇到查询超时,如何处理?
A:开启强一致性读后,查询超时可能是备库延迟导致的,备库延迟的原因可能有:
主库做DDL或者大批量的数据导入,导致备库延迟;
购买的只读实例规格比较小,远小于主实例的规格。