流量治理 #
随着数据规模的不断膨胀,使用多节点集群的分布式方式逐渐成为趋势。 对集群整体视角的统一管理能力,和针对单独组件细粒度的控制能力,是基于存算分离架构体系中不可或缺的功能。
概述 #
SphereEx-DBPlusEngine 为用户提供了流量治理的入口,为用户提供集群的集中化管理的统一管理能力以及在单点出现故障时精细化的操作能力。
集中化管理的挑战体现在包括数据库存储节点和中间件计算节点的状态统一管理,并且能够实时的探测到分布式环境下最新的变动情况,进一步为集群的控制和调度提供依据。
基本概念 #
- 熔断
阻断 SphereEx-DBPlusEngine 的连接入口。 当某个 SphereEx-DBPlusEngine 节点超过负载后,停止该节点对数据库的访问,使数据库能够保证足够的资源为其他节点提供服务。
适用场景 #
适用于计算节点过载保护的场景,当 SphereEx-DBPlusEngine 集群内某个计算节点超过负载后,通过熔断功能,阻断应用到该计算节点的流量,保证整个集群继续提供稳定服务。
使用前提 #
- 已安装部署 SphereEx-DBPlusEngine 和数据库集群,且服务运行正常;
- 已安装部署 SphereEx-Console,且服务运行正常。(可选)
使用限制 #
无
注意事项 #
熔断操作执行后,正在执行中的请求会被中断,业务有感知。
原理介绍 #
面对超负荷的流量下,SphereEx-DBPlusEngine 可针对某一节点进行熔断,以保证整个数据库集群得以继续运行。
使用指南 #
- 确认当前集群流量
通过 SphereEx-Console 或数据库确认集群整体流量情况,判断是否有将要过载的计算节点。
- 熔断计算节点
确认待熔断节点的会话情况,确认可熔断后,在其他 Proxy 以命令行方式对待熔断节点进行熔断,并确认熔断结果。被熔断节点的请求将被中断。
- 确认熔断结果
再次通过 SphereEx-Console 观察流量情况。
操作指南 #
通过 Console 确认当前集群及各节点流量
确认集群环境
确认当前 Proxy 中进行的请求
熔断指定计算节点
确认熔断结果
配置示例 #
通过 Console 确认当前集群及各节点流量
确认集群环境
mysql> SHOW COMPUTE NODES;
+--------------------------------------+----------------+------+--------+-----------+-----------+--------+---------+
| instance_id | host | port | status | mode_type | worker_id | labels | version |
+--------------------------------------+----------------+------+--------+-----------+-----------+--------+---------+
| 01faadb5-3b09-4449-ad1a-252ce0c50117 | 192.168.xx.102 | 3307 | OK | Cluster | -1 | | 1.3.0 |
| 9fca0beb-edc9-4b0f-8e3c-1a3187461565 | 192.168.xx.103 | 3307 | OK | Cluster | -1 | | 1.3.0 |
+--------------------------------------+----------------+------+--------+-----------+-----------+--------+---------+
2 rows in set (0.01 sec)
- 确认当前 Proxy 中进行的请求
mysql> SHOW PROCESSLIST;
- 熔断指定计算节点
mysql> DISABLE INSTANCE '9fca0beb-edc9-4b0f-8e3c-1a3187461565';
Query OK, 0 rows affected (0.06 sec)
mysql> SHOW COMPUTE NODES;
+--------------------------------------+----------------+------+---------------+-----------+-----------+--------+---------+
| instance_id | host | port | status | mode_type | worker_id | labels | version |
+--------------------------------------+----------------+------+---------------+-----------+-----------+--------+---------+
| 01faadb5-3b09-4449-ad1a-252ce0c50117 | 192.168.xx.102 | 3307 | OK | Cluster | -1 | | 1.3.0 |
| 9fca0beb-edc9-4b0f-8e3c-1a3187461565 | 192.168.xx.103 | 3307 | CIRCUIT_BREAK | Cluster | -1 | | 1.3.0 |
+--------------------------------------+----------------+------+---------------+-----------+-----------+--------+---------+
2 rows in set (0.02 sec)
- 确认熔断结果
可再次通过 Console 观察流量情况。
若手动在被熔断节点进行操作,操作将无法被执行。
mysql> SELECT * FROM WHERE t_user WHERE ID=1;
ERROR 13010 (01000): Circuit break open, the request has been ignored.
FAQ #
- 是否可以熔断全部的计算节点?
不可以。熔断操作不能熔断当前节点,因此计算集群中会保留一个计算节点。
- 对指定计算节点熔断后,是否会影响该节点上未执行完的请求?
有影响。正在执行中的请求会被中断,业务有感知。
- 熔断操作对监控日志和治理中心是否有影响?
无影响。
- 熔断 Proxy 后, 是否会对 Traffic Rule 的策略带来影响?
无影响。被熔断的 Proxy 将不会接收 Traffic Rule 的流量。