跳到主要内容
版本: 最新版本-3.5

手动部署 StarRocks

提示

手动部署的准备工作在 部署先决条件检查环境配置 文档中概述。如果您计划生产部署,请从那里开始。如果您刚开始使用 StarRocks,并且想按照快速入门之一进行操作,请参阅 快速入门

本主题介绍如何手动部署 shared-nothing StarRocks(其中 BE 负责存储和计算)。对于其他安装模式,请参阅 部署概述

要部署 shared-data StarRocks 集群(解耦存储和计算),请参阅 部署和使用 shared-data StarRocks

步骤 1:启动 Leader FE 节点

以下过程在 FE 实例上执行。

  1. 创建一个专用目录用于元数据存储。 我们建议将元数据存储在与 FE 部署文件不同的单独目录中。 确保此目录存在并且您具有对其的写入权限。

    # Replace <meta_dir> with the metadata directory you want to create.
    mkdir -p <meta_dir>
  2. 导航到存储您之前准备的 StarRocks FE 部署文件的目录,并修改 FE 配置文件 fe/conf/fe.conf

    a. 在配置项 meta_dir 中指定元数据目录。

    # Replace <meta_dir> with the metadata directory you have created.
    meta_dir = <meta_dir>

    b. 如果 环境配置清单 中提到的任何 FE 端口被占用,您必须在 FE 配置文件中分配有效的替代项。

    http_port = aaaa        # Default: 8030
    rpc_port = bbbb # Default: 9020
    query_port = cccc # Default: 9030
    edit_log_port = dddd # Default: 9010

    注意

    如果您想在集群中部署多个 FE 节点,您必须为每个 FE 节点分配相同的 http_port

    c. 如果您想为您的集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks 并为 FE 节点分配一个专用 IP 地址(以 CIDR 格式)。 如果您想为您的集群启用 FQDN 访问,您可以忽略此配置项。

    priority_networks = x.x.x.x/x

    注意

    • 您可以在您的终端中运行 ifconfig 来查看实例拥有的 IP 地址。
    • 从 v3.3.0 开始,StarRocks 支持基于 IPv6 的部署。

    d. 如果您的实例上安装了多个 JDK,并且您想使用与环境变量 JAVA_HOME 中指定的 JDK 不同的特定 JDK,您必须通过在配置文件中添加配置项 JAVA_HOME 来指定所选 JDK 的安装路径。

    # Replace <path_to_JDK> with the path where the chosen JDK is installed.
    JAVA_HOME = <path_to_JDK>

    f. 有关高级配置项的信息,请参阅 参数配置 - FE 配置项

  3. 启动 FE 节点。

    • 要为您的集群启用 IP 地址访问,请运行以下命令以启动 FE 节点

      ./fe/bin/start_fe.sh --daemon
    • 要为您的集群启用 FQDN 访问,请运行以下命令以启动 FE 节点

      ./fe/bin/start_fe.sh --host_type FQDN --daemon

      请注意,您只需在首次启动节点时指定参数 --host_type 一次。

      注意

      在启动启用了 FQDN 访问的 FE 节点之前,请确保您已在 /etc/hosts 中为所有实例分配了主机名。 有关更多信息,请参阅 环境配置清单 - 主机名

  4. 检查 FE 日志以验证 FE 节点是否成功启动。

    cat fe/log/fe.log | grep thrift

    类似 "2022-08-10 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020." 的日志记录表明 FE 节点已正确启动。

步骤 2:(对于 shared-nothing)启动 BE 服务

注意

您只能向 shared-nothing 集群添加 BE 节点。 不建议向 shared-data 集群添加 BE 节点,并且可能导致未知的行为。

