自适应负载均衡功能

最近更新时间:2024-06-25 16:24:01

我的收藏
云数据库 MySQL 数据库代理提供自适应负载均衡功能,可以根据后端的负载情况,将请求路由到负载更低的实例上,以达到数据库实例负载均衡,保证数据库实例响应速度的效果。

背景信息

在数据库的使用场景中,当使用了多个只读实例时,通常需要使用数据库代理进行负载均衡,使多个只读实例可以共同分担请求,以减轻主实例的负载压力。当前云数据库 MySQL 数据库代理已支持通过对各个只读实例分配读权重来实现负载均衡,这是一种“静态”的负载均衡能力,它能确保各个只读实例按照设置的读权重分配到对应的请求数。
如果有不同的业务从不同的数据库代理连接地址同时访问实例时,可能会出现负载不均衡的现象,而这种现象通过“静态”的负载均衡能力可能无法解决。
例如,用户具备1个主实例和2个只读实例(RO1、RO2),其中 RO2 被两个数据库代理连接地址使用,当 RO2 负载升高时,由于这种“静态”的负载均衡能力会使得被分配到的请求数是固定的,所以即使 RO2 的响应变慢,也会被继续分配请求,这将会拖慢整体的响应速度。因此,云数据库 MySQL 数据库代理提供自适应负载均衡功能,当发现 RO2 的请求变慢,负载过高时,数据库代理就会减少分配到 RO2 的请求,并将这些请求分配给其他只读实例,从而实现“动态”的负载均衡,确保数据库实例的整体响应速度。


前提条件

实例状态为运行中,且实例为双节点或三节点架构。
数据库代理内核小版本1.3.8及以上,如不满足请参见 升级数据库代理内核小版本
数据库内核版本要求如下,如不满足请参见 升级数据库内核小版本
MySQL 5.7内核小版本须20211030及以上。
MySQL 8.0内核小版本须20211202及以上。

操作场景

如果您的实例整体负载较高,出现某个只读实例被打满,而其他实例未被打满的情况,这时开启自适应负载均衡的代理会优先把请求发到仍能响应请求的实例上,这样可以充分利用所有实例的资源。请注意,如果是不合理的慢 SQL 导致的实例被打满,那么自适应负载均衡可能会让所有实例都出现高负载的情况,这种情况下仍需要解决慢 SQL 的问题。
如果您的全部实例规格一致,且所有实例配置的权重一致,需要均分流量时,可以直接选择开启自适应负载均衡,能够适应几乎所有场景的需求。
如下情况,不建议您开启自适应负载均衡功能:
1. 仅有一个数据库代理连接地址,建议使用“静态”的负载均衡能力,不建议开启自适应负载均衡功能。
2. 开启自适应负载均衡功能后,低负载情况下请求会不按设置的读权重进行路由,如果您希望严格按照设置的读权重进行路由,则不建议开启自适应负载均衡功能。
3. 对于慢 SQL 引起单个只读实例打满的情况,无法通过负载均衡来缓解,此时不建议开启自适应负载均衡功能,建议优先通过优化 SQL,或者增加实例规格来缓解此问题。

注意事项

更改负载均衡策略只对更改配置后的新连接生效。如果有存量连接,可能需要执行 重新负载均衡 操作使旧连接生效。
“动态”的负载均衡只能对经过数据库代理的流量生效,如果有不通过数据库代理而直连数据库的流量,可能会导致负载均衡策略效果不稳定。

开启/关闭自适应负载均衡

1. 登录 MySQL 控制台,在上方选择地域,然后单击目标实例 ID,进入实例管理页。
2. 在实例管理页,选择数据库代理 > 概览,在连接地址下找到目标访问地址,在其操作列单击调整配置

3. 在调整配置页面,根据实际需要,开启或关闭自适应负载均衡后的按钮,单击确定