跳到主要内容

DECOMMISSION BACKEND

描述

该语句用于将 BE 节点安全地从集群中下线。该操作为异步操作。

语法

ALTER SYSTEM DECOMMISSION BACKEND "<be_identifier>" [, "<be_identifier>" ... ]

其中:

be_identifier
: "<be_host>:<be_heartbeat_port>"
| "<backend_id>"

必选参数

1. <be_host>

可以是 BE 节点的主机名或 IP 地址

2. <heartbeat_port>

BE 节点的心跳端口,默认为 9050

3. <backend_id>

BE 节点的 ID

提示

<be_host><be_heartbeat_port><backend_id>均可通过SHOW BACKENDS语句查询获得。

权限控制

执行此 SQL 命令的用户必须至少具有以下权限:

权限对象说明
NODE_PRIV

注意事项

  1. 执行此命令后,可以通过SHOW BACKENDS语句查看下线状态(SystemDecommissioned列的值为true)和下线进度(TabletNum列的值会缓慢降到 0)
  2. 通常情况下,在TabletNum列的值会降到 0 后,此 BE 节点就会被删除,如果您不希望 Doris 自动删除 BE,可以更改 FE Master 的配置drop_backend_after_decommission为 false
  3. 当前 BE 如果存储的数据量比较大,那么 DECOMMISSION 操作可能持续几个小时甚至是几天
  4. 如果 DECOMMISSION 操作的进度卡住不动,具体表现为SHOW BACKENDS语句中的TabletNum列一直固定在某个值,那么可能是以下的一些情况:
    • 当前 BE 上的 tablet 找不到合适的其他 BE 去迁移,比如在一个 3 节点的集群有一张 3 副本的表,要下线其中一个节点,那么该节点找不到其他 BE 可用来迁移数据(其他两个 BE 已经各有一个副本了)
    • 当前 BE 上的 tablet 还在回收站中,可以清空回收站后,再等待
    • 当前 BE 上的 tablet 太大,导致在迁移单个 tablet 时,一直因为超时而无法将这个 tablet 迁移走,可以调整 FE Master 的配置max_clone_task_timeout_sec为一个更大的值(默认为 7200 秒)
    • 当前 BE 上的 tablet 存在未完成的事务,可以等事务完成或手动中止事务
    • 其他情况可以在 FE Master 的日志过滤replicas to decommission关键字,找出异常的 tablet,使用SHOW TABLET语句找到该 tablet 所属的表,然后重新建一张新的表,将数据从旧表迁移至新表,最后使用DROP TABLE FORCE的方式将旧表删除掉

示例

  1. 根据 BE 的 Host 和 HeartbeatPort 从集群中安全下线两个节点

    ALTER SYSTEM DECOMMISSION BACKEND "192.168.0.1:9050", "192.168.0.2:9050";
  2. 根据 BE 的 ID 从集群中安全下线一个节点

    ALTER SYSTEM DECOMMISSION BACKEND "10002";