内容纲要
背景
在实际业务中,有时需要根据 用户身份 和 时间段 将 SQL 请求路由到不同的 Quark Server,以实现资源隔离、负载均衡或成本优化。
例如:metric_sys 用户在凌晨 0-8点 使用 Quark1/Quark3 节点,白天 8-24点 切换到 Quark4 节点。
本文通过 Quark Gateway 的 TIME SCHEDULE 与 SESSION.REMOTE-USERS-ALLOW 规则组合,实现上述需求。
实现原理
TIME SCHEDULE:为每个 Quark Server 设置可用时间段,仅在该时间段内新建立的 Session 才会被路由到该 Server。TAG分组:将具有相同时间策略的 Server 归为同一 TAG,便于路由规则统一引用。- 用户匹配规则:通过
SESSION.REMOTE-USERS-ALLOW指定只有 metric_sys 用户的路由请求才走该规则,其他用户可走默认规则。
配置文件详解
1. servers.data
定义后端 Quark Server 的地址、TAG 及可用时间段。
NAME quark1
URI 172.18.131.171:10000
TAG tag-timediff
TIME SCHEDULE
ONLINE 00:00:00 08:00:00
NAME quark3
URI 172.18.131.171:10001
TAG tag-timediff
TIME SCHEDULE
ONLINE 00:00:00 08:00:00
NAME quark4
URI 172.18.131.173:10000
TAG tag-timediff
TIME SCHEDULE
ONLINE 08:00:00 24:00:00
说明:
- 三个 Server 使用相同的
TAG tag-timediff,表示它们属于同一组,但通过TIME SCHEDULE错开可用时间。 - quark1 和 quark3 仅在 00:00:00 ~ 08:00:00 可用,quark4 在 08:00:00 ~ 24:00:00 可用。
- 配置隔夜时间(如 23:00~次日 06:00)需要使用两段 ONLINE 语句,此处无需。
2. route-cluster.data
定义集群的故障转移策略。当首选 Server 不可用时,自动尝试同 TAG 的其他 Server。
NAME tag-timed-cluster
TRY tag-timediff [ANY,SERVER-FAIL]
TRY tag-timediff [ANY]
说明:
- 集群名称为
tag-timed-cluster。 - 第一个
TRY表示优先使用tag-timediff标签下的 Server,并开启宕机转发(SERVER-FAIL)。 - 第二个
TRY作为备用,当第一个 Server 宕机时,尝试同TAG的其他 Server。 - 由于三个 Server 的可用时间段不同,在某个时刻只有符合时间段的 Server 才会被选中,无法连接时自动尝试另一个。
3. route-rule.data
定义路由规则:仅 metric_sys 用户的请求转发到上述集群。
NAME metric_sys
CONDITIONS
SESSION.REMOTE-USERS-ALLOW "metric_sys"
TO tag-timed-cluster [ANY]
说明:
- 规则名 metric_sys。
- 条件:仅允许用户名为 metric_sys 的连接匹配此规则。
- 目标:转发到
tag-timed-cluster集群(即由servers.data和route-cluster.data定义的 Server 组)。 - 其他用户(未匹配此规则)将走默认规则(需在
route-rule.data中另外定义NAME DEFAULT规则,否则可能报错)。
行为验证
| 时间 | 用户 | 可用 Server | 路由结果 |
|---|---|---|---|
| 00:00~08:00 | metric_sys | quark1, quark3 | 随机或轮询到 quark1 或 quark3 |
| 08:00~24:00 | metric_sys | quark4 | 路由到 quark4 |
| 任意时间 | 其他用户 | 默认规则(需自行配置) | 按默认规则路由 |
注意:
TIME SCHEDULE仅对新建立的 Session 生效,已存在的 Session 不会因时间变化而切换 Server。- 若在 08:00 前建立的 Session 持续到 08:00 后,仍会在原 Server 上执行,不会自动迁移。
注意事项
- 默认规则:必须为其他用户配置
NAME DEFAULT规则,否则未匹配 metric_sys 规则的请求会失败。 - 时间格式:
ONLINE后的时间必须为 HH:MM:SS 格式,且结束时间不能小于开始时间(跨天需分段)。 - 用户认证:
SESSION.REMOTE-USERS-ALLOW仅在hive.server2.authentication为 LDAP 时生效,请确认认证方式。 - 重启生效:修改配置文件后,需重启 Quark Gateway 服务才能生效。
- 高可用:若某个 Server 宕机,Gateway 会自动尝试同
TAG的其他可用 Server(基于route-cluster.data的SERVER-FAIL配置)。
总结
通过组合 TIME SCHEDULE、TAG 和 SESSION.REMOTE-USERS-ALLOW,Quark Gateway 能够灵活实现基于用户和时间段的路由策略。此方案无需修改应用代码,仅通过配置文件即可完成,适用于资源隔离、按需调度等场景。