为什么fe集群只能有一个leader,而不是可以配置多个leader分担写入请求压力?

Viewed 32

如题,只有Leader fe能处理写入请求,虽然是转发给be进行的,但是如果在高频率大批量写入的场合,Leader fe还是会成为doris集群的性能瓶颈,有没有好的解决方案?

2 Answers

首先明确一点,FE 只有两种角色:Follower 和 Observer。
而 Master 只是一组 Follower 节点中选择出来的一个 FE。Master 可以看成是一种特殊的 Follower。所以当我们被问及一个集群有多少 FE,都是什么角色时,正确的回答当时应该是所有 FE 节点的个数,以及 Follower 角色的个数和 Observer 角色的个数。

所有 Follower 角色的 FE 节点会组成一个可选择组,类似 Paxos 一致性协议里的组概念。组内会选举出一个 Follower 作为 Master。当 Master 挂了,会自动选择新的 Follower 作为 Master。而 Observer 不会参与选举,因此 Observer 也不会成为 Master。

一条元数据日志需要在多数 Follower 节点写入成功,才算成功。比如 3 个 FE,2 个写入成功才可以。这也是为什么 Follower 角色的个数需要是奇数的原因。Observer 角色和这个单词的含义一样,仅仅作为观察者来同步已经成功写入的元数据日志,并且提供元数据读服务。他不会参与多数写的逻辑。

通常情况下,可以部署 1 Follower + 2 Observer 或者 3 Follower + N Observer。前者运维简单,几乎不会出现 Follower 之间的一致性协议导致这种复杂错误情况(企业大多使用这种方式)。后者可以保证元数据写的高可用,如果是高并发查询场景,可以适当增加 Observer。

所以可以配置多个FE,再配置负载均衡:https://doris.apache.org/zh-CN/docs/3.0/admin-manual/cluster-management/load-balancing/

就算配置多个fe并前置负载均衡,还是只有一个leader fe呀,进行数据更新操作的时候,压力还是会集中到leader fe上面,并不能分担数据写入压力的需求;
另外求证一下,数据更新操作(insert/update/delete)请求是不是只有通过Leader fe才能进行?follwer fe只会分担查询操作的请求?