以下过程在 BE 实例上执行。

  1. 创建一个专用目录用于数据存储。 我们建议将数据存储在与 BE 部署目录不同的单独目录中。 确保此目录存在并且您具有对其的写入权限。

    # Replace <storage_root_path> with the data storage directory you want to create.
    mkdir -p <storage_root_path>
  2. 导航到存储您之前准备的 StarRocks BE 部署文件的目录,并修改 BE 配置文件 be/conf/be.conf

    a. 在配置项 storage_root_path 中指定数据目录。

    # Replace <storage_root_path> with the data directory you have created.
    storage_root_path = <storage_root_path>

    b. 如果 环境配置清单 中提到的任何 BE 端口被占用,您必须在 BE 配置文件中分配有效的替代项。

    be_port = vvvv                   # Default: 9060
    be_http_port = xxxx # Default: 8040
    heartbeat_service_port = yyyy # Default: 9050
    brpc_port = zzzz # Default: 8060

    c. 如果您想为您的集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks 并为 BE 节点分配一个专用 IP 地址(以 CIDR 格式)。 如果您想为您的集群启用 FQDN 访问,您可以忽略此配置项。

    priority_networks = x.x.x.x/x

    注意

    • 您可以在您的终端中运行 ifconfig 来查看实例拥有的 IP 地址。
    • 从 v3.3.0 开始,StarRocks 支持基于 IPv6 的部署。

    d. 如果您的实例上安装了多个 JDK,并且您想使用与环境变量 JAVA_HOME 中指定的 JDK 不同的特定 JDK,您必须通过在配置文件中添加配置项 JAVA_HOME 来指定所选 JDK 的安装路径。

    # Replace <path_to_JDK> with the path where the chosen JDK is installed.
    JAVA_HOME = <path_to_JDK>

    有关高级配置项的信息,请参阅 参数配置 - BE 配置项

  3. 启动 BE 节点。

    ./be/bin/start_be.sh --daemon

    注意

    • 在启动启用了 FQDN 访问的 BE 节点之前,请确保您已在 /etc/hosts 中为所有实例分配了主机名。 有关更多信息,请参阅 环境配置清单 - 主机名
    • 您无需在启动 BE 节点时指定参数 --host_type
  4. 检查 BE 日志以验证 BE 节点是否成功启动。

    cat be/log/be.INFO | grep heartbeat

    类似 "I0810 16:18:44.487284 3310141 task_worker_pool.cpp:1387] Waiting to receive first heartbeat from frontend" 的日志记录表明 BE 节点已正确启动。

  5. 您可以通过在其他 BE 实例上重复上述步骤来启动新的 BE 节点。

注意

当至少三个 BE 节点被部署并添加到 StarRocks 集群时,会自动形成 BE 的高可用性集群。 如果您只想部署一个 BE 节点,您必须在 FE 配置文件 fe/conf/fe.conf 中将 default_replication_num 设置为 1

default_replication_num = 1

步骤 2:(对于 shared-data)启动 CN 服务

注意

您只能向 shared-data 集群添加 CN 节点。 不建议向 shared-nothing 集群添加 CN 节点,并且可能导致未知的行为。

计算节点 (CN) 是一种无状态计算服务,本身不维护数据。 您可以选择性地向您的集群添加 CN 节点,以提供额外的查询计算资源。 您可以使用 BE 部署文件部署 CN 节点。 自 v2.4 起支持计算节点。

  1. 导航到存储您之前准备的 StarRocks BE 部署文件的目录,并修改 CN 配置文件 be/conf/cn.conf

    a. 如果 环境配置清单 中提到的任何 CN 端口被占用,您必须在 CN 配置文件中分配有效的替代项。

    be_port = vvvv                   # Default: 9060
    be_http_port = xxxx # Default: 8040
    heartbeat_service_port = yyyy # Default: 9050
    brpc_port = zzzz # Default: 8060

    b. 如果您想为您的集群启用 IP 地址访问,您必须在配置文件中添加配置项 priority_networks 并为 CN 节点分配一个专用 IP 地址(以 CIDR 格式)。 如果您想为您的集群启用 FQDN 访问,您可以忽略此配置项。

    priority_networks = x.x.x.x/x

    注意

    • 您可以在您的终端中运行 ifconfig 来查看实例拥有的 IP 地址。
    • 从 v3.3.0 开始,StarRocks 支持基于 IPv6 的部署。

    c. 如果您的实例上安装了多个 JDK,并且您想使用与环境变量 JAVA_HOME 中指定的 JDK 不同的特定 JDK,您必须通过在配置文件中添加配置项 JAVA_HOME 来指定所选 JDK 的安装路径。

    # Replace <path_to_JDK> with the path where the chosen JDK is installed.
    JAVA_HOME = <path_to_JDK>

    有关高级配置项的信息,请参阅 参数配置 - BE 配置项,因为 CN 的大多数参数都继承自 BE。

  2. 启动 CN 节点。

    ./be/bin/start_cn.sh --daemon

    注意

    • 在启动启用了 FQDN 访问的 CN 节点之前,请确保您已在 /etc/hosts 中为所有实例分配了主机名。 有关更多信息,请参阅 环境配置清单 - 主机名
    • 您无需在启动 CN 节点时指定参数 --host_type
  3. 检查 CN 日志以验证 CN 节点是否成功启动。

    cat be/log/cn.INFO | grep heartbeat

    类似 "I0313 15:03:45.820030 412450 thrift_server.cpp:375] heartbeat has started listening port on 9050" 的日志记录表明 CN 节点已正确启动。

  4. 您可以通过在其他实例上重复上述步骤来启动新的 CN 节点。

