分析型数据库Apache-Doris实战04-Observer

分析型数据库Apache-Doris实战04-Observer

Posted by 十渊 on 2025-07-08

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。

  1. 登录到Master FE容器:

    Generated bash

    1
    docker exec -it doris-fe bash

    content_copydownload

    Use code with caution.Bash

  2. 修改fe.conf文件:
    在Doris 2.1版本及以后,不再需要手动修改fe.conf的FE_SERVERS。我们通过SQL命令来动态添加。

步骤2: 准备新的Observer节点环境

你需要为新的Observer节点准备一台新的服务器或一个新的Docker容器。我们以Docker为例,修改 docker-compose.yml 文件。

Generated yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
version: "3.8"

services:
# --- 现有的 fe1 (Master) ---
fe1:
image: apache/doris:doris-fe-2.1.7
container_name: doris-fe-master
hostname: fe1
ports:
- "8030:8030"
- "9030:9030"
volumes:
- /home/doris/fe1/data:/opt/doris/fe/doris-meta
networks:
doris-net:
ipv4_address: 172.22.0.10
environment:
# FE_SERVERS 现在需要列出所有 FE 成员
- FE_SERVERS=fe1:172.22.0.10:9010,fe2:172.22.0.12:9010
- FE_ID=1

# --- 新增的 fe-observer ---
fe-observer:
image: apache/doris:doris-fe-2.1.7
container_name: doris-fe-observer
hostname: fe2
# Observer 通常不需要对外暴露端口,除非你想直接连它
# ports:
# - "8031:8030"
# - "9031:9030"
volumes:
- /home/doris/fe-observer/data:/opt/doris/fe/doris-meta
networks:
doris-net:
ipv4_address: 172.22.0.12
environment:
# FE_SERVERS 必须和所有 FE 成员保持一致
- FE_SERVERS=fe1:172.22.0.10:9010,fe2:172.22.0.12:9010
- FE_ID=2 # 每个FE必须有唯一的ID

# --- 现有的 be1 ---
be1:
image: apache/doris:doris-be-2.1.7
# ... be1 的配置保持不变 ...

networks:
doris-net:
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/16

content_copydownload

Use code with caution.Yaml

注意: 在实际部署中,我们不再通过环境变量来配置BE,而是通过ADD BACKEND命令。这里为了简化,我们假设BE配置不变。

步骤3: 使用SQL命令添加Observer (最关键的一步)

在启动新的 fe-observer 容器之前或之后,你需要连接到现有的Master FE,然后执行一条SQL命令,告诉集群新成员的角色。

  1. 连接到Master FE的MySQL端口:

    Generated bash

    1
    mysql -h 127.0.0.1 -P 9030 -u root

    content_copydownload

    Use code with caution.Bash

  2. 执行添加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: 启动并验证

  1. 执行 docker-compose up -d 来启动包括新Observer在内的所有服务。

  2. 等待几分钟,让Observer从Master同步元数据。

  3. 连接到任何一个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

引用资料