Observer 和 BE / FE 的本质区别
我们用一张表格来清晰地对比这三者的定位和职责:
角色 | 核心定位 | 存储什么数据? | 主要职责 | 能否独立工作? |
---|---|---|---|---|
FE (Frontend) | 大脑/管理层 | 元数据 (数据库/表结构、权限、BE节点列表等) | SQL解析优化、任务调度、元数据管理、高可用选举 | 不能。必须有BE来存储数据和执行任务。 |
BE (Backend) | 身体/劳动力 | 用户数据 (你存入的所有真实数据) | 存储数据分片(Tablets)、执行FE下发的计算任务 | 不能。必须有FE来指挥它工作。 |
Observer | FE的“只读副本” | 元数据 (和FE完全一样) | 只处理读请求 (SQL解析优化、任务调度),不参与元数据写入和选举 | 不能。它本质上是一种特殊类型的FE,同样需要BE来存储数据。 |
简单来说:
- FE vs BE: 这是最根本的区别。FE是管理者,BE是执行者。一个管脑力活,一个管体力活。
- Observer vs FE (Master/Follower): 这两者是同类,都是FE,都是“管理者”。区别在于职权不同。
- Master/Follower是核心决策层,能拍板、能投票。
- Observer是顾问/助理,能看报告、能分担查询分析工作,但不能拍板、不能投票。
- Observer vs BE: 这是完全不同的物种。Observer是管理者(一种FE),不存用户数据;BE是执行者,存储所有用户数据。你永远不会用Observer来替换BE,或者反过来。
一个关键点:增加BE是为了增加数据存储容量和计算能力;增加Observer是为了增加SQL接入和查询优化的并发处理能力。
Observer 是如何部署的
部署一个Observer节点,和你部署一个Follower节点的过程几乎完全一样,只是在最后一步的配置和注册上有所不同。
下面是详细的部署步骤,我们以给你的集群增加一个Observer为例:
部署场景
- 现有集群:
- 1个FE (Master): 172.22.0.10
- 1个BE: 172.22.0.11
- 目标: 增加一个Observer FE节点。
- 我们为它规划一个新的IP地址: 172.22.0.12
步骤1: 修改现有FE的配置 (fe.conf)
为了让整个集群知道即将有新成员加入,你需要先告诉现有的Master FE。
-
登录到Master FE容器:
Generated bash
1
docker exec -it doris-fe bash
content_copydownload
Use code with caution.Bash
-
修改fe.conf文件:
在Doris 2.1版本及以后,不再需要手动修改fe.conf的FE_SERVERS。我们通过SQL命令来动态添加。
步骤2: 准备新的Observer节点环境
你需要为新的Observer节点准备一台新的服务器或一个新的Docker容器。我们以Docker为例,修改 docker-compose.yml 文件。
Generated yaml
1 | version: "3.8" |
content_copydownload
Use code with caution.Yaml
注意: 在实际部署中,我们不再通过环境变量来配置BE,而是通过ADD BACKEND命令。这里为了简化,我们假设BE配置不变。
步骤3: 使用SQL命令添加Observer (最关键的一步)
在启动新的 fe-observer 容器之前或之后,你需要连接到现有的Master FE,然后执行一条SQL命令,告诉集群新成员的角色。
-
连接到Master FE的MySQL端口:
Generated bash
1
mysql -h 127.0.0.1 -P 9030 -u root
content_copydownload
Use code with caution.Bash
-
执行添加Observer的命令:
Generated sql
1
ALTER SYSTEM ADD OBSERVER "172.22.0.12:9010";
content_copydownload
Use code with caution.SQL
- ADD OBSERVER 这个关键词明确地告诉了Doris,新加入的 172.22.0.12:9010 这个FE节点是观察者角色。
- 如果想添加一个Follower,命令就是 ALTER SYSTEM ADD FOLLOWER “ip:port”;。
步骤4: 启动并验证
-
执行 docker-compose up -d 来启动包括新Observer在内的所有服务。
-
等待几分钟,让Observer从Master同步元数据。
-
连接到任何一个FE节点,执行 SHOW FRONTENDS;。
Generated sql
1
mysql -h 127.0.0.1 -P 9030 -u root -e "SHOW FRONTENDS;"
content_copydownload
Use code with caution.SQL
在输出结果中,你会看到两行:
- 一行是 fe1,它的 Role 是 MASTER。
- 另一行是 fe2,它的 Role 将是 OBSERVER。