步骤 3:设置集群

在所有 FE 和 BE/CN 节点都正确启动后,您可以设置 StarRocks 集群。

以下过程在 MySQL 客户端上执行。 您必须安装 MySQL 客户端 5.5.0 或更高版本。

  1. 通过您的 MySQL 客户端连接到 StarRocks。 您需要使用初始帐户 root 登录,并且默认密码为空。

    # Replace <fe_address> with the IP address (priority_networks) or FQDN 
    # of the Leader FE node, and replace <query_port> (Default: 9030)
    # with the query_port you specified in fe.conf.
    mysql -h <fe_address> -P<query_port> -uroot
  2. 通过执行以下 SQL 检查 Leader FE 节点的状态。

    SHOW PROC '/frontends'\G

    示例

    MySQL [(none)]> SHOW PROC '/frontends'\G
    *************************** 1. row ***************************
    Name: x.x.x.x_9010_1686810741121
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: LEADER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1220
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 14:32:28
    Version: 3.0.0-48f4d81
    1 row in set (0.01 sec)
    • 如果字段 Alivetrue,则此 FE 节点已正确启动并添加到集群。
    • 如果字段 RoleFOLLOWER,则此 FE 节点有资格被选为 Leader FE 节点。
    • 如果字段 RoleLEADER,则此 FE 节点是 Leader FE 节点。
  3. 将 BE/CN 节点添加到集群。

    • (对于 shared-nothing)添加 BE 节点。
    -- Replace <be_address> with the IP address (priority_networks) 
    -- or FQDN of the BE nodes, and replace <heartbeat_service_port>
    -- with the heartbeat_service_port (Default: 9050) you specified in be.conf.
    ALTER SYSTEM ADD BACKEND "<be_address>:<heartbeat_service_port>";

    注意

    您可以使用上述命令一次添加多个 BE 节点。 每个 <be_address>:<heartbeat_service_port> 对代表一个 BE 节点。

    • (对于 shared-data)添加 CN 节点。
    -- Replace <cn_address> with the IP address (priority_networks) 
    -- or FQDN of the CN node, and replace <heartbeat_service_port>
    -- with the heartbeat_service_port (Default: 9050) you specified in cn.conf.
    ALTER SYSTEM ADD COMPUTE NODE "<cn_address>:<heartbeat_service_port>";

    注意

    您可以使用一个 SQL 添加多个 CN 节点。 每个 <cn_address>:<heartbeat_service_port> 对代表一个 CN 节点。

  4. 通过执行以下 SQL 检查 BE/CN 节点的状态。

    • (对于 shared-nothing)检查 BE 节点状态。
    SHOW PROC '/backends'\G

    示例

    MySQL [(none)]> SHOW PROC '/backends'\G
    *************************** 1. row ***************************
    BackendId: 10007
    IP: 172.26.195.67
    HeartbeatPort: 9050
    BePort: 9060
    HttpPort: 8040
    BrpcPort: 8060
    LastStartTime: 2023-06-15 15:23:08
    LastHeartbeat: 2023-06-15 15:57:30
    Alive: true
    SystemDecommissioned: false
    ClusterDecommissioned: false
    TabletNum: 30
    DataUsedCapacity: 0.000
    AvailCapacity: 341.965 GB
    TotalCapacity: 1.968 TB
    UsedPct: 83.04 %
    MaxDiskUsedPct: 83.04 %
    ErrMsg:
    Version: 3.0.0-48f4d81
    Status: {"lastSuccessReportTabletsTime":"2023-06-15 15:57:08"}
    DataTotalCapacity: 341.965 GB
    DataUsedPct: 0.00 %
    CpuCores: 16
    NumRunningQueries: 0
    MemUsedPct: 0.01 %
    CpuUsedPct: 0.0 %

    如果字段 Alivetrue,则此 BE 节点已正确启动并添加到集群。

    • (对于 shared-data)检查 CN 节点状态。
    SHOW PROC '/compute_nodes'\G

    示例

    MySQL [(none)]> SHOW PROC '/compute_nodes'\G
    *************************** 1. row ***************************
    ComputeNodeId: 10003
    IP: x.x.x.x
    HeartbeatPort: 9050
    BePort: 9060
    HttpPort: 8040
    BrpcPort: 8060
    LastStartTime: 2023-03-13 15:11:13
    LastHeartbeat: 2023-03-13 15:11:13
    Alive: true
    SystemDecommissioned: false
    ClusterDecommissioned: false
    ErrMsg:
    Version: 2.5.2-c3772fb
    1 row in set (0.00 sec)

    如果字段 Alivetrue,则此 CN 节点已正确启动并添加到集群。

    在 CN 正确启动并且您想在查询期间使用 CN 后,设置系统变量 SET prefer_compute_node = true;SET use_compute_nodes = -1;。 有关更多信息,请参阅 系统变量

