1.2.3.2.3 配置 Doris 集群¶
1 集群规划¶
默认部署的 DorisCluster 资源中, FE 和 BE 使用的可能不是最新的版本的 image ,默认的副本数为 FE=3,BE=3 , FE 使用的计算资源配置为 6c 12Gi , BE 使用的资源是 8c 16Gi 。在使用过程中,如需更修改请参考如下介绍修改。
1.1 image 设置¶
Doris Operator 与 Doris 版本相互解耦, Doris Operator 如果不明确说明,本质上可以部署任何版本的 Doris 。
1.1.1 FE Image 设置¶
重新指定 FE 的 image 配置如下:
| Bash | |
|---|---|
1 2 3 | |
将 ${image} 替换想要部署的 image 名称后,将配置更新到需要部署的 DorisCluster 资源中。
1.1.2 BE Image 设置¶
重新指定 BE 的 image 配置如下:
| Bash | |
|---|---|
1 2 3 | |
将 ${image} 替换想要部署的 image 名称后,将配置更新到需要部署的 DorisCluster 资源中。
1.2 副本数设定¶
1.2.1 FE 副本数修改¶
将默认的 FE 副本数 3 改为 5 配置如下:
| Bash | |
|---|---|
1 2 3 | |
将配置更新到需要部署的 DorisCluster 资源中。
1.2.2 BE 副本数修改¶
将默认的 BE 副本数 3 改为 5 配置如下:
| Bash | |
|---|---|
1 2 3 | |
将配置更新到需要部署的 DorisCluster 资源中。
1.3 计算资源设定¶
1.3.1 FE 计算资源设定¶
默认部署的 FE 计算资源为 6c 12Gi ,将计算资源修改为 8c 16Gi 配置如下:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 | |
将配置更新到需要部署的 DorisCluster 资源中。
1.3.2 BE 计算资源设定¶
默认部署的 BE 计算资源为 8c 16Gi ,将计算资源修改为 16c 32Gi 配置如下:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 | |
将配置更新到需要部署的 DorisCluster 资源中。
Tip
FE 和 BE 所需要的最小资源为 4c 8Gi ,此为最小启动配置,如果需要进行正常能力测试为 8c 8Gi 。
2 定制化启动配置¶
Doris 在 Kubernetes 使用 ConfigMap 实现配置文件和服务解耦。默认情况下,服务使用 image 里默认配置作为启动参数配置。请预先按照 FE 配置文档和 BE 配置文档介绍,将定制好启动参数配置到特定的 ConfigMap 中。配置好后,将定制的 ConfigMap 部署到需要部署 DorisCluster 资源的 namespace 中。
2.1 FE 定制化启动配置¶
-
部署
configmap以下定义了名为
fe-conf,Doris FE可使用的ConfigMap:Bash 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
apiVersion: v1 kind: ConfigMap metadata: name: fe-conf labels: app.kubernetes.io/component: fe data: fe.conf: | CUR_DATE=`date +%Y%m%d-%H%M%S` # the output dir of stderr and stdout LOG_DIR = ${DORIS_HOME}/log JAVA_OPTS="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$CUR_DATE" # For jdk 9+, this JAVA_OPTS will be used as default JVM options JAVA_OPTS_FOR_JDK_9="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time" # INFO, WARN, ERROR, FATAL sys_log_level = INFO # NORMAL, BRIEF, ASYNC sys_log_mode = NORMAL # Default dirs to put jdbc drivers,default value is ${DORIS_HOME}/jdbc_drivers # jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers http_port = 8030 rpc_port = 9020 query_port = 9030 edit_log_port = 9010 enable_fqdn_mode = true使用
ConfigMap挂载FE启动配置信息时,配置信息对应的key必须为fe.conf。将ConfigMap写入文件,通过如下命令部署到DorisCluster资源部署的namespace:Bash 1kubectl -n ${namespace} apply -f ${feConfigMapFile}.yaml${namespace}为DorisCluster资源需要部署到的namespace,${feConfigMapFile}为fe使用的configMap文件名称。 -
配置
DorisCluster资源以
fe-conf对应的ConfigMap为例,在需要部署的DorisCluster资源的FE配置中,添加如下信息:Bash 1 2 3 4 5
spec: feSpec: configMapInfo: configMapName: fe-conf resolveKey: fe.conf
Tip
K8s 部署中请将 enable_fqdn_mode=true 加入启动配置中。如果想用 IP 模式,且 K8s 集群能够保证 pod 重启后 IP 不发生变化,请参照这个 issue 进行配置 IP 模式启动。
2.2 BE 定制化启动配置¶
-
部署
configmap以下定义了名为
be-conf,Doris BE可使用的ConfigMap:Bash 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
apiVersion: v1 kind: ConfigMap metadata: name: be-conf labels: app.kubernetes.io/component: be data: be.conf: | CUR_DATE=`date +%Y%m%d-%H%M%S` PPROF_TMPDIR="$DORIS_HOME/log/" JAVA_OPTS="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log -Xloggc:$DORIS_HOME/log/be.gc.log.$CUR_DATE -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000" # For jdk 9+, this JAVA_OPTS will be used as default JVM options JAVA_OPTS_FOR_JDK_9="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log -Xlog:gc:$DORIS_HOME/log/be.gc.log.$CUR_DATE -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000" # since 1.2, the JAVA_HOME need to be set to run BE process. # JAVA_HOME=/path/to/jdk/ # https://github.com/apache/doris/blob/master/docs/zh-CN/community/developer-guide/debug-tool.md#jemalloc-heap-profile # https://jemalloc.net/jemalloc.3.html JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:15000,dirty_decay_ms:15000,oversize_threshold:0,lg_tcache_max:20,prof:false,lg_prof_interval:32,lg_prof_sample:19,prof_gdump:false,prof_accum:false,prof_leak:false,prof_final:false" JEMALLOC_PROF_PRFIX="" # INFO, WARNING, ERROR, FATAL sys_log_level = INFO # ports for admin, web, heartbeat service be_port = 9060 webserver_port = 8040 heartbeat_service_port = 9050 brpc_port = 8060使用
ConfigMap挂载BE启动配置信息时,配置信息对应的key必须为be.conf。将ConfigMap写入文件,通过如下命令部署到DorisCluster资源部署的namespace:Bash 1kubectl -n ${namespace} apply -f ${beConfigMapFile}.yaml${namespace}为DorisCluster资源需要部署到的namespace,${beConfigMapFile}为configMap文件名称。 -
配置
DorisCluster资源以
be-conf对应的ConfigMap为例,在需要部署的DorisCluster资源的BE配置中,添加如下信息:Bash 1 2 3 4 5
spec: feSpec: configMapInfo: configMapName: be-conf resolveKey: be.conf
Tip
如果需要将文件挂载到和启动配置同一目录下,需要将配置信息配置到启动配置所在的 ConfigMap 中。 ConfigMap 中的 key 为文件名称, value 为配置信息。
2.3 多 ConfigMap 挂载¶
Doris Operator 除提供配置文件挂载之外,也提供挂载多 ConfigMap 到容器中不同目录的能力。
2.3.1 FE 挂载多 ConfigMap¶
以下为将名称为 test-fe1 , test-fe2 的 ConfigMap 分别挂载到 FE 容器 /etc/fe/config1/ 和 /etc/fe/config2 目录下的配置样例:
| Bash | |
|---|---|
1 2 3 4 5 6 7 | |
2.3.2 BE 挂载多 ConfigMap¶
以下为将名称为 test-be1 , test-be2 的 ConfigMap 分别挂载到 BE 容器 /etc/be/config1/ 和 /etc/be/config2 目录下的配置样例:
| Bash | |
|---|---|
1 2 3 4 5 6 7 | |
3 配置持久化存储¶
在 Doris 集群中,包括 FE 、 BE 、 CN 和监控组件在内的组件都需要将数据持久化到物理存储中。 Kubernetes 提供了 Persistent Volumes 的能力将数据持久化到物理存储中。在 Kubernetes 环境中, Doris Operator 使用 StorageClass 模式自动创建相应的 PersistenVolumeClaim 关联合适的 PersistentVolume 。
3.1 FE 配置持久化存储¶
在 Doris 在 K8s 部署中,默认情况下建议持久化 /opt/apache-doris/fe/doris-meta 挂载点,此为 FE 元数据的默认存储路径。 Doris 在 K8s 上部署,默认将所有的日志信息输出到 console ,如果集群有日志收集能力可直接通过 console 收集。如果集群缺少日志收集系统,默认情况下建议持久化 /opt/apache-doris/fe/log 挂载点。
3.2 FE 元数据持久化配置¶
使用默认配置文件时,将如下配置添加到需要部署的 DorisCluster 资源中:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
上述配置中, ${your_storageclass} 表示希望使用的 StorageClass 名称, ${storageSize} 表示希望使用的存储大小, ${storageSize} 的格式遵循 K8s 的 quantity 表达方式,比如: 100Gi 。请在使用时按需替换。
3.2.1 FE 日志持久化配置¶
使用默认配置文件时,将如下配置添加到需要部署的 DorisCluster 资源中:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
上述配置中, ${your_storageclass} 表示希望使用的 StorageClass 名称, ${storageSize} 表示希望使用的存储大小, ${storageSize} 的格式遵循 K8s 的 quantity 表达方式,比如: 100Gi 。请在使用时按需替换。
Tip
如果在定制化配置文件中,重新设置了 meta_dir 或者 sys_log_dir 请重新设置 mountPath 。
3.3 BE 配置持久化存储¶
在 Doris 在 K8s 部署中,默认情况下建议持久化 /opt/apache-doris/be/storage 挂载点,此为 BE 节点默认存储真实数据的路径。 Doris 在 K8s 上部署,默认将所有的日志信息输出到 console 。如果集群有日志收集能力可直接通过 console 收集,如果集群缺少日志收集系统,默认情况下建议持久化 /opt/apache-doris/be/log 挂载点。
3.3.1 BE 配置数据持久化¶
-
BE配置默认持久化存储路径如果
BE使用默认配置,请将下列配置信息更新到需要部署的DorisCluster资源中:Bash 1 2 3 4 5 6 7 8 9 10 11
beSpec: persistentVolumes: - mountPath: /opt/apache-doris/be/storage name: be-storage persistentVolumeClaimSpec: storageClassName: ${your_storageclass} accessModes: - ReadWriteOnce resources: requests: storage: ${storageSize}上述配置中,
${your_storageclass}表示希望使用的StorageClass名称,${storageSize}表示希望使用的存储大小,${storageSize}的格式遵循K8s的quantity表达方式,比如:100Gi。请在使用时按需替换。 -
BE配置多个持久化存储目录Doris为充分利用多磁盘的优势提供可配置多个存储目录。如果在定制化配置中通过storage_root_path指定了多个存储目录,在需要部署的DorisCluster资源的BE配置中增加多个存储配置。例如:storage_root_path=/home/disk1/doris.HDD;/home/disk2/doris.SSD,则需要在部署资源中添加如下配置:Bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
beSpec: persistentVolumes: - mountPath: /home/disk1/doris name: be-storage1 persistentVolumeClaimSpec: storageClassName: ${your_storageclass} accessModes: - ReadWriteOnce resources: requests: storage: ${storageSize} - mountPath: /home/disk2/doris name: be-storage2 persistentVolumeClaimSpec: storageClassName: ${your_storageclass} accessModes: - ReadWriteOnce resources: requests: storage: ${storageSize}上述配置中,
${your_storageclass}表示希望使用的StorageClass名称,${storageSize}表示希望使用的存储大小,${storageSize}的格式遵循K8s的quantity表达方式,比如:100Gi。请在使用时按需替换。
3.3.2 BE 持久化日志¶
使用默认配置文件时,将如下配置添加到需要部署的 DorisCluster 资源中:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 | |
上述配置中, ${your_storageclass} 表示希望使用的 StorageClass 名称, ${storageSize} 表示希望使用的存储大小, ${storageSize} 的格式遵循 K8s 的 quantity 表达方式,比如: 100Gi 。请在使用时按需替换。
4 访问配置¶
Kubernetes 提供使用 Service 方式作为 vip 和负载均衡器, Service 有三种对外暴漏模式 ClusterIP 、 NodePort 、 LoadBalancer 。
4.1 ClusterIP¶
Doris 在 Kubernetes 上默认提供 ClusterIP 访问模式。 ClusterIP 访问模式在 Kubernetes 集群内提供了一个内部 IP 地址,通过这个内部 IP 暴露服务。使用 ClusterIP 模式,只能在集群内部访问。
-
配置使用
ClusterIP作为Service类型Doris在Kubernetes上默认提供ClusterIP访问模式。无需进行修改即可使用ClusterIP访问模式。 -
获取
Service在部署集群后,通过以下命令可以查看
Doris Operator暴露的service:Bash 1kubectl -n doris get svc返回结果如下:
Bash 1 2 3 4 5
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 9m doriscluster-sample-be-service ClusterIP 10.1.68.128 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 9m doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 14m doriscluster-sample-fe-service ClusterIP 10.1.118.16 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 14m在以上结果中,
FE与BE有两类Service,后缀分别为internal与service:-
以
internal后缀的Service服务只能Doris内部通信使用,如心跳,数据交换等操作,不对外使用。 -
以
service后缀的Service服务可以提供用户使用。
-
-
在容器内部访问
Doris使用以下命令,可以在当前的
Kubernetes集群中创建一个包含mysql client的pod:Bash 1kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never --namespace=doris -- /bin/bash在集群内的容器中,可以使用对外暴露的后缀为
service的服务名访问Doris集群:Bash 1 2
## 使用 service 类型 pod name 访问 Doris 集群 mysql -uroot -P9030 -hdoriscluster-sample-fe-service
4.2 NodePort¶
如果用户需要再 Kubernetes 集群外部访问 Doris ,可以选择使用 NodePort 的模式。 NodePort 有两种使用方式:提前映射宿主机端口,部署时动态分配宿主机端口。
-
动态分配:如果没有显示设置端口映射,
Kubernetes会在创建pod的时候自动分配一个未使用的端口(默认范围为30000-32767); -
静态分配:如果显示指定了端口映射,当端口未被使用无冲突的时候,
Kubernetes固定分配该端口。
静态分配需要规划好端口映射, Doris 提供一下端口用于与外部交互:
| 端口名称 | 默认端口 | 端口描述 |
|---|---|---|
| Query Port | 9030 | 用于通过 MySQL 协议访问 Doris 集群 |
| HTTP Port | 8030 | FE 上的 http server 端口,用于查看 FE 的信息 |
| Web Server Port | 8040 | BE 上的 http server 端口,用于查看 BE 的信息 |
-
配置
NodePort-
FE NodePortFE NodePort使用动态分配配置如下:Bash 1 2 3 4
spec: feSpec: service: type: NodePortFE NodePort使用静态配置样例如下:Bash 1 2 3 4 5 6 7 8 9
spec: feSpec: service: type: NodePort servicePorts: - nodePort: 31001 targetPort: 8030 - nodePort: 31002 targetPort: 9030 -
BE NodePortBE NodePort使用动态分配配置如下:Bash 1 2 3 4
spec: beSpec: service: type: NodePortBE NodePort使用静态分配配置样例如下:Bash 1 2 3 4 5 6
beSpec: service: type: NodePort servicePorts: - nodePort: 31006 targetPort: 8040
-
-
获取
Service在部署集群后,通过以下命令可以查看
Doris Operator暴露的service:Bash 1kubectl get service返回结果如下:
Bash 1 2 3 4 5 6
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d doriscluster-sample-fe-service NodePort 10.152.183.58 <none> 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d doriscluster-sample-be-service NodePort 10.152.183.244 <none> 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d -
使用
NodePort访问服务以
mysql连接为例。Doris的Query Port端口默认为9030,在以上样例中本地中被映射到本地端口31545。在访问Doris集群时,同时需要获取到对应的IP地址,可以通过以下命令查看:Bash 1kubectl get nodes -owide返回结果如下:
Bash 1 2 3 4 5
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME r60 Ready control-plane 14d v1.28.2 192.168.88.60 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22 r61 Ready <none> 14d v1.28.2 192.168.88.61 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22 r62 Ready <none> 14d v1.28.2 192.168.88.62 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22 r63 Ready <none> 14d v1.28.2 192.168.88.63 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22在
NodePort模式下,可以根据任何node节点的宿主机IP与端口映射访问Kubernetes集群内的服务。在本例中可以使用任一的node节点IP,192.168.88.61、192.168.88.62、192.168.88.63访问Doris服务。如在下例中使用了node节点192.168.88.62与映射出的query port端口31545访问集群:Bash 1mysql -h 192.168.88.62 -P 31545 -uroot
4.3 LoadBalancer¶
LoadBalancer 是在云服务商提供的额外负载均衡器。只有使用云平台提供的 K8s 部署 Doris 集群时,可以配置使用此方式。
-
配置
LoadBalancer模式FE配置LoadBalancerBash 1 2 3 4
spec: feSpec: service: type: LoadBalancerBE配置LoadBalancerBash 1 2 3 4
spec: beSpec: service: type: LoadBalancer -
获取
Service在部署集群后,通过以下命令可以查看
Doris Operator暴露的service:Bash 1kubectl get service返回结果如下:
Bash 1 2 3 4 5 6
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d doriscluster-sample-fe-service LoadBalancer 10.152.183.58 ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d doriscluster-sample-be-service LoadBalancer 10.152.183.244 ac4828493dgrftb884g67wg4tb68gyut-1137823345.us-east-1.elb.amazonaws.com 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d -
使用
LoadBalancer模式访问以
mysql连接为例。Bash 1mysql -h ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com -P 31545 -uroot
5 配置管理用户名和密码¶
Doris 节点的管理需要通过用户名、密码以 MySQL 协议连接活着的 FE 节点进行操作。 Doris 实现类似 RBAC 的权限管理机制,节点的管理需要用户拥有 Node_priv 权限。 Doris Operator 默认使用拥有所有权限的 root 用户无密码模式对 DorisCluster 资源配置的集群进行部署和管理。 root 用户添加密码后,需要在 DorisCluster 资源中显示配置拥有 Node_Priv 权限的用户名和密码,以便 Doris Operator 对集群进行自动化管理操作。
DorisCluster 资源提供两种方式来配置管理集群节点所需的用户名、密码,包括:环境变量配置的方式,以及使用 Secret 配置的方式。配置集群管理的用户名和密码分为 3 种情况:
-
集群部署需初始化
root用户密码; -
root无密码部署下,自动化设置拥有管理权限的非root用户; -
集群
root无密码模式部署后,设置root用户密码。
5.1 集群部署配置 root 用户密码¶
Doris 支持将 root 的用户以密文的形式配置在 fe.conf 中,在 Doris 首次部署时配置 root 用户的密码,请按照如下步骤操作,以便让 Doris Operator 能够自动管理集群节点:
-
构建
root加密密码Doris支持密文的方式在FE的配置文件中设置root用户的密码,密码的加密方式是采用2阶段SHA-1加密实现。代码实现如下:Java代码实现2阶段SHA-2加密:Java 1 2 3 4 5 6 7 8 9
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代码实现2阶段SHA-1加密:Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
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中,根据集群参数配置章节的介绍将配置文件以configmap的形式下发到K8s集中。 -
构建
DorisCluster资源配置文件设置了
root初始化密码,Doris FE第一个节点启动后root的密码会立即生效,其他节点加入集群需要Doris Operator使用root用户名密码的方式来操作。需要在部署的DorisCluster资源中指定用户名密码,以便Doris Operator自动管理集群节点。-
环境变量方式
将用户名
root和密码配置到DorisCluster资源中的".spec.adminUser.name"和".spec.adminUser.password"字段,Doris Operator会自动将下列配置转为容器的环境变量使用,容器内的辅助服务会使用环境变量配置的用户名和密码来添加自身到指定的集群。配置格式如下:Bash 1 2 3 4
spec: adminUser: name: root password: ${password}其中,
${password}为root的非加密密码。 -
Secret方式Doris Operator提供使用Basic authentication Secret来指定管理节点的用户名和密码,DorisCluster资源配置需要使用的Secret后,Doris Operator会自动将Secret以文件形式挂载到容器指定位置,容器的辅助服务会解析出文件中的用户名和密码来自动添加自身到指定集群。basic-authentication-secret的stringData只包含2个字段:username和password。使用Secret配置管理用户名和密码流程如下:-
配置需要使用的
Secret按照如下格式配置需要使用的
Basic authentication Secret:Bash 1 2 3
stringData: username: root password: ${password}其中
${password}为root设置的非加密密码。将
Secret通过kubectl -n ${namespace} apply -f ${secretFileName}.yaml将更新后的Secret部署到K8s集群中。其中${namespace}为DorisCluster资源需要部署的命名空间,${secretFileName}为需要部署的Secret的文件名称。 -
配置需要部署的
DorisCluster资源配置
DorisCluster指定需要使用的Secret格式如下:Bash 1 2
spec: authSecret: ${secretName}其中,
${secretName}为包含root用户名和密码的Secret名称。
-
-
5.2 部署时自动创建非 root 管理用户和密码(推荐)¶
在首次部署时不设置 root 的初始化密码,通过环境变量或者 Secret 的方式设置非 root 用户和登录密码。 Doris 容器的辅助服务会自动在数据库中创建配置的用户,设置密码和赋予 Node_priv 权限, Doris Operator 会以自动创建的用户名和密码管理集群节点。
-
环境变量模式
按照如下格式配置需要部署的
DorisCluster资源:Bash 1 2 3 4
spec: adminUser: name: ${DB_ADMIN_USER} password: ${DB_ADMIN_PASSWD}其中,
${DB_ADMIN_USER}为需要新建拥有管理权限的用户名,${DB_ADMIN_PASSWD}为新建用户的密码。 -
Secret方式-
配置需要使用的
Secret按照如下格式配置需要使用的
Basic authentication Secret:Bash 1 2 3
stringData: username: ${DB_ADMIN_USER} password: ${DB_ADMIN_PASSWD}其中
${DB_ADMIN_USER}为新创建的用户名,${DB_ADMIN_PASSWD}为新建用户名设置的密码。将Secret通过kubectl -n ${namespace} apply -f ${secretFileName}.yaml将更新后的Secret部署到K8s集群中。其中${namespace}为DorisCluster资源需要部署的命名空间,${secretFileName}为需要部署的Secret的文件名称。 -
配置需要使用
Secret的DorisCluster资源按照如下格式更新
DorisCluster资源:Bash 1 2
spec: authSecret: ${secretName}其中,
${secretName}为部署的Basic authentication Secret的名称。
-
Tip
部署后请设置 root 的密码, Doris Operator 会转为使用自动新建的用户名和密码管理节点,请避免删除自动化创建的用户。
5.3 集群部署后设置 root 用户密码¶
Doris 集群在部署后设置了 root 用户的密码,需要配置一个拥有 Node_priv 权限的用户到 DorisCluster 资源中,以便 Doris Operator 自动化的管理集群节点。此用户名不建议使用 root ,请参考用户新建和权限赋值章节来创建新用户并赋予 Node_priv 权限。创建用户后,通过环境变量或者 Secret 的方式指定新的管理用户和密码,并配置对应的 DorisCluster 资源。
-
新建拥有
Node_priv权限用户使用
MySQL协议连接数据库后,使用如下命令可以创建一个简易的仅拥有Node_priv权限的用户并设置密码。SQL 1CREATE USER '${DB_ADMIN_USER}' IDENTIFIED BY '${DB_ADMIN_PASSWD}';其中
${DB_ADMIN_USER}为希望创建的用户名,${DB_ADMIN_PASSWD}为希望为新建用户设置的密码。 -
给新建用户赋予
Node_priv权限使用
MySQL协议连接数据库后,使用如下命令赋予新建用户Node_priv权限。SQL 1GRANT NODE_PRIV ON *.*.* TO ${DB_ADMIN_USER};其中,
${DB_ADMIN_USER}为新创建的用户名。新建用户,设置密码,以及赋予权限详细使用,请参考官方文档
CREATE-USER部分。 -
配置
DorisCluster资源-
环境变量方式
将新创建的用户名和密码配置到
DorisCluster资源中的".spec.adminUser.name"和".spec.adminUser.password"字段,Doris Operator会自动将下列配置转为容器的环境变量。容器内的辅助服务会使用环境变量配置的用户名和密码来添加自身到指定的集群。配置格式如下:Bash 1 2 3 4
spec: adminUser: name: ${DB_ADMIN_USER} password: ${DB_ADMIN_PASSWD}其中,
${DB_ADMIN_USER}为新建的用户名,${DB_ADMIN_PASSWD}为新建用户设置的密码。 -
Secret方式-
配置需要使用的
Secret按照如下格式配置需要使用的
Basic authentication Secret:Bash 1 2 3
stringData: username: ${DB_ADMIN_USER} password: ${DB_ADMIN_PASSWD}其中
${DB_ADMIN_USER}为新创建的用户名,${DB_ADMIN_PASSWD}为新建用户名设置的密码。将
Secret通过kubectl -n ${namespace} apply -f ${secretFileName}.yaml将配置好的Secret部署到K8s集群中。其中${namespace}为DorisCluster资源需要部署的命名空间,${secretFileName}为需要部署的Secret的文件名称。 -
更新需要使用
Secret的DorisCluster资源按照如下格式更新
DorisCluster资源:Bash 1 2
spec: authSecret: ${secretName}其中,
${secretName}为部署的Basic authentication Secret的名称。
-
-
Tip
部署后设置 root 密码,并配置新的拥有管理节点的用户名和密码后,会引起存量服务滚动重启一次。