跳到主要内容

集群级配置

存算分离集群存在集群级别的配置,比如管控账号的用户名密码用于管理集群中各个组件的节点等。

配置管理用户名和密码

Doris 节点的管理需要通过用户名、密码以 MySQL 协议连接活着的 FE 节点进行操作。Doris 实现类似 RBAC 的权限管理机制,节点的管理需要用户拥有 Node_priv 权限。Doris Operator 默认使用拥有所有权限的 root 用户无密码模式对 DorisDisaggregatedCluster 资源配置的集群进行部署和管理。root 用户添加密码后,需要在 DorisDisaggregatedCluster 资源中显示配置拥有 Node_Priv 权限的用户名和密码,以便 Doris Operator 对集群进行自动化管理操作。

DorisDisaggregatedCluster 资源提供两种方式来配置管理集群节点所需的用户名、密码,包括:环境变量配置的方式,以及使用 Secret 配置的方式。配置集群管理的用户名和密码分为 3 种情况:

  • 集群部署需初始化 root 用户密码;

  • root 无密码部署下,自动化设置拥有管理权限的非 root 用户;

  • 集群 root 无密码模式部署后,设置 root 用户密码。

集群部署配置 root 用户密码

Doris 支持将 root 的用户以密文的形式配置在 fe.conf 中,在 Doris 首次部署时配置 root 用户的密码,以便让 Doris Operator 能够自动管理集群节点,请按照如下步骤操作:

第 1 步:构建 root 加密密码

Doris 支持密文的方式在 FE 的配置文件中设置 root 用户的密码,密码的加密方式是采用两阶段 SHA-1 加密实现。代码实现示例如下:

Java 代码实现:

import org.apache.commons.codec.digest.DigestUtils;

public static void main( String[] args ) {
//the original password
String a = "123456";
String b = DigestUtils.sha1Hex(DigestUtils.sha1(a.getBytes())).toUpperCase();
//output the 2 stage encrypted password.
System.out.println("*"+b);
}

Golang 代码实现:

import (
"crypto/sha1"
"encoding/hex"
"fmt"
"strings"
)

func main() {
//original password
plan := "123456"
//the first stage encryption.
h := sha1.New()
h.Write([]byte(plan))
eb := h.Sum(nil)

//the two stage encryption.
h.Reset()
h.Write(eb)
teb := h.Sum(nil)
dst := hex.EncodeToString(teb)
tes := strings.ToUpper(fmt.Sprintf("%s", dst))
//output the 2 stage encrypted password.
fmt.Println("*"+tes)
}

将加密后的密码按照配置文件要求配置到 fe.conf 中,根据FE 启动参数配置章节的说明,将配置文件以 ConfigMap 的形式下发到 Kubernetes 集群。

第 2 步:构建 DorisDisaggregatedCluster 资源

配置文件设置了 root 初始化密码后,当 Doris FE 第一个节点启动后 root 的密码会立即生效,后续节点加入集群时,Doris Operator 将使用 root 用户名和密码来添加节点。因此,需要在部署的 DorisDisaggregatedCluster 资源中指定用户名和密码,以便 Doris Operator 管理集群节点。

  • 环境变量方式

    将 root 用户名和密码配置到 DorisDisaggregatedCluster 资源中的 ".spec.adminUser.name" 和 ".spec.adminUser.password" 字段,Doris Operator 会自动将这些配置转为容器的环境变量,容器内的辅助服务会使用环境变量来添加节点到集群。配置格式如下:

    spec:
    adminUser:
    name: root
    password: ${password}

    其中,${password} 为 root 的非加密密码。

  • Secret 方式

    Doris Operator 提供使用 Basic authentication Secret 来指定管理节点的用户名和密码,Doris Operator 会自动将 Secret 以文件形式挂载到容器指定位置,容器的辅助服务会解析出文件中的用户名和密码,用于自动将节点加入集群。basic-authentication-secret 的 stringData 只包含 2 个字段:username 和 password。使用 Secret 配置管理用户名和密码流程如下:

    a. 配置需要使用的 Secret

    按照如下格式配置需要使用的 Basic Authentication Secret:

    stringData:
    username: root
    password: ${password}

    其中,${password} 为 root 设置的非加密密码。
    通过如下命令将更新后的 Secret 部署到 Kubernetes 集群中。

    kubectl -n ${namespace} apply -f ${secretFileName}.yaml

    其中,${namespace} 为 DorisDisaggregatedCluster 资源需要部署的命名空间,${secretFileName} 为需要部署的 Secret 的文件名称。

    b. 配置 DorisDisaggregatedCluster 资源

    在需要部署的 DorisDisaggregatedCluster 资源中,指定使用的 Secret。配置如下:

    spec:
    authSecret: ${secretName}

    其中,${secretName} 为包含 root 用户名和密码的 Secret 名称。