步骤 4:(可选)部署高可用性 FE 集群

高可用性 FE 集群需要在 StarRocks 集群中至少三个 Follower FE 节点。 在 Leader FE 节点成功启动后,您可以启动两个新的 FE 节点来部署高可用性 FE 集群。

  1. 通过您的 MySQL 客户端连接到 StarRocks。 您需要使用初始帐户 root 登录,并且默认密码为空。

    # Replace <fe_address> with the IP address (priority_networks) or FQDN 
    # of the Leader FE node, and replace <query_port> (Default: 9030)
    # with the query_port you specified in fe.conf.
    mysql -h <fe_address> -P<query_port> -uroot
  2. 通过执行以下 SQL 将新的 Follower FE 节点添加到集群。

    -- Replace <fe_address> with the IP address (priority_networks) 
    -- or FQDN of the new Follower FE node, and replace <edit_log_port>
    -- with the edit_log_port (Default: 9010) you specified in fe.conf.
    ALTER SYSTEM ADD FOLLOWER "<fe2_address>:<edit_log_port>";

    注意

    • 您可以使用上述命令每次添加一个 Follower FE 节点。
    • 如果要添加 Observer FE 节点,请执行 ALTER SYSTEM ADD OBSERVER "<fe_address>:<edit_log_port>"=。 有关详细说明,请参阅 ALTER SYSTEM - FE
  3. 在新 FE 实例上启动终端,创建一个专用目录用于元数据存储,导航到存储 StarRocks FE 部署文件的目录,并修改 FE 配置文件 fe/conf/fe.conf。 有关更多说明,请参阅 步骤 1:启动 Leader FE 节点。 基本上,您可以重复步骤 1 中的步骤,除了用于启动 FE 节点的命令

    在配置 Follower FE 节点后,执行以下 SQL 以为 Follower FE 节点分配一个 helper 节点并启动 Follower FE 节点。

    注意

    在向集群添加新的 Follower FE 节点时,您必须为新的 Follower FE 节点分配一个 helper 节点(本质上是一个现有的 Follower FE 节点)来同步元数据。

    • 要启动一个具有 IP 地址访问权限的新 FE 节点,请运行以下命令来启动该 FE 节点

      # Replace <helper_fe_ip> with the IP address (priority_networks) 
      # of the Leader FE node, and replace <helper_edit_log_port> (Default: 9010) with
      # the Leader FE node's edit_log_port.
      ./fe/bin/start_fe.sh --helper <helper_fe_ip>:<helper_edit_log_port> --daemon

      请注意,您只需在首次启动节点时指定参数 --helper 一次。

    • 要启动一个具有 FQDN 访问权限的新 FE 节点,请运行以下命令来启动该 FE 节点

      # Replace <helper_fqdn> with the FQDN of the Leader FE node, 
      # and replace <helper_edit_log_port> (Default: 9010) with the Leader FE node's edit_log_port.
      ./fe/bin/start_fe.sh --helper <helper_fqdn>:<helper_edit_log_port> \
      --host_type FQDN --daemon

      请注意,您只需在首次启动节点时指定参数 --helper--host_type 一次。

  4. 检查 FE 日志以验证 FE 节点是否成功启动。

    cat fe/log/fe.log | grep thrift

    类似 "2022-08-10 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020." 的日志记录表明 FE 节点已正确启动。

  5. 重复上述步骤 2、3 和 4,直到您正确启动所有新的 Follower FE 节点,然后通过从您的 MySQL 客户端执行以下 SQL 来检查 FE 节点的状态

    SHOW PROC '/frontends'\G

    示例

    MySQL [(none)]> SHOW PROC '/frontends'\G
    *************************** 1. row ***************************
    Name: x.x.x.x_9010_1686810741121
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: LEADER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1220
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 14:32:28
    Version: 3.0.0-48f4d81
    *************************** 2. row ***************************
    Name: x.x.x.x_9010_1686814080597
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: FOLLOWER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1219
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 15:38:53
    Version: 3.0.0-48f4d81
    *************************** 3. row ***************************
    Name: x.x.x.x_9010_1686814090833
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: FOLLOWER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1219
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 15:37:52
    Version: 3.0.0-48f4d81
    3 rows in set (0.02 sec)
    • 如果字段 Alivetrue,则此 FE 节点已正确启动并添加到集群。
    • 如果字段 RoleFOLLOWER,则此 FE 节点有资格被选为 Leader FE 节点。
    • 如果字段 RoleLEADER,则此 FE 节点是 Leader FE 节点。

停止 StarRocks 集群

您可以通过在相应的实例上运行以下命令来停止 StarRocks 集群。

  • 停止 FE 节点。

    ./fe/bin/stop_fe.sh
  • 停止 BE 节点。

    ./be/bin/stop_be.sh
  • 停止 CN 节点。

    ./be/bin/stop_cn.sh

问题排查

尝试以下步骤来识别启动 FE 或 BE 节点时发生的错误

  • 如果 FE 节点未正确启动,您可以通过检查其在 fe/log/fe.warn.log 中的日志来识别问题。

    cat fe/log/fe.warn.log

    在识别并解决问题后,您必须首先终止当前的 FE 进程,删除现有的 meta 目录,创建一个新的元数据存储目录,然后使用正确的配置重新启动 FE 节点。

  • 如果 BE 节点未正确启动,您可以通过检查其在 be/log/be.WARNING 中的日志来识别问题。

    cat be/log/be.WARNING

    在识别并解决问题后,您必须首先终止现有的 BE 进程,删除现有的 storage 目录,创建一个新的数据存储目录,然后使用正确的配置重新启动 BE 节点。

  • 如果 CN 节点未正确启动,您可以通过检查其在 be/log/cn.WARNING 中的日志来识别问题。

    cat be/log/cn.WARNING

    在识别并解决问题后,您必须首先终止现有的 CN 进程,然后使用正确的配置重新启动 CN 节点。

下一步做什么

在部署了 StarRocks 集群后,您可以继续 部署后设置 以获取有关初始管理措施的说明。