部署时自动创建非 root 管理用户和密码(推荐)

在首次部署时,如果不设置 root 的初始化密码,通过环境变量或者 Secret 的方式配置非 root 用户和登录密码。Doris 容器的辅助服务会自动在 Doris 中创建该用户,设置密码和赋予 Node_priv 权限,Doris Operator 将使用自动创建的用户名和密码管理集群节点。

  • 环境变量模式

    按照如下格式配置需要部署的 DorisDisaggregatedCluster 资源:

    spec:
    adminUser:
    name: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

    其中,${DB_ADMIN_USER} 为需要新建拥有管理权限的用户名,${DB_ADMIN_PASSWD} 为新建用户的密码。

  • Secret 方式

    a. 配置需要使用的 Secret

    按照如下格式配置需要使用的 Basic authentication Secret:

    stringData:
    username: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

    其中,${DB_ADMIN_USER} 为新创建的用户名,${DB_ADMIN_PASSWD} 为新建用户名设置的密码。

    使用以下命令将 Secret 部署到 Kubernetes 集群中:

    kubectl -n ${namespace} apply -f ${secretFileName}.yaml

    其中,${namespace} 为 DorisDisaggregatedCluster 资源部署的命名空间,${secretFileName} 为需要部署的 Secret 的文件名称。

    b. 更新 DorisDisaggregatedCluster 资源

    在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:

    spec:
    authSecret: ${secretName}

    其中,${secretName} 为部署的 Basic Authentication Secret 的名称。

提示
  • 部署后请设置 root 的密码,Doris Operator 会切换为使用新用户和密码管理集群节点,请避免删除新建的用户。

集群部署后设置 root 用户密码

Doris 集群在部署后,若未设置 root 用户的密码。需要配置一个具有 Node_priv 权限的用户,便于 Doris Operator 自动化的管理集群节点。建议不要使用 root 用户,请参考用户新建和权限赋值章节来创建新用户并赋予 Node_priv 权限。创建用户后,通过环境变量或者 Secret 配置新的管理用户和密码,并在 DorisDisaggregatedCluster 资源中配置。

第 1 步:新建拥有 Node_priv 权限用户

通过 MySQL 协议连接数据库后,通过如下命令创建一个仅拥有 Node_priv 权限的用户并设置密码。

CREATE USER '${DB_ADMIN_USER}' IDENTIFIED BY '${DB_ADMIN_PASSWD}';

其中 ${DB_ADMIN_USER} 为要创建的用户名,${DB_ADMIN_PASSWD} 为要设置的密码。

第 2 步:为新用户赋予 Node_priv 权限

使用 MySQL 协议连接数据库后,执行如下命令将 Node_priv 权限赋予新用户。

GRANT NODE_PRIV ON *.*.* TO ${DB_ADMIN_USER};

其中,${DB_ADMIN_USER} 为新创建的用户名。

新建用户名密码,以及赋予权限详细使用,请参考官方文档 CREATE-USER 部分。

第 3 步:配置 DorisDisaggregatedCluster 资源

  • 环境变量方式

    在 DorisDisaggregatedCluster 资源中配置新建用户及其密码,格式如下:

    spec:
    adminUser:
    name: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

    其中,${DB_ADMIN_USER} 为新建的用户名,${DB_ADMIN_PASSWD} 为新建用户设置的密码。

  • Secret 方式

    a. 配置 Secret

    按照如下格式创建 Basic Authentication Secret:

    stringData:
    username: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

    其中 ${DB_ADMIN_USER} 为新创建的用户名,${DB_ADMIN_PASSWD} 为新建用户名设置的密码。

    使用以下命令将 Secret 部署到 Kubernetes 集群:

    kubectl -n ${namespace} apply -f ${secretFileName}.yaml

    其中,${namespace} 为 DorisDisaggregatedCluster 资源部署的命名空间,${secretFileName} 为需要部署的 Secret 的文件名称。

    b. 更新需要使用 Secret 的 DorisDisaggregatedCluster 资源

    在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:

    spec:
    authSecret: ${secretName}

    其中,${secretName} 为部署的 Basic authentication Secret 的名称。

提示
  • 部署后设置 root 密码,并配置新的拥有管理节点的用户名和密码后,会引起存量服务滚动重启一次。