You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2026/04/27 21:51:13 UTC
(doris-website) branch master updated: [refactor](next) install and deploy (#3588)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new d686a55a391 [refactor](next) install and deploy (#3588)
d686a55a391 is described below
commit d686a55a3910f064a28b50327ed0e1e2ef5af02f
Author: Mingyu Chen (Rayner) <mo...@163.com>
AuthorDate: Mon Apr 27 14:51:07 2026 -0700
[refactor](next) install and deploy (#3588)
---
.../{getting-started.mdx => intro.mdx} | 0
.../{getting-started.mdx => intro.mdx} | 22 +-
docs-next/install/choosing-deployment-mode.md | 8 +
docs-next/install/deploy-manually/intro.mdx | 27 +
docs-next/install/deploy-on-kubernetes/intro.mdx | 33 +
.../separating-storage-compute/intro.mdx | 45 ++
.../doris-operator/doris-operator-overview.md | 75 +++
docs-next/install/doris-operator/intro.mdx | 33 +
docs-next/install/doris-operator/on-alibaba.md | 140 ++++
docs-next/install/doris-operator/on-aws.md | 78 +++
docs-next/install/intro.mdx | 59 ++
.../current.json | 10 +-
.../{getting-started.mdx => intro.mdx} | 7 -
.../features-architecture/product-concepts.md | 26 +-
.../features-architecture/system-architecture.md | 26 +-
.../current/features-architecture/versioning.md | 4 +-
.../alternatives/alternative-to-clickhouse.mdx | 28 +-
.../alternatives/alternative-to-elasticsearch.mdx | 14 +-
.../alternatives/alternative-to-trino.mdx | 12 +-
.../getting-started/before-you-start-the-poc.md | 17 +-
.../{getting-started.mdx => intro.mdx} | 29 +-
.../current/getting-started/quick-start.mdx | 24 +-
.../current/install/choosing-deployment-mode.md | 105 +++
.../integrated-storage-compute-deploy-manually.md | 120 +++-
.../current/install/deploy-manually/intro.mdx | 27 +
.../separating-storage-compute-deploy-manually.md | 166 ++++-
.../install/deploy-on-cloud/doris-on-aws.md | 125 ++--
.../integrated-storage-compute/access-cluster.md | 5 +-
.../cluster-operation.md | 5 +-
.../install-config-cluster.md | 5 +-
.../install-doris-cluster.md | 5 +-
.../install-doris-operator.md | 5 +-
.../current/install/deploy-on-kubernetes/intro.mdx | 33 +
.../separating-storage-compute/config-cg.md | 256 +++++---
.../separating-storage-compute/config-cluster.md | 441 ++++++++-----
.../separating-storage-compute/config-fe.md | 412 ++++++++----
.../separating-storage-compute/config-ms.md | 253 +++++---
.../install-doris-cluster.md | 358 ++++++++---
.../separating-storage-compute/install-fdb.md | 101 ++-
.../separating-storage-compute/intro.mdx | 45 ++
.../doris-operator/doris-operator-overview.md | 121 ++++
.../current/install/doris-operator/intro.mdx | 33 +
.../current/install/doris-operator/on-alibaba.md | 201 ++++++
.../current/install/doris-operator/on-aws.md | 162 +++++
.../current/install/intro.mdx | 52 ++
.../install/preparation/cluster-planning.md | 60 +-
.../current/install/preparation/env-checking.md | 132 ++--
.../current/install/preparation/os-checking.md | 94 +--
sidebars-next.ts | 65 +-
.../getting-started-card/getting-started-card.tsx | 30 +-
static/images/ecomsystem/doris-operator.jpg | Bin 0 -> 86430 bytes
static/images/next/install/doris-operator.jpg | Bin 0 -> 284716 bytes
.../docs-next-implementation-plan.md | 706 ---------------------
53 files changed, 3153 insertions(+), 1687 deletions(-)
diff --git a/docs-next/features-architecture/getting-started.mdx b/docs-next/features-architecture/intro.mdx
similarity index 100%
rename from docs-next/features-architecture/getting-started.mdx
rename to docs-next/features-architecture/intro.mdx
diff --git a/docs-next/getting-started/getting-started.mdx b/docs-next/getting-started/intro.mdx
similarity index 81%
rename from docs-next/getting-started/getting-started.mdx
rename to docs-next/getting-started/intro.mdx
index 6dbda854096..19d25fcb822 100644
--- a/docs-next/getting-started/getting-started.mdx
+++ b/docs-next/getting-started/intro.mdx
@@ -18,19 +18,19 @@ Welcome to Apache Doris! This guide helps you find the right resources based on
<GettingStartedCard
title="What is Apache Doris?"
description="Learn about Apache Doris architecture, core features, and capabilities"
- link="/docs/gettingStarted/what-is-apache-doris"
+ link="what-is-apache-doris"
/>
<GettingStartedCard
title="Quick Start"
description="Get Apache Doris up and running in minutes"
- link="/docs/gettingStarted/quick-start"
+ link="quick-start"
/>
<GettingStartedCard
title="Before You Start the POC"
description="Prepare for your proof of concept with hardware and environment guidance"
- link="/docs/gettingStarted/before-you-start-the-poc"
+ link="before-you-start-the-poc"
/>
</div>
@@ -40,19 +40,19 @@ Welcome to Apache Doris! This guide helps you find the right resources based on
<GettingStartedCard
title="Alternative to ClickHouse"
description="Explore how Apache Doris compares to and can replace ClickHouse"
- link="/docs/gettingStarted/alternatives/alternative-to-clickhouse"
+ link="alternatives/alternative-to-clickhouse"
/>
<GettingStartedCard
title="Alternative to Elasticsearch"
description="Learn how Apache Doris can serve as an alternative to Elasticsearch"
- link="/docs/gettingStarted/alternatives/alternative-to-elasticsearch"
+ link="alternatives/alternative-to-elasticsearch"
/>
<GettingStartedCard
title="Alternative to Trino"
description="Discover how Apache Doris can replace or work with Trino"
- link="/docs/gettingStarted/alternatives/alternative-to-trino"
+ link="alternatives/alternative-to-trino"
/>
</div>
@@ -62,13 +62,13 @@ Welcome to Apache Doris! This guide helps you find the right resources based on
<GettingStartedCard
title="Installation & Deployment"
description="Choose the right deployment approach for your environment"
- link="/docs/install/intro"
+ link="../install/intro"
/>
<GettingStartedCard
title="Deploy on Kubernetes"
description="Use Doris Operator to deploy on Kubernetes"
- link="/docs/install/deploy-on-kubernetes/intro"
+ link="../install/deploy-on-kubernetes/intro"
/>
</div>
@@ -78,19 +78,19 @@ Welcome to Apache Doris! This guide helps you find the right resources based on
<GettingStartedCard
title="Use Cases"
description="See real-world use cases and success stories"
- link="/docs/use-cases/overview"
+ link="../use-cases/overview"
/>
<GettingStartedCard
title="Benchmark"
description="View performance benchmarks"
- link="/docs/benchmark/overview"
+ link="../benchmark/overview"
/>
<GettingStartedCard
title="Architecture & Concepts"
description="Understand how Doris works internally"
- link="/docs/architecture-concepts/overview"
+ link="../architecture-concepts/overview"
/>
</div>
diff --git a/docs-next/install/choosing-deployment-mode.md b/docs-next/install/choosing-deployment-mode.md
new file mode 100644
index 00000000000..3776f81a01e
--- /dev/null
+++ b/docs-next/install/choosing-deployment-mode.md
@@ -0,0 +1,8 @@
+---
+{
+ "title": "Choosing a Deployment Mode",
+ "language": "en",
+ "sidebar_label": "Choosing a Deployment Mode",
+ "description": "Choose between integrated storage-compute or decoupled mode, and between manual, Kubernetes, or cloud deployment."
+}
+---
diff --git a/docs-next/install/deploy-manually/intro.mdx b/docs-next/install/deploy-manually/intro.mdx
new file mode 100644
index 00000000000..ad988e108eb
--- /dev/null
+++ b/docs-next/install/deploy-manually/intro.mdx
@@ -0,0 +1,27 @@
+---
+{
+ "title": "Deploying Manually",
+ "language": "en",
+ "description": "Install Apache Doris directly on physical or virtual machines."
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Deploying Manually
+
+Choose the manual deployment guide that matches your storage-compute architecture.
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Integrated Storage-Compute Deployment"
+ description="Deploy Apache Doris in integrated storage-compute mode on bare-metal or virtual machines"
+ link="integrated-storage-compute-deploy-manually"
+/>
+
+<GettingStartedCard
+ title="Separating Storage-Compute Deployment"
+ description="Deploy Apache Doris in decoupled storage-compute mode on bare-metal or virtual machines"
+ link="separating-storage-compute-deploy-manually"
+/>
+</div>
diff --git a/docs-next/install/deploy-on-kubernetes/intro.mdx b/docs-next/install/deploy-on-kubernetes/intro.mdx
new file mode 100644
index 00000000000..1a14a56ee6c
--- /dev/null
+++ b/docs-next/install/deploy-on-kubernetes/intro.mdx
@@ -0,0 +1,33 @@
+---
+{
+ "title": "Deploying on Kubernetes",
+ "language": "en",
+ "description": "Deploy Apache Doris on Kubernetes using Doris Operator."
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Deploying on Kubernetes
+
+Apache Doris on Kubernetes is managed by Doris Operator. Pick the architecture you plan to deploy and follow the corresponding guide.
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Doris Operator"
+ description="Overview of Doris Operator and how to install it on different cloud Kubernetes services"
+ link="../doris-operator/intro"
+/>
+
+<GettingStartedCard
+ title="Integrated Storage Compute"
+ description="Deploy a Doris cluster in integrated storage-compute mode on Kubernetes"
+ link="integrated-storage-compute/intro"
+/>
+
+<GettingStartedCard
+ title="Separating Storage Compute"
+ description="Deploy a Doris cluster in decoupled storage-compute mode on Kubernetes"
+ link="separating-storage-compute/intro"
+/>
+</div>
diff --git a/docs-next/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx b/docs-next/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx
new file mode 100644
index 00000000000..1ae6deeadd6
--- /dev/null
+++ b/docs-next/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx
@@ -0,0 +1,45 @@
+---
+{
+ "title": "Separating Storage Compute",
+ "language": "en",
+ "description": "Deploy a decoupled storage-compute Apache Doris cluster on Kubernetes."
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Separating Storage Compute on Kubernetes
+
+Deploying a decoupled storage-compute Doris cluster on Kubernetes involves several sequential steps. Follow them in order.
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="1. Install FoundationDB"
+ description="Install FoundationDB as the metadata storage backend"
+ link="install-fdb"
+/>
+
+<GettingStartedCard
+ title="2. Configure Meta Service"
+ description="Configure the Meta Service component"
+ link="config-ms"
+/>
+
+<GettingStartedCard
+ title="3. Configure Frontend"
+ description="Configure the Doris Frontend (FE) component"
+ link="config-fe"
+/>
+
+<GettingStartedCard
+ title="4. Configure Compute Group"
+ description="Configure the Doris compute groups"
+ link="config-cg"
+/>
+
+<GettingStartedCard
+ title="5. Configure Cluster"
+ description="Apply the cluster-level configuration to bring everything together"
+ link="config-cluster"
+/>
+</div>
diff --git a/docs-next/install/doris-operator/doris-operator-overview.md b/docs-next/install/doris-operator/doris-operator-overview.md
new file mode 100644
index 00000000000..551d764f3e8
--- /dev/null
+++ b/docs-next/install/doris-operator/doris-operator-overview.md
@@ -0,0 +1,75 @@
+---
+{
+ "title": "Doris Kubernetes Operator",
+ "language": "en",
+ "description": "Kubernetes Operator (referred to as Doris Operator) was born to meet the user's demand for efficient deployment and operation of Doris on the "
+}
+---
+
+[Kubernetes Operator](https://github.com/apache/doris-operator) (referred to as Doris Operator) was born to meet the user's demand for efficient deployment and operation of Doris on the Kubernetes platform.
+It integrates the complex management capabilities of native Kubernetes resources, and integrates the distributed collaboration between Doris components, on-demand customization of user cluster forms, and other experiences, providing users with a more concise, efficient and easy-to-use containerized deployment solution.
+It aims to achieve efficient management and control of Doris on Kubernetes, helping users reduce operation and maintenance management and learning costs while providing powerful functions and flexible configuration capabilities.
+
+Doris Operator implements the configuration, management and scheduling of Doris on the Kubernetes platform based on Kubernetes CustomResourceDefinitions (CRD). Doris Operator can automatically create Pods and other resources to start services according to the user-defined desired state. Through the automatic registration mechanism, all started services can be integrated into a complete Doris cluster. This implementation significantly reduces the complexity and learning cost of processing [...]
+
+## Doris Operator Architecture
+
+The design of Doris Operator is based on the principle of a two-layer scheduler. The first-layer scheduling of each component uses native StatefulSet and Service resources to directly manage the corresponding Pod service, which makes it fully compatible with open source Kubernetes clusters, including public clouds, private clouds, and self-built Kubernetes platforms.
+
+Based on the deployment definition provided by Doris Operator, users can customize the Doris deployment state and send it to the Kubernetes cluster through the kubectl management command of Kubernetes. Doris Operator converts the deployment of each service into StatefulSet and its affiliated resources (such as Service) according to the customized state, and then schedules the desired Pods through StatefulSet. It simplifies unnecessary configuration in the StatefulSet specification by abs [...]
+
+## Key capabilities
+
+- **Final state deployment**:
+
+ Kubernetes uses the final state operation and maintenance mode to manage services, and Doris Operator defines a resource type that can describe the Doris cluster - DorisCluster. Users can refer to relevant documents and usage examples to easily configure the required cluster.
+ Users can send the configuration to the Kubernetes cluster through the Kubernetes command line tool kubectl. Doris Operator automatically builds the required cluster and updates the cluster status to the corresponding resources in real time. This process ensures efficient management and monitoring of the cluster and greatly simplifies operation and maintenance operations.
+
+- **Easy to expand**:
+
+ Doris Operator supports concurrent real-time horizontal expansion in a cloud disk-based environment. All component services of Doris are deployed and managed through Kubernetes' StatefulSet. When deploying or expanding, Pods are created using StatefulSet's Parallel mode, so that in theory all replicas can be started within the time it takes to start a node. The startup of each replica does not interfere with each other, and when a service fails to start, the startup of other services w [...]
+ Doris Operator uses concurrent mode to start services and has a built-in distributed architecture, which greatly simplifies the process of service expansion. Users only need to set the number of replicas to easily complete the expansion, completely freeing up the complexity of operation and maintenance operations.
+
+- **Unnoticeable changes**:
+
+ In a distributed environment, service restarts may cause temporary instability of services. Especially for services such as databases that have extremely high requirements for stability, how to ensure the stability of services during the restart process is a very important topic. Doris uses the following three mechanisms on Kubernetes to ensure the stability of the service restart process, thereby achieving an imperceptible experience for the business during the restart and upgrade process.
+
+ 1. Graceful exit
+ 2. Rolling restart
+ 3. Actively stop query allocation
+
+- **Host system configuration**:
+
+ In some scenarios, it is necessary to configure the host system parameters to achieve the ideal performance of Apache Doris. In the containerized scenario, the uncertainty of host deployment and the difficulty of parameter modification bring challenges to users. To solve this problem, Doris Operator uses Kubernetes's initialization container to make the host parameters configurable.
+ Doris Operator allows users to configure commands executed on the host and make them effective by initializing containers. To improve availability, Doris Operator abstracts the configuration method of Kubernetes initialization containers, making the setting of host commands simpler and more intuitive.
+
+- **Persistent configuration**:
+
+ Doris Operator uses the Kubernetes StorageClass mode to provide storage configuration for each service. It allows users to customize the mount directory. When customizing the startup configuration, if the storage directory is modified, the directory can be set as a persistent location in the custom resource, so that the service uses the specified directory in the container to store data.
+
+- **Runtime debugging**:
+
+ One of the biggest challenges for Trouble Shooting with containerized services is how to debug at runtime. While pursuing availability and ease of use, Doris Operator also provides more convenient conditions for problem location. In the basic image of Doris, a variety of tools for problem location are pre-set. When you need to view the status in real time, you can enter the container through the exec command provided by kubectl and use the built-in tools for troubleshooting.
+ When the service cannot be started for unknown reasons, Doris Operator provides a Debug running mode. When a Pod is set to Debug startup mode, the container will automatically enter the running state. At this time, you can enter the container through the `exec` command, manually start the service and locate the problem. For details, please refer to [this document](../../install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation.md#How-to-enter-the-container-when-the-pod- [...]
+
+## Compatibility
+
+Doris Operator is developed in accordance with standard K8s specifications and is compatible with all standard K8s platforms, including those provided by mainstream cloud vendors, self-built K8s platforms based on standards, and user-built platforms.
+
+### Cloud vendor compatibility
+
+Fully compatible with the containerized service platforms of mainstream cloud vendors. For environment preparation and usage suggestions for Doris Operator, please refer to the following documents:
+
+- [Alibaba Cloud](./on-alibaba)
+
+- [AWS](./on-aws)
+
+## Installation and management
+
+### Prerequisites
+
+Before deployment, you need to check the host system. Refer to [Operating System Check](../../install/preparation/os-checking.md)
+
+### Deploy Doris Operator
+
+For details, please see Doris Operator installation doc for [Compute-Storage Coupled](../../install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md) or [Compute-Storage Decoupled](../../install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md)
diff --git a/docs-next/install/doris-operator/intro.mdx b/docs-next/install/doris-operator/intro.mdx
new file mode 100644
index 00000000000..73eb02482d1
--- /dev/null
+++ b/docs-next/install/doris-operator/intro.mdx
@@ -0,0 +1,33 @@
+---
+{
+ "title": "Doris Operator",
+ "language": "en",
+ "description": "Manage Apache Doris clusters on Kubernetes with Doris Operator."
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Doris Operator
+
+Doris Operator is the Kubernetes-native way to provision and manage Apache Doris clusters. Start with the overview, then jump to the installation guide for your cloud provider.
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Doris Operator Overview"
+ description="Learn what Doris Operator does and how it manages Doris on Kubernetes"
+ link="doris-operator-overview"
+/>
+
+<GettingStartedCard
+ title="On Alibaba Cloud"
+ description="Install Doris Operator on Alibaba Cloud Container Service for Kubernetes (ACK)"
+ link="on-alibaba"
+/>
+
+<GettingStartedCard
+ title="On AWS"
+ description="Install Doris Operator on Amazon Elastic Kubernetes Service (EKS)"
+ link="on-aws"
+/>
+</div>
diff --git a/docs-next/install/doris-operator/on-alibaba.md b/docs-next/install/doris-operator/on-alibaba.md
new file mode 100644
index 00000000000..8a65478c9a2
--- /dev/null
+++ b/docs-next/install/doris-operator/on-alibaba.md
@@ -0,0 +1,140 @@
+---
+{
+ "title": "Recommendations on Alibaba Cloud",
+ "language": "en",
+ "description": "Alibaba Cloud Container Service ACK is a managed containerized service after purchasing an ECS instance,"
+}
+---
+
+## Alibaba ACK
+
+Alibaba Cloud Container Service ACK is a managed containerized service after purchasing an ECS instance, so you can obtain full access control permissions to adjust related system parameters. Use the instance image: Alibaba Cloud Linux 3. The current system parameters fully meet the requirements for running Doris. Those that do not meet the requirements can also be corrected in the container through the K8s privileged mode to ensure stable operation.
+**Alibaba Cloud ACK cluster, deployed using Doris Operator, most environmental requirements can be met by the ECS default configuration. If not met, Doris Operator can correct it by itself**. Users can also manually correct it, as follows:
+
+### Already exists cluster
+
+If the Container Service cluster has already been created, you can modify it by referring to this document: [Cluster Environment OS Checking](../../install/preparation/os-checking.md)
+Focus on the BE startup parameter requirements:
+1. Disable and close swap: `swapon --show` will not be output if it is not enabled
+2. Check the maximum number of open file handles in the system `ulimit -n`
+3. Check and modify the number of virtual memory areas `sysctl vm.max_map_count`
+4. Whether transparent huge pages are closed `cat /sys/kernel/mm/transparent_hugepage/enabled` contains never
+ The default values of the corresponding parameters are as follows:
+
+ ```shell
+ [root@iZj6c12a1czxk5oer9rbp8Z ~]# swapon --show
+ [root@iZj6c12a1czxk5oer9rbp8Z ~]# ulimit -n
+ 65535
+ [root@iZj6c12a1czxk5oer9rbp8Z ~]# sysctl vm.max_map_count
+ vm.max_map_count = 262144
+ [root@iZj6c12a1czxk5oer9rbp8Z ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
+ [always] madvise never
+ ```
+
+### Create a new cluster
+
+If the cluster has not been purchased and created, you can click "Create Cluster" in the Alibaba Cloud Container Service ACK console to purchase it. You can adjust the configuration as needed. The above parameters can be added to the system adjustment script in "Instance Pre-customized Data" in the "Node Pool Configuration" step of creating a cluster.
+After the cluster is started, restart the node to complete the configuration. The reference script is as follows:
+
+```shell
+#!/bin/bash
+chmod +x /etc/rc.d/rc.local
+echo "sudo systemctl stop firewalld.service" >> /etc/rc.d/rc.local
+echo "sudo systemctl disable firewalld.service" >> /etc/rc.d/rc.local
+echo "sysctl -w vm.max_map_count=2000000" >> /etc/rc.d/rc.local
+echo "swapoff -a" >> /etc/rc.d/rc.local
+current_limit=$(ulimit -n)
+desired_limit=1000000
+config_file="/etc/security/limits.conf"
+ if [ "$current_limit" -ne "$desired_limit" ]; then
+ echo "* soft nofile 1000000" >> "$config_file"
+ echo "* hard nofile 1000000" >> "$config_file"
+fi
+```
+
+## Alibaba ACS
+
+The ACS service is a cloud computing service that uses K8s as the user interface to provide container computing resources, providing elastic computing resources that are billed on demand. Unlike the above ACK, you do not need to pay attention to the specific use of ECS.
+The following points should be noted when using ACS:
+
+### Image repository
+
+When using ACS, it is recommended to use the supporting Alibaba [Container Registry](https://www.alibabacloud.com/en/product/container-registry)(ACR). The personal and enterprise versions are enabled on demand.
+
+After configuring the ACR and image transfer environment, you need to migrate the official image provided by Doris to the corresponding ACR.
+
+If you use a private ACR to enable authentication, you can refer to the following steps:
+
+1. You need to set a `secret` of type `docker-registry` in advance to configure the authentication information for accessing the image warehouse.
+
+ ```shell
+ kubectl create secret docker-registry image-hub-secret --docker-server={your-server} --docker-username={your-username} --docker-password={your-pwd}
+ ```
+
+2. Configure the secret using the above steps on DCR:
+
+ ```yaml
+ spec:
+ feSpec:
+ replicas: 1
+ image: crpi-4q6quaxa0ta96k7h-vpc.cn-hongkong.personal.cr.aliyuncs.com/selectdb-test/doris.fe-ubuntu:3.0.3
+ imagePullSecrets:
+ - name: image-hub-secret
+ beSpec:
+ replicas: 3
+ image: crpi-4q6quaxa0ta96k7h-vpc.cn-hongkong.personal.cr.aliyuncs.com/selectdb-test/doris.be-ubuntu:3.0.3
+ imagePullSecrets:
+ - name: image-hub-secret
+ systemInitialization:
+ initImage: crpi-4q6quaxa0ta96k7h-vpc.cn-hongkong.personal.cr.aliyuncs.com/selectdb-test/alpine:latest
+ ```
+
+### Be systemInitialization
+
+Currently, Alibaba Cloud is gradually pushing the ability to enable privileged mode on fully managed ACS services (some regions may not be enabled yet, you can submit a work order to apply for the ability to be enabled).
+The Doris BE node startup requires some special environment parameters, such as Modify the number of virtual memory areas `sysctl -w vm.max_map_count=2000000`
+Setting this parameter inside the container requires modifying the host configuration, so regular K8s clusters need to enable privileged mode in the pod. Operator adds `InitContainer` to the BE pod through `systemInitialization` to perform such operations.
+
+:::tip Tip
+**If the current cluster cannot use privileged mode, the BE node cannot be started**. You can choose ACK container service + host to deploy the cluster.
+:::
+
+### Service
+
+Since the ACS service is a cloud computing service that uses K8s as the user interface to provide container computing resources, it provides computing resources. Its nodes are virtual computing resources, and users do not need to pay attention to them. They are charged according to the amount of resources used, and can be expanded infinitely. That is, there is no physical concept of conventional nodes:
+
+```shell
+$ kubectl get nodes
+NAME STATUS ROLES AGE VERSION
+virtual-kubelet-cn-hongkong-d Ready agent 27h v1.31.1-aliyun.1
+```
+
+Therefore, when deploying the Doris cluster, serviceType disables the NodePort mode and allows the use of ClusterIP and LB modes.
+
+- ClusterIP mode:
+
+ ClusterIP modethe default network mode of Operator. For specific usage and access methods, please refer to [this document](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
+
+- Load balancing mode:
+
+ can be configured as follows:
+
+ - Configure LB access through the DCR service annotations provided by Operator. The steps are as follows:
+ 1. A CLB or NLB instance has been created through the load balancing console, and the instance is in the same region as the ACK cluster. If you haven't created one yet, see [Create and manage a CLB instance](https://www.alibabacloud.com/help/en/slb/classic-load-balancer/user-guide/create-and-manage-a-clb-instance) and [Create and manage an NLB instance](https://www.alibabacloud.com/help/en/slb/network-load-balancer/user-guide/create-and-manage-an-nlb-instance)。
+ 2. Through DCR configuration, the access annotations of the above LB are in the following format:
+ ```yaml
+ feSpec:
+ replicas: 3
+ image: crpi-4q6quaxa0ta96k7h-vpc.cn-hongkong.personal.cr.aliyuncs.com/selectdb-test/doris.fe-ubuntu:3.0.3
+ service:
+ type: LoadBalancer
+ annotations:
+ service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
+ ```
+
+ - Host the LB service through the ACS console and generate a statefulset service bound to the corresponding resource control of FE or BE
+ The steps are as follows:
+ 1. serviceType is ClusterIP (default policy)
+ 2. You can create a load balancing service through the Alibaba Cloud console interface: Container Compute Service ACS -> Cluster List -> Cluster -> Service, and use the `Create` button.
+ 3. Select the newly created LB in the interface for creating `service`, which will be bound to `service` and will also be deregistered when the `service` is deregistered. However, this `service` is not controlled by Doris Operator.
+
diff --git a/docs-next/install/doris-operator/on-aws.md b/docs-next/install/doris-operator/on-aws.md
new file mode 100644
index 00000000000..b9607862520
--- /dev/null
+++ b/docs-next/install/doris-operator/on-aws.md
@@ -0,0 +1,78 @@
+---
+{
+ "title": "Recommendations on AWS",
+ "language": "en",
+ "description": "The containers running in the EKS cluster are hosted on EC2 instances,"
+}
+---
+
+## AWS EKS
+
+### Create a new cluster
+The containers running in the EKS cluster are hosted on EC2 instances, and the EC2 instances need to be configured at the system level according to the requirements of Doris. When creating a cluster, the user needs to confirm the EKS mode, auto mode or non-auto mode.
+It is recommended not to use the autonomous mode here, because the computing resources in the autonomous mode are allocated and recycled through the built-in node pool. At each resource application or release, the existing resources will be reintegrated. For stateful services such as statefulset, especially those that take a long time to start and services with strict distributed collaboration requirements such as Doris, it will cause turbulence in all services in the shared node pool. T [...]
+- As mentioned above, the autonomous mode is suitable for stateless service operation and maintenance deployment. The non-autonomous mode is recommended for installing the Doris cluster
+- Recommended operating system image: Amazon Linux 2
+
+### Already exists cluster
+
+On an existing cluster (non-auto mode), you can run the Doris cluster through Doris Operator, unless the cluster is restricted to use the privileged mode of K8s.
+It is recommended that the existing cluster configure a new node group to deploy and maintain Doris cluster resources separately, which involves the system settings for Doris BE operation and may adjust the system parameters of the host machine.
+
+### Assess DockerHub
+
+If you need to access the DockerHub public image repository on EKS, you need to add network plug-ins such as `Amazon VPC CNI`, `CoreDNS`, `kube-proxy` to the cluster, and when configuring VPC for the cluster, select a subnet that can access the public environment.
+
+### K8s Privileged
+
+Under EKS, EC2 instances completely belong to the current EKS user, and there is no situation where different user clusters affect each other in the resource pool and disable the K8s privileged mode.
+
+- If your EKS allows privileged mode (allowed by default), you don't need to care about system parameters. Doris Operator will adjust system parameters for Doris operation by default.
+- If privileged mode is not allowed, you need to adjust the following system parameters on the host:
+ - Modify the number of virtual memory areas: `sysctl -w vm.max_map_count=2000000` to adjust the maximum number of virtual memory mappings. View it through `sysctl vm.max_map_count`.
+ - Turn off transparent huge pages: Transparent huge pages may have an adverse effect on performance, so you need to turn it off. Judge by whether cat /sys/kernel/mm/transparent_hugepage/enabled contains never.
+ - Set the maximum number of open file handles: adjust the maximum number of file handles by modifying `/etc/security/limits.conf`. View it through `ulimit -n`.
+ - Disable swap: `swapoff -a` is used to disable all swap partitions and files. Verify with `swapon --show`, no output if not enabled.
+
+### Storage
+
+Doris Operator must use persistent configuration in the production environment to save the node storage. [EBS](https://aws.amazon.com/ebs) is recommended.
+
+There are the following points to note:
+
+- In the cluster configuration installation or management interface, add the EBS storage plug-in. If you use the EKS autonomous mode (not recommended), it is recommended to install EFS, and the storage plug-in needs to have the corresponding [role permissions](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)
+- Ensure that the IAM role of the EKS node has the following permissions:
+ - AmazonEC2FullAccess
+ - AmazonEKSWorkerNodePolicy
+ - AmazonEKS_CNI_Policy
+ - AmazonSSMManagedInstanceCore
+
+### Compute resource pool configuration
+
+- AWS Resource Groups(recommended)
+ You can create a node group in the cluster creation interface, or add a node group after the cluster is initialized. Use EC2 > Launch Template > Create Launch Template to set the node group launch template for the node pool. Use the template to inject scripts to automatically adjust the system environment configuration of the EC2 instance to ensure that the node automatically configures the required system parameters when it starts. By configuring the node template, you can also achiev [...]
+ Example startup script:
+
+ ```shell
+ #!/bin/bash
+ chmod +x /etc/rc.d/rc.local
+ echo "sudo systemctl stop firewalld.service" >> /etc/rc.d/rc.local
+ echo "sudo systemctl disable firewalld.service" >> /etc/rc.d/rc.local
+ echo "sysctl -w vm.max_map_count=2000000" >> /etc/rc.d/rc.local
+ echo "swapoff -a" >> /etc/rc.d/rc.local
+ current_limit=$(ulimit -n)
+ desired_limit=1000000
+ config_file="/etc/security/limits.conf"
+ if [ "$current_limit" -ne "$desired_limit" ]; then
+ echo "* soft nofile 1000000" >> "$config_file"
+ echo "* hard nofile 1000000" >> "$config_file"
+ fi
+ ```
+ In addition, when creating a node group, if you want to access it through the command line, you need to configure remote node access permissions.
+
+- Default node pools(not recommended)
+
+ Enable the resource pool used in EKS autonomous mode. When creating a node pool, you can choose a custom EC2 instance type and adjust the instance's CPU, memory and other resources. When configuring the node pool, you can add a startup script for the EC2 instance to adjust the system parameters. However, this type of resource pool requires autonomous mode and reduces the freedom to manage the cluster. For details on the specific modification operations, please refer to: [Cluster Enviro [...]
+
+
+
diff --git a/docs-next/install/intro.mdx b/docs-next/install/intro.mdx
new file mode 100644
index 00000000000..7f1d104b5c5
--- /dev/null
+++ b/docs-next/install/intro.mdx
@@ -0,0 +1,59 @@
+---
+{
+ "title": "Installation & Deployment",
+ "language": "en",
+ "description": "Choose the right approach to install and deploy Apache Doris in your environment."
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Installation & Deployment
+
+This section guides you through installing and deploying Apache Doris. Start by choosing a deployment mode that fits your needs, then follow the corresponding guide.
+
+## Before You Deploy
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Choosing a Deployment Mode"
+ description="Compare integrated vs. decoupled storage-compute, and manual vs. Kubernetes vs. cloud deployment"
+ link="choosing-deployment-mode"
+/>
+
+<GettingStartedCard
+ title="Installation Preparation"
+ description="Check environment, plan your cluster, and verify operating system requirements"
+ link="preparation/env-checking"
+/>
+</div>
+
+## Deployment Options
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Deploying Manually"
+ description="Install Apache Doris directly on physical or virtual machines"
+ link="deploy-manually/intro"
+/>
+
+<GettingStartedCard
+ title="Deploying on Kubernetes"
+ description="Deploy Apache Doris on Kubernetes using Doris Operator"
+ link="deploy-on-kubernetes/intro"
+/>
+
+<GettingStartedCard
+ title="Deploying on Cloud"
+ description="Deploy Apache Doris on public cloud platforms such as AWS"
+ link="deploy-on-cloud/doris-on-aws"
+/>
+</div>
+
+## What's Next
+
+After your cluster is up and running, you can explore:
+
+- **[Connect & Develop](../db-connect/database-connect)** - Connect to Doris and start developing
+- **[Table Design](../table-design/overview)** - Design tables that match your workload
+- **[Administration](../admin-manual/cluster-management/upgrade)** - Operate and maintain your cluster
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current.json b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current.json
index aa70ca33f81..4b2c7cda1b4 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current.json
@@ -51,6 +51,14 @@
"message": "手动部署集群",
"description": "The label for category Cluster Deployment Manually in sidebar docs"
},
+ "sidebar.docs.category.Deploy Manually": {
+ "message": "手动部署集群",
+ "description": "The label for category Deploy Manually in sidebar docs"
+ },
+ "sidebar.docs.category.Deploying Manually": {
+ "message": "手动部署集群",
+ "description": "The label for category Deploy Manually in sidebar docs"
+ },
"sidebar.docs.category.Deploying on Cloud": {
"message": "云上部署集群",
"description": "The label for category Deploying on Cloud in sidebar docs"
@@ -200,7 +208,7 @@
"description": "The label for category Ecosystem in sidebar docs"
},
"sidebar.docs.category.Doris Operator": {
- "message": "Doris Operator",
+ "message": "部署前准备",
"description": "The label for category Doris Operator in sidebar docs"
},
"sidebar.docs.category.Managing Cluster": {
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/getting-started.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/intro.mdx
similarity index 84%
rename from i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/getting-started.mdx
rename to i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/intro.mdx
index 6cb8c31b8a4..177795c9ab0 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/getting-started.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/intro.mdx
@@ -44,10 +44,3 @@ import GettingStartedCard from '@site/src/components/getting-started-card/gettin
/>
</div>
-## 下一步
-
-了解功能与架构后,您可以继续探索:
-
-- **TODO** - 在您的环境中部署 Apache Doris
-- **TODO** - 学习表设计的最佳实践
-- **TODO** - 掌握 Doris SQL 语法和函数
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/product-concepts.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/product-concepts.md
index 89067124a06..a4eda26a5d1 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/product-concepts.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/product-concepts.md
@@ -312,31 +312,31 @@ JOIN 时,假设大表 orders 和小表 customers 按 customer_id JOIN:
**效果:** 在星型模型中,大表 fact JOIN 小表 dimension 时,Runtime Filter 可将大表扫描量降低数倍至数十倍。
-## FAQ {#faq}
+## 常见问题 {#faq}
-**Q: 分区和分桶有什么区别?**
+### Q: 分区和分桶有什么区别?
-A: 分区按列值范围划分,用于数据生命周期管理(如按天分区删除历史数据)和分区裁剪(查询时只扫描相关分区)。分桶按 Hash 计算数据分布,用于数据并行和 JOIN 优化。分区是逻辑概念,分桶是物理概念(决定数据分布到哪个 BE 节点)。
+分区按列值范围划分,用于数据生命周期管理(如按天分区删除历史数据)和分区裁剪(查询时只扫描相关分区)。分桶按 Hash 计算数据分布,用于数据并行和 JOIN 优化。分区是逻辑概念,分桶是物理概念(决定数据分布到哪个 BE 节点)。
-**Q: 什么情况下应该选择主键模型而不是明细模型?**
+### Q: 什么情况下应该选择主键模型而不是明细模型?
-A: 当你需要**行级更新**(如实时数据入库、CDC 同步)或希望**相同主键合并**时,选择主键模型。明细模型保留所有原始数据,适合日志分析和全量明细查询场景。
+当你需要**行级更新**(如实时数据入库、CDC 同步)或希望**相同主键合并**时,选择主键模型。明细模型保留所有原始数据,适合日志分析和全量明细查询场景。
-**Q: MPP 和 Pipeline 是什么关系?**
+### Q: MPP 和 Pipeline 是什么关系?
-A: 它们是两个不同维度的并行机制。**MPP** 是分布式并行,解决跨节点并行计算问题;**Pipeline** 是节点内并行,解决多核资源利用问题。两者结合实现"节点间并行 + 节点内流水线"的全链路并行。
+它们是两个不同维度的并行机制。**MPP** 是分布式并行,解决跨节点并行计算问题;**Pipeline** 是节点内并行,解决多核资源利用问题。两者结合实现"节点间并行 + 节点内流水线"的全链路并行。
-**Q: CBO 和 RBO 的统计信息从哪里来?**
+### Q: CBO 和 RBO 的统计信息从哪里来?
-A: Doris 通过 **ANALYZE** 命令收集表和列的统计信息,包括表行数、列基数(NDV)、NULL 比例等。CBO 依赖这些统计信息进行成本评估。统计信息越准确,优化效果越好。建议在数据量变化较大后重新 ANALYZE。
+Doris 通过 **ANALYZE** 命令收集表和列的统计信息,包括表行数、列基数(NDV)、NULL 比例等。CBO 依赖这些统计信息进行成本评估。统计信息越准确,优化效果越好。建议在数据量变化较大后重新 ANALYZE。
-**Q: External Catalog 和普通 Database 有什么区别?**
+### Q: External Catalog 和普通 Database 有什么区别?
-A: 普通 Database 的数据存储在 Doris 内部,而 External Catalog 只是**逻辑映射**,实际数据仍存储在外部数据源。Doris 通过 External Catalog 直接读取外部数据,无需 ETL 迁移。常见用法是查询数据湖(Hive/Iceberg/Hudi)和跨源查询(MySQL、PostgreSQL 等)。
+普通 Database 的数据存储在 Doris 内部,而 External Catalog 只是**逻辑映射**,实际数据仍存储在外部数据源。Doris 通过 External Catalog 直接读取外部数据,无需 ETL 迁移。常见用法是查询数据湖(Hive/Iceberg/Hudi)和跨源查询(MySQL、PostgreSQL 等)。
-**Q: 物化视图和普通视图有什么区别?**
+### Q: 物化视图和普通视图有什么区别?
-A: 普通视图只是**存储 SQL 查询逻辑**,每次查询时实时计算,无性能收益。物化视图将查询结果**物理存储**下来,数据同步更新,对用户查询透明加速。物化视图适合固定模式的聚合报表场景。
+普通视图只是**存储 SQL 查询逻辑**,每次查询时实时计算,无性能收益。物化视图将查询结果**物理存储**下来,数据同步更新,对用户查询透明加速。物化视图适合固定模式的聚合报表场景。
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/system-architecture.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/system-architecture.md
index e34e92e11f9..56159e81920 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/system-architecture.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/system-architecture.md
@@ -234,31 +234,31 @@ Paxos 类共识协议保证元数据一致性。Master 故障时 Follower 自动
---
-## FAQ {#faq}
+## 常见问题 {#faq}
-**Q: 存算一体和存算分离架构的核心区别是什么?**
+### Q: 存算一体和存算分离架构的核心区别是什么?
-A: 存算一体架构中,BE 节点同时负责数据存储和计算,数据存储在本地磁盘;存算分离架构中,数据存储在共享存储层(如 S3、HDFS),BE 节点仅作为无状态计算节点,通过本地缓存加速查询。存算分离支持计算资源和存储资源独立弹性扩缩。
+存算一体架构中,BE 节点同时负责数据存储和计算,数据存储在本地磁盘;存算分离架构中,数据存储在共享存储层(如 S3、HDFS),BE 节点仅作为无状态计算节点,通过本地缓存加速查询。存算分离支持计算资源和存储资源独立弹性扩缩。
-**Q: 什么时候应该选择存算分离架构?**
+### Q: 什么时候应该选择存算分离架构?
-A: 存算分离适用于以下场景:已有公有云部署、需要 Kubernetes 容器化、有可靠共享存储系统(HDFS/Ceph/对象存储)、需要多计算组共享数据、有专职平台团队维护。对于简单使用或开发测试环境,存算一体更为合适。
+存算分离适用于以下场景:已有公有云部署、需要 Kubernetes 容器化、有可靠共享存储系统(HDFS/Ceph/对象存储)、需要多计算组共享数据、有专职平台团队维护。对于简单使用或开发测试环境,存算一体更为合适。
-**Q: 存算分离架构中 BE 节点是否存储数据?**
+### Q: 存算分离架构中 BE 节点是否存储数据?
-A: 存算分离架构中,BE 节点是无状态的,不持久存储数据本身。但 BE 节点会使用本地 SSD 缓存热点数据(采用 LRU 淘汰策略),以克服对象存储随机读性能较差和网络传输开销带来的延迟问题。
+存算分离架构中,BE 节点是无状态的,不持久存储数据本身。但 BE 节点会使用本地 SSD 缓存热点数据(采用 LRU 淘汰策略),以克服对象存储随机读性能较差和网络传输开销带来的延迟问题。
-**Q: FE 在存算分离架构中的角色是什么?**
+### Q: FE 在存算分离架构中的角色是什么?
-A: FE 在存算分离架构中依然保留,主要负责用户请求接入、SQL 解析与规划、SQL 层元数据管理(库表结构、用户权限、集群拓扑)。数据层面的元数据管理(如 Tablet 元数据、Rowset 元数据)由新增的 Meta Service 承担。
+FE 在存算分离架构中依然保留,主要负责用户请求接入、SQL 解析与规划、SQL 层元数据管理(库表结构、用户权限、集群拓扑)。数据层面的元数据管理(如 Tablet 元数据、Rowset 元数据)由新增的 Meta Service 承担。
-**Q: Doris 的高可用是如何实现的?**
+### Q: Doris 的高可用是如何实现的?
-A: Doris 通过多副本 + Quorum 协议实现高可用:每个 Tablet 默认 3 副本,写入需多数派确认。部分节点故障时自动隔离并从健康副本补数据。FE 通过 Paxos 类共识协议保证元数据一致性,Master 故障时自动选举新 Master。
+Doris 通过多副本 + Quorum 协议实现高可用:每个 Tablet 默认 3 副本,写入需多数派确认。部分节点故障时自动隔离并从健康副本补数据。FE 通过 Paxos 类共识协议保证元数据一致性,Master 故障时自动选举新 Master。
-**Q: 存算分离架构中 Meta Service 的作用是什么?**
+### Q: 存算分离架构中 Meta Service 的作用是什么?
-A: Meta Service 是存算分离架构中专门负责数据层面元数据管理的无状态服务,职责包括:数据导入事务处理(版本管理、冲突检测)、Tablet/Rowset 元数据管理、计算组资源分配和调度。由于是无状态服务,可水平扩展以提升元数据处理能力。
+Meta Service 是存算分离架构中专门负责数据层面元数据管理的无状态服务,职责包括:数据导入事务处理(版本管理、冲突检测)、Tablet/Rowset 元数据管理、计算组资源分配和调度。由于是无状态服务,可水平扩展以提升元数据处理能力。
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/versioning.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/versioning.md
index fbf54fea435..2d04524191f 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/versioning.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/features-architecture/versioning.md
@@ -117,9 +117,7 @@ TODO
### Q: 如何确认当前 Doris 版本?
-```sql
-SELECT VERSION();
-```
+使用 `SELECT VERSION();` 查询当前版本。
### Q: Latest 和 Stable 版本分别在哪里下载?
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-clickhouse.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-clickhouse.mdx
index 3915f39c78d..2334445a4aa 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-clickhouse.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-clickhouse.mdx
@@ -243,9 +243,9 @@ TPC-DS 性能测试中使用了大量关联子查询,而 ClickHouse 在测试
:::
-## 常见问题 FAQ
+## 常见问题
-### Q1: Doris 和 ClickHouse 的核心区别是什么?
+### Q: Doris 和 ClickHouse 的核心区别是什么?
Apache Doris 基于 MPP 架构提供完整的分布式 Join 能力,而 ClickHouse 采用 Scatter-Gather 架构,复杂多表关联需要依赖宽表建模。
@@ -256,43 +256,35 @@ Apache Doris 基于 MPP 架构提供完整的分布式 Join 能力,而 ClickHo
- 频繁多表关联 → 选择 Apache Doris
- 主要是单表聚合查询 → 两者皆可
----
-
-### Q2: Doris 的 Join 性能真的比 ClickHouse 快吗?
+### Q: Doris 的 Join 性能真的比 ClickHouse 快吗?
-**是的**。基于标准 TPC-H 和 TPC-DS 基准测试:
+是的。基于标准 TPC-H 和 TPC-DS 基准测试:
| 基准测试 | Apache Doris | ClickHouse |
|----------|-------------|------------|
| TPC-H SF100 | 22 个查询全部完成 | 7 个查询 OOM 失败 |
| TPC-DS | 99 个查询全部完成 | 约 50% 查询因不支持关联子查询失败 |
-**原因**:Doris 的 CBO 查询优化器会自动选择最优 Join 策略(Broadcast/Shuffle/Colocate),而 ClickHouse 需要手动调优。
-
----
+Doris 的 CBO 查询优化器会自动选择最优 Join 策略(Broadcast/Shuffle/Colocate),而 ClickHouse 需要手动调优。
-### Q3: 从 ClickHouse 迁移到 Doris 需要注意什么?
+### Q: 从 ClickHouse 迁移到 Doris 需要注意什么?
1. **SQL 语法差异**:Doris 兼容 MySQL 协议,ClickHouse 语法需调整
2. **数据模型**:ClickHouse 的宽表建模方式在 Doris 中不一定最优
3. **导入工具**:需要替换数据导入脚本,Doris 提供多种导入方式
4. **建议**:先在小规模场景验证 SQL 兼容性,再逐步迁移
----
-
-### Q4: Doris 的存算分离和 ClickHouse Cloud 有什么区别?
+### Q: Doris 的存算分离和 ClickHouse Cloud 有什么区别?
| 特性 | Apache Doris | ClickHouse Cloud |
|------|-------------|------------------|
-| 存算分离 | **开源版本已支持**(自 3.0) | 仅商业版 |
+| 存算分离 | 开源版本已支持(自 3.0) | 仅商业版 |
| 扩容行为 | 弹性计算,节点增减无需数据重平衡 | 扩容需数据重平衡 |
| 成本模型 | 按需付费,只为实际计算资源买单 | 按实例付费 |
----
-
-### Q5: Doris 能否查询数据湖?
+### Q: Doris 能否查询数据湖?
-**能**。Apache Doris 内置数据湖查询能力:
+能。Apache Doris 内置数据湖查询能力:
- 支持直接查询 **Hive、Hudi、Iceberg、Parquet** 等格式
- 无需数据导入,即可实现湖仓一体
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-elasticsearch.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-elasticsearch.mdx
index 4dba50ecc48..b70be03dae6 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-elasticsearch.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-elasticsearch.mdx
@@ -208,17 +208,17 @@ Elasticsearch 与 Apache Doris 在可观测性、网络安全和实时分析领
</div>
</div>
-## 常见问题 FAQ
+## 常见问题
-**Q: 如何从 Elasticsearch 迁移到 Apache Doris?**
+### Q: 如何从 Elasticsearch 迁移到 Apache Doris?
-A: Apache Doris 提供多种数据导入方案,支持从 Elasticsearch 全量迁移数据。具体步骤请参考[数据导入文档](../data-baseline/load-manual)。
+Apache Doris 提供多种数据导入方案,支持从 Elasticsearch 全量迁移数据。具体步骤请参考[数据导入文档](../data-baseline/load-manual)。
-**Q: Doris 的学习曲线如何?**
+### Q: Doris 的学习曲线如何?
-A: Doris 支持标准 SQL,使用 MySQL 协议连接,对于熟悉 SQL 的工程师无需额外学习查询语言。
+Doris 支持标准 SQL,使用 MySQL 协议连接,对于熟悉 SQL 的工程师无需额外学习查询语言。
-**Q: Doris 和 Elasticsearch 的日志检索性能差异?**
+### Q: Doris 和 Elasticsearch 的日志检索性能差异?
-A: 两者在简单关键词检索场景性能相近,但 Apache Doris 在聚合分析、时序数据分析场景下性能更优,且支持更丰富的分析函数。
+两者在简单关键词检索场景性能相近,但 Apache Doris 在聚合分析、时序数据分析场景下性能更优,且支持更丰富的分析函数。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-trino.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-trino.mdx
index eeb0635ec04..823f5e9c083 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-trino.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/alternatives/alternative-to-trino.mdx
@@ -195,20 +195,20 @@ TPC-DS 1TB Benchmark 包含 24 张表、63.5 亿条记录的 1TB 数据集,通

-## 常见问题 FAQ
+## 常见问题
-### Doris 与 Trino 可以共存吗?
+### Q: Doris 与 Trino 可以共存吗?
-可以。Doris 适合作为统一分析引擎,Trino 可用于特定联邦查询场景。
+功能上,在 Doris 满足数据源类型要求的情况下,可以代替 Trino。但需根据迁移情况和现有业务的兼容情况而定。
-### 迁移到 Doris 需要多长时间?
+### Q: 迁移到 Doris 需要多长时间?
Doris 提供丰富的 ETL 工具和 Hive 兼容 API,迁移周期通常为 2-4 周。
-### Doris 的湖仓查询性能真的比 Trino 快 2-3 倍吗?
+### Q: Doris 的湖仓查询性能真的比 Trino 快 2-3 倍吗?
是的。根据 TPC-DS 1TB 性能测试,当对外部 Hive 表进行查询时,Doris 在数据湖场景下展现出更优的查询加速性能。
-### 如何选择合适的物化视图策略?
+### Q: 如何选择合适的物化视图策略?
Doris 支持多种物化视图刷新策略,建议根据数据更新频率和查询模式选择增量刷新或全量刷新。查询优化器会自动匹配最优物化视图。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/before-you-start-the-poc.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/before-you-start-the-poc.md
index bbc88a97be7..989085b3f91 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/before-you-start-the-poc.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/before-you-start-the-poc.md
@@ -322,23 +322,22 @@ SET max_file_split_num = 50000;
SET group_commit_mode = 'async_mode';
```
-## FAQ
+## 常见问题
-**Q: POC 验证需要多久?**
+### Q: POC 验证需要多久?
-A: 一般 1-2 天完成基础功能验证(建表、导入、简单查询),详细性能调优需要 3-5 天。
+一般 1-2 天完成基础功能验证(建表、导入、简单查询),详细性能调优需要 3-5 天。
-**Q: 建表时如何选择分桶数?**
+### Q: 建表时如何选择分桶数?
-A: 优先设为 BE 节点数的整数倍,确保数据均匀分布。每个分桶压缩后数据建议 ≤ 20 GB(Unique Key 表 ≤ 10 GB)。
+优先设为 BE 节点数的整数倍,确保数据均匀分布。每个分桶压缩后数据建议 ≤ 20 GB(Unique Key 表 ≤ 10 GB)。
-**Q: 查询比预期慢怎么办?**
+### Q: 查询比预期慢怎么办?
-A:
1. 执行 `EXPLAIN` 检查是否走索引
2. 执行 `SHOW TABLETS` 检查数据是否倾斜
3. 查看 Query Profile 定位瓶颈
-**Q: Data Cache 是否需要开启?**
+### Q: Data Cache 是否需要开启?
-A: 如果涉及湖上查询(Hive/Iceberg/Paimon),建议开启。首次查询会自动缓存数据,重复查询可获得接近内表的性能。
+如果涉及湖上查询(Hive/Iceberg/Paimon),建议开启。首次查询会自动缓存数据,重复查询可获得接近内表的性能。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/getting-started.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/intro.mdx
similarity index 68%
rename from i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/getting-started.mdx
rename to i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/intro.mdx
index c92eabefab9..8086bfadabd 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/getting-started.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/intro.mdx
@@ -18,19 +18,19 @@ import GettingStartedCard from '@site/src/components/getting-started-card/gettin
<GettingStartedCard
title="Apache Doris 简介"
description="了解 Apache Doris 的架构、核心功能和技术特点"
- link="/docs/gettingStarted/what-is-apache-doris"
+ link="what-is-apache-doris"
/>
<GettingStartedCard
title="快速开始"
description="在几分钟内启动并运行 Apache Doris"
- link="/docs/gettingStarted/quick-start"
+ link="quick-start"
/>
<GettingStartedCard
title="POC 准备指南"
description="了解 POC 前的硬件准备和环境配置建议"
- link="/docs/gettingStarted/before-you-start-the-poc"
+ link="before-you-start-the-poc"
/>
</div>
@@ -40,19 +40,19 @@ import GettingStartedCard from '@site/src/components/getting-started-card/gettin
<GettingStartedCard
title="替代 ClickHouse"
description="了解 Apache Doris 如何对比和替代 ClickHouse"
- link="/docs/gettingStarted/alternatives/alternative-to-clickhouse"
+ link="alternatives/alternative-to-clickhouse"
/>
<GettingStartedCard
title="替代 Elasticsearch"
description="了解 Apache Doris 如何作为 Elasticsearch 的替代方案"
- link="/docs/gettingStarted/alternatives/alternative-to-elasticsearch"
+ link="alternatives/alternative-to-elasticsearch"
/>
<GettingStartedCard
title="替代 Trino"
description="了解 Apache Doris 如何替代或与 Trino 协同工作"
- link="/docs/gettingStarted/alternatives/alternative-to-trino"
+ link="alternatives/alternative-to-trino"
/>
</div>
@@ -62,13 +62,13 @@ import GettingStartedCard from '@site/src/components/getting-started-card/gettin
<GettingStartedCard
title="安装与部署"
description="为您的环境选择合适的部署方式"
- link="/docs/install/intro"
+ link="../install/intro"
/>
<GettingStartedCard
title="Kubernetes 部署"
description="使用 Doris Operator 在 Kubernetes 上部署"
- link="/docs/install/deploy-on-kubernetes/intro"
+ link="../install/deploy-on-kubernetes/intro"
/>
</div>
@@ -78,26 +78,19 @@ import GettingStartedCard from '@site/src/components/getting-started-card/gettin
<GettingStartedCard
title="使用场景"
description="了解真实的应用案例和成功故事"
- link="/docs/use-cases/overview"
+ link="../use-cases/overview"
/>
<GettingStartedCard
title="性能测试"
description="查看性能基准测试数据"
- link="/docs/benchmark/overview"
+ link="../benchmark/overview"
/>
<GettingStartedCard
title="架构与概念"
description="深入了解 Doris 内部工作原理"
- link="/docs/architecture-concepts/overview"
+ link="../architecture-concepts/overview"
/>
</div>
-## 下一步
-
-熟悉基础内容后,您可以继续探索:
-
-- **[架构与概念](../architecture-concepts/overview)** - 深入了解 Doris 的内部架构
-- **[SQL 手册](../sql-manual/introduction)** - 学习 SQL 语法和函数
-- **[数据湖](../lakehouse/intro)** - 与数据湖和外部目录集成
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/quick-start.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/quick-start.mdx
index 287d01fa5b0..cee802b7801 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/quick-start.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/getting-started/quick-start.mdx
@@ -225,33 +225,33 @@ select * from demo.mytable;
## 常见问题
-**Q: Docker 部署适合生产环境吗?**
+### Q: Docker 部署适合生产环境吗?
-A: 不适合。Docker 部署仅用于本地开发和测试,数据在容器销毁时会丢失。生产环境请使用本地完整部署或多节点部署。
+不适合。Docker 部署仅用于本地开发和测试,数据在容器销毁时会丢失。生产环境请使用本地完整部署或多节点部署。
-**Q: 如何在 Mac 上安装 Docker?**
+### Q: 如何在 Mac 上安装 Docker?
-A: 下载并安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)。
+下载并安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)。
-**Q: Mac 安装 Docker Desktop 后提示 "Docker environment not detected"?**
+### Q: Mac 安装 Docker Desktop 后提示 "Docker environment not detected"?
-A: 创建符号链接:
+创建符号链接:
```shell
sudo ln -s /Applications/Docker.app/Contents/Resources/bin/docker /usr/local/bin/docker
```
-**Q: Mac 上 Docker 报 "error getting credentials"?**
+### Q: Mac 上 Docker 报 "error getting credentials"?
-A: 删除 `~/.docker/config.json` 中的 `credsStore` 字段作为临时方案。注意:这会以明文存储凭据,仅限本地开发环境使用。
+删除 `~/.docker/config.json` 中的 `credsStore` 字段作为临时方案。注意:这会以明文存储凭据,仅限本地开发环境使用。
-**Q: BE 节点添加后仍显示 "Dead"?**
+### Q: BE 节点添加后仍显示 "Dead"?
-A: 检查 BE 的 `priority_networks` 是否与 FE 所在网段一致,并确认 BE 端口(9050/9060/8040/8060)未被防火墙拦截。
+检查 BE 的 `priority_networks` 是否与 FE 所在网段一致,并确认 BE 端口(9050/9060/8040/8060)未被防火墙拦截。
-**Q: 如何确认集群整体健康?**
+### Q: 如何确认集群整体健康?
-A: 执行 `SHOW FRONTENDS;` 和 `SHOW BACKENDS;`,确保所有节点的 `Alive` 列为 `true`。
+执行 `SHOW FRONTENDS;` 和 `SHOW BACKENDS;`,确保所有节点的 `Alive` 列为 `true`。
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/choosing-deployment-mode.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/choosing-deployment-mode.md
new file mode 100644
index 00000000000..c4e8e779abf
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/choosing-deployment-mode.md
@@ -0,0 +1,105 @@
+---
+{
+ "title": "选择合适的部署模式",
+ "language": "zh-CN",
+ "sidebar_label": "选择部署模式",
+ "description": "Choose between integrated storage-compute or decoupled mode, and between manual, Kubernetes, or cloud deployment."
+}
+---
+
+## 快速选择
+
+根据你的业务场景,快速确定部署方案:
+
+| 场景 | 推荐方案 |
+|------|----------|
+| 需要弹性扩缩容,云上部署 | 存算分离 + 云平台部署 |
+| 固定规模,On-Premise | 存算一体 + 手动部署 |
+| 大规模集群,需要自动化管理 | 存算分离 + Kubernetes 部署 |
+
+---
+
+## 存算一体 vs 存算分离
+
+| 对比项 | 存算一体 | 存算分离 |
+|--------|----------|----------|
+| 架构 | 数据和计算紧密结合,BE 节点同时负责存储和查询 | 计算层(BE)和存储层(Shared Storage)分离 |
+| 适用场景 | 业务规模固定、要求极致查询性能、环境无共享存储 | 需要弹性扩缩容、云上部署、大数据分析 |
+| 优点 | 架构简单、延迟低、无需外部共享存储 | 计算资源可独立扩缩容、存储成本低、更灵活的资源隔离 |
+| 缺点 | 计算资源无法独立扩展 | 组件更多,且需要稳定的共享存储服务 |
+
+---
+
+## 部署方式
+
+### 手动部署
+
+通过脚本和配置文件手动部署,适合中小规模集群和初始验证。
+
+- 适合场景:快速验证、最小化部署、熟悉集群架构
+- 不适合:大规模集群、需要频繁变更的环境
+
+详细步骤请参考:[手动部署存算一体集群](./deploy-manually/integrated-storage-compute-deploy-manually) 或 [手动部署存算分离集群](./deploy-manually/separating-storage-compute-deploy-manually)
+
+### Kubernetes 部署
+
+使用 Doris Operator 在 Kubernetes 上管理集群,适合大规模生产和自动化场景。
+
+- 适合场景:大规模集群、需要声明式管理、混合云部署
+- 要求:Kubernetes 集群、Doris Operator
+
+详细步骤请参考:[Kubernetes 部署](./deploy-on-kubernetes/install-on-kubernetes)
+
+### 云平台部署
+
+在阿里云、AWS 等云平台上部署,利用云原生基础设施。
+
+- 适合场景:云上业务、需要快速创建、环境隔离
+- 支持:阿里云 ECI、AWS EKS 等
+
+详细步骤请参考:[云平台部署](./deploy-on-cloud)
+
+---
+
+## 决策建议
+
+1. **第一次尝试 Doris**:从存算一体 + 手动部署开始,架构简单,容易上手
+2. **生产环境,中小规模**:存算一体 + 手动部署或 Kubernetes 部署
+3. **云上部署,需要弹性**:存算分离 + 云平台部署或 Kubernetes 部署
+4. **大规模生产集群**:存算分离 + Kubernetes 部署,便于自动化运维
+
+---
+
+## 常见问题
+
+### Q: 存算分离架构会显著影响查询性能吗?
+
+通常情况下,存算分离架构由于计算层和存储层分离会增加网络开销,但在大多数场景下影响有限。这是因为:
+- Shared Storage 通常部署在高速网络环境中(如 25Gbps RDMA)
+- 数据缓存机制可以有效减少远程读取的频率
+- 一些极端低延迟场景,存算一体可能更合适
+
+### Q: 已有集群如何从存算一体迁移到存算分离?
+
+迁移过程大致如下:
+1. 在新环境部署存算分离集群
+2. 通过 Broker Load 或 Stream Load 将数据迁移
+3. 验证数据一致性和查询性能
+4. 下线旧集群
+
+### Q: Kubernetes 部署是否需要专业的运维团队?
+
+这取决于集群规模:
+- 小规模集群(10 节点以内):K8s 部署的额外复杂度可能不值得
+- 中大规模集群(10+ 节点):K8s 的自动化能力可以显著降低运维成本
+
+### Q: 云平台部署和 Kubernetes 部署如何选择?
+
+| 对比项 | 云平台部署 | Kubernetes 部署 |
+|--------|------------|------------------|
+| 适用场景 | 快速部署、弹性资源 | 混合云、多云环境 |
+| 管理复杂度 | 低 | 中等 |
+| 灵活性 | 受限于云平台能力 | 高,可自定义 |
+| 成本 | 可能产生额外的云服务费用 | 更可控 |
+
+
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/integrated-storage-compute-deploy-manually.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/integrated-storage-compute-deploy-manually.md
index 2031c53402d..a7028259eda 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/integrated-storage-compute-deploy-manually.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/integrated-storage-compute-deploy-manually.md
@@ -1,20 +1,28 @@
---
{
"title": "手动部署存算一体集群",
+ "sidebar_label": "手动部署存算一体集群",
"language": "zh-CN",
- "description": "在完成前置检查及规划后,如环境检查、操作系统检查、集群规划,可以开始部署集存算一体集群。"
+ "description": "如何在 Linux 环境手动部署 Apache Doris 存算一体集群,包含 FE/BE 节点部署、配置与验证。适用于生产环境集群搭建。",
+ "keywords": [
+ "部署 Doris",
+ "存算一体部署",
+ "FE 节点部署",
+ "BE 节点部署",
+ "Doris 集群搭建",
+ "Doris 手动安装"
+ ]
}
---
-在完成前置检查及规划后,如[环境检查](../preparation/env-checking.md)、[操作系统检查](../preparation/os-checking.md)、[集群规划](../preparation/cluster-planning.md),可以开始部署集存算一体集群。
-
-存算一体集群架构如下,部署存算一体集群分为四步:
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 集群部署 / 环境验收 -->
-
+部署存算一体集群分为四步:
1. **部署 FE Master 节点**:部署第一个 FE 节点作为 Master 节点;
-2. **部署 FE 集群**:部署 FE 集群,添加 Follower 或 Observer FE 节点;
+2. **部署 FE 集群(可选)**:部署 FE 集群,添加 Follower 或 Observer FE 节点;
3. **部署 BE 节点**:向 FE 集群中注册 BE 节点;
@@ -22,6 +30,20 @@
在开始部署操作前,可以[下载](https://doris.apache.org/download)对应的 Doris 版本。
+## 前置条件
+
+在开始部署前,请确认以下条件已满足:
+
+| 检查项 | 要求 | 相关文档 |
+|--------|------|---------|
+| 操作系统 | CentOS 7+ / Ubuntu 22.04+ | [操作系统检查](../preparation/os-checking.md) |
+| JDK 版本 | JDK 17+ | - |
+| 网络 | 节点间互通,端口可访问 | [环境检查](../preparation/env-checking.md) |
+| 磁盘空间 | FE 建议 100GB+,BE 建议 500GB+ | [集群规划](../preparation/cluster-planning.md) |
+
+在完成前置检查及规划后,如[环境检查](../preparation/env-checking.md)、[操作系统检查](../preparation/os-checking.md)、[集群规划](../preparation/cluster-planning.md),可以开始部署集存算一体集群。
+
+
## 第 1 步:部署 FE Master 节点
1. **创建元数据路径**
@@ -61,11 +83,11 @@
参数解释如下,更多详细配置项请参考 [FE 配置项](../../admin-manual/config/fe-config):
| 参数 | 修改建议 |
- | ------------------------------------------------------------ | --------------------------------------------------------- |
- | JAVA_OPTS | 指定参数 `-Xmx` 调整 Java Heap,生产环境建议 16G 以上。 |
- | [lower_case_table_names ](../../admin-manual/config/fe-config#lower_case_table_names) | 设置大小写敏感,建议调整为 1,即大小写不敏感。 |
- | [priority_networks ](../../admin-manual/config/fe-config#priority_networks) | 网络 CIDR,根据网络 IP 地址指定。在 FQDN 环境中可以忽略。 |
- | JAVA_HOME | 建议 Doris 使用独立于操作系统的 JDK 环境。 |
+ | ------------------------------------------------------------ | --------------------------------------------------------- |
+ | JAVA_OPTS | 指定参数 `-Xmx` 调整 Java Heap,生产环境建议 16G 以上。 |
+ | [lower_case_table_names ](../../admin-manual/config/fe-config#lower_case_table_names) | 设置大小写敏感,建议调整为 1,即大小写不敏感。(该参数在集群创建后不能再修改) |
+ | [priority_networks ](../../admin-manual/config/fe-config#priority_networks) | 网络 CIDR,根据网络 IP 地址指定。在 FQDN 环境中可以忽略。 |
+ | JAVA_HOME | 建议 Doris 使用独立于操作系统的 JDK 环境。 |
3. **启动 FE 进程**
@@ -97,7 +119,7 @@
## 第 2 步:部署 FE 集群(可选)
-生产环境建议至少部署 3 个节点。在部署过 FE Master 节点后,需要再部署两个 FE Follower 节点。
+单 FE 节点可以用于测试验证。生产环境建议至少部署 3 个节点。在部署过 FE Master 节点后,需要再部署两个 FE Follower 节点。
1. **创建元数据目录**
@@ -131,6 +153,7 @@
- 当 FE 处于高可用部署时(1 个 Master,2 个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力
:::
+
4. **启动 FE Follower 节点**
通过以下命令,可以启动 FE Follower 节点,并自动同步元数据。
@@ -162,15 +185,12 @@
```Bash
## modify storage path for BE node
-
storage_root_path=/home/disk1/doris,medium:HDD;/home/disk2/doris,medium:SSD
## modify network CIDR
-
priority_networks = 10.1.3.0/24
## modify Java Home in be/conf/be.conf
-
JAVA_HOME = <your-java-home-path>
```
@@ -239,13 +259,13 @@
```SQL
-- check fe status
- show frontends \G
+ show frontends;
-- check be status
- show backends \G
+ show backends;
```
-4. **修改 Doris 集群密码**
+3. **修改 Doris 集群密码**
在创建 Doris 集群时,系统会自动创建一个名为 `root` 的用户,并默认设置其密码为空。为了提高安全性,建议在集群创建后立即为 `root` 用户设置一个新密码。
@@ -262,7 +282,7 @@
SET PASSWORD = PASSWORD('doris_new_passwd');
```
-5. **创建测试表并插入数据**
+4. **创建测试表并插入数据**
为了验证集群的正确性,可以在新创建的集群中创建一个测试表,并插入测试数据。
@@ -304,4 +324,64 @@
| 1 | 10.10 | AAA | 10 |
| 2 | 10.20 | BBB | 20 |
+------+-------+------+------+
- ```
+
+---
+
+## 注意事项
+
+- FE 元数据目录建议使用独立的 SSD 硬盘,不建议放在 Doris 安装目录下。
+- BE 数据目录可以配置多盘,使用 `storage_root_path` 参数,格式为 `path1,medium:HDD;path2,medium:SSD`。
+- 生产环境建议部署 3 个 FE Follower 节点组成高可用模式。
+- `lower_case_table_names` 参数在集群创建后不能再修改,请在初始化时确认设置正确。
+- `priority_networks` 参数需要根据实际网络配置,确保与节点 IP 所在网段匹配。
+
+## 常见问题
+
+### Q: FE 启动失败如何排查?
+
+1. 检查 Java 环境:`echo $JAVA_HOME` 确保 JDK 已安装
+2. 查看日志:`tail -100 log/fe.log` 查找 `Exception` 或 `ERROR`
+3. 常见错误:
+ - **端口被占用**:检查 `fe.conf` 中的 `query_port`(默认 9030)是否被占用
+ - **元数据目录权限**:确保 `doris-meta` 目录可读写
+
+### Q: BE 无法注册到 FE 集群怎么办?
+
+1. 确认 FE 集群正常运行:`show frontends` 检查 Alive 状态
+2. 检查网络连通性:`telnet <fe_ip> 9030` 测试端口
+3. 检查 BE 配置:`be.conf` 中 `priority_networks` 是否与实际 IP 匹配
+4. 查看 BE 日志:`tail -100 log/be.log` 查找注册失败原因
+
+### Q: 如何检查集群健康状态?
+
+```SQL
+-- 检查 FE 状态
+SHOW FRONTENDS;
+
+-- 检查 BE 状态
+SHOW BACKENDS;
+-- 确认所有 BE 的 Alive 为 true
+```
+
+### Q: 如果忘记 root 密码,如何重置?
+
+在 FE 节点通过 127.0.0.1 进行连接,可以使用 root 用户免密登录,然后修改密码:
+
+```Bash
+mysql -h127.0.0.1 -P9030 -uroot
+
+-- 重置密码
+SET PASSWORD = PASSWORD('your_new_password');
+```
+
+---
+
+## 故障排查
+
+| 问题现象 | 可能原因 | 解决方案 |
+|---------|---------|---------|
+| FE 无法启动 | 端口被占用 | 修改 `fe.conf` 中端口或 kill 占用进程 |
+| FE 元数据同步失败 | 网络问题或节点失联 | 检查节点间网络,确保 `priority_networks` 配置正确 |
+| BE 注册失败 | FE 集群不可用 | 确认 FE 至少有一个节点 Alive |
+| BE 显示 Alive 但无 Tablet | 数据均衡未完成 | 等待一段时间,新节点会自动进行数据均衡 |
+| 密码修改失败 | 语法错误或权限问题 | 使用 `SET PASSWORD = PASSWORD('new_password')` 语法 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/intro.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/intro.mdx
new file mode 100644
index 00000000000..5aabfe1b995
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/intro.mdx
@@ -0,0 +1,27 @@
+---
+{
+ "title": "手动部署",
+ "language": "zh-CN",
+ "description": "在物理机或虚拟机上直接安装 Apache Doris。"
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# 手动部署
+
+请根据您所采用的存算架构选择对应的手动部署指南。
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="存算一体手动部署"
+ description="在物理机或虚拟机上以存算一体模式部署 Apache Doris"
+ link="integrated-storage-compute-deploy-manually"
+/>
+
+<GettingStartedCard
+ title="存算分离手动部署"
+ description="在物理机或虚拟机上以存算分离模式部署 Apache Doris"
+ link="separating-storage-compute-deploy-manually"
+/>
+</div>
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/separating-storage-compute-deploy-manually.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/separating-storage-compute-deploy-manually.md
index efe3c36c387..d7493cebd7e 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/separating-storage-compute-deploy-manually.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-manually/separating-storage-compute-deploy-manually.md
@@ -2,45 +2,69 @@
{
"title": "手动部署存算分离集群",
"language": "zh-CN",
- "description": "在完成前置检查及规划后,如环境检查、集群规划、操作系统检查后,可以开始部署集群。部署集群分为八步:"
+ "description": "详细指南:如何在 Linux 环境手动部署 Doris 存算分离集群,包括 FoundationDB、S3/HDFS、Meta Service、FE/BE 部署步骤及常见问题解答。",
+ "keywords": [
+ "Doris 存算分离部署",
+ "存算分离集群安装",
+ "FoundationDB 部署",
+ "Doris cloud 部署",
+ "S3 存储配置",
+ "Meta Service 部署"
+ ]
}
---
-在完成前置检查及规划后,如环境检查、集群规划、操作系统检查后,可以开始部署集群。部署集群分为八步:
+部署存算分离集群分为八步:
1. **准备 FoundationDB 集群**:可以使用已有的 FoundationDB 集群,或新建 FoundationDB 集群;
-
-3. **部署 S3 或 HDFS 服务**:可以使用已有的共享存储,或新建共享存储;
-
-4. **部署 Meta Service**:为 Doris 集群部署 Meta Service 服务;
-
-5. **部署数据回收进程**:为 Doris 集群独立部署数据回收进程,可选操作;
-
-6. **启动 FE Master 节点**:启动第一个 FE 节点作为 Master FE 节点;
-
-7. **创建 FE Master 集群**:添加 FE Follower/Observer 节点组成 FE 集群;
-
-8. **添加 BE 节点**:向集群中添加并注册 BE 节点;
-
-9. **添加 Storage Vault**:使用共享存储创建一个或多个 Storage Vault。
+
+2. **部署 S3 或 HDFS 服务**:可以使用已有的共享存储,或新建共享存储;
+
+3. **部署 Meta Service**:为 Doris 集群部署 Meta Service 服务;
+
+4. **部署数据回收进程**:为 Doris 集群独立部署数据回收进程,可选操作;
+
+5. **启动 FE Master 节点**:启动第一个 FE 节点作为 Master FE 节点;
+
+6. **创建 FE Master 集群**:添加 FE Follower/Observer 节点组成 FE 集群;
+
+7. **添加 BE 节点**:向集群中添加并注册 BE 节点;
+
+8. **添加 Storage Vault**:使用共享存储创建一个或多个 Storage Vault。
在开始部署操作前,可以[下载](https://doris.apache.org/download)相应的 Doris 版本。
+## 前置条件
+
+<!-- 知识类型: 硬件与软件要求 -->
+<!-- 适用场景: 部署前检查 -->
+
+| 类型 | 要求 |
+|------|------|
+| **操作系统** | Linux(CentOS 7+,Ubuntu 20.04+) |
+| **JDK** | OpenJDK 17(需设置 JAVA_HOME) |
+| **FoundationDB** | 版本 7.1.x 系列 |
+| **网络** | 节点间端口互通(默认:FE 8030,BE 9050,Meta Service 5000) |
+| **磁盘** | SSD 推荐(尤其 FDB 数据目录) |
+
## 第 1 步:准备 FoundationDB
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
本节提供了脚本 `fdb_vars.sh` 和 `fdb_ctl.sh` 配置、部署和启动 FDB(FoundationDB)服务的分步指南。您可以下载 [doris tools](http://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.0.2-tools.tar.gz) 并从 `fdb` 目录获取 `fdb_vars.sh` 和 `fdb_ctl.sh`。
:::tip
Doris 默认依赖的 FDB 版本为 7.1.x 系列。若已提前安装 FDB,请确认其版本属于 7.1.x 系列,否则 Meta Service 将启动失败。
:::
-1. 机器要求
+### 机器要求
- 通常,至少需要三台配备 SSD 的机器来组成具有双副本、单机故障容忍的 FoundationDB 集群。如果是测试/开发环境,单台机器也能搭建 FoundationDB。
+通常,至少需要三台配备 SSD 的机器来组成具有双副本、单机故障容忍的 FoundationDB 集群。如果是测试/开发环境,单台机器也能搭建 FoundationDB。
-2. 配置 `fdb_vars.sh` 脚本
+### 配置 fdb_vars.sh 脚本
- 在配置 `fdb_vars.sh` 脚本时,必须指定以下配置:
+在配置 `fdb_vars.sh` 脚本时,必须指定以下配置:
| 参数 | 描述 | 类型 | 示例 | 注意事项 |
| ---------------- | -------------------------------- | ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
@@ -58,17 +82,17 @@ Doris 默认依赖的 FDB 版本为 7.1.x 系列。若已提前安装 FDB,请
| MEMORY_LIMIT_GB | 定义 FDB 进程的内存限制,单位为 GB | 整数 | MEMORY_LIMIT_GB=16 | 根据可用内存资源和 FDB 进程的要求调整此值 |
| CPU_CORES_LIMIT | 定义 FDB 进程的 CPU 核心限制 | 整数 | CPU_CORES_LIMIT=8 | 根据可用的 CPU 核心数量和 FDB 进程的要求设置此值 |
-3. 部署 FDB 集群
+### 部署 FDB 集群
- 使用 `fdb_vars.sh` 配置环境后,您可以在每个节点上使用 `fdb_ctl.sh` 脚本部署 FDB 集群。
+使用 `fdb_vars.sh` 配置环境后,您可以在每个节点上使用 `fdb_ctl.sh` 脚本部署 FDB 集群。
- ```bash
- ./fdb_ctl.sh deploy
- ```
+```bash
+./fdb_ctl.sh deploy
+```
-4. 启动 FDB 服务
+### 启动 FDB 服务
- FDB 集群部署完成后,您可以使用 `fdb_ctl.sh` 脚本启动 FDB 服务。
+FDB 集群部署完成后,您可以使用 `fdb_ctl.sh` 脚本启动 FDB 服务。
```bash
./fdb_ctl.sh start
@@ -76,12 +100,15 @@ Doris 默认依赖的 FDB 版本为 7.1.x 系列。若已提前安装 FDB,请
以上命令启动 FDB 服务,使集群工作并获取 FDB 集群连接字符串,后续可以用于配置 MetaService。
- :::caution 注意
+ :::warning
fdb_ctl.sh 脚本中的 clean 命令会清除所有 fdb 元数据信息,可能导致数据丢失,严禁在生产环境中使用!
:::
## 第 2 步:安装 S3 或 HDFS 服务(可选)
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
Doris 的存算分离模式依赖于 S3 或 HDFS 服务来存储数据,如果您已经有相关服务,直接使用即可。
如果没有,本文档提供 MinIO 的简单部署教程:
@@ -119,6 +146,9 @@ Doris 的存算分离模式依赖于 S3 或 HDFS 服务来存储数据,如果
## 第 3 步:Meta Service 部署
+<!-- 知识类型: 配置参数 -->
+<!-- 适用场景: 部署安装 -->
+
1. 配置
在 `./conf/doris_cloud.conf` 文件中,主要需要修改以下两个参数:
@@ -170,12 +200,17 @@ Doris 的存算分离模式依赖于 S3 或 HDFS 服务来存储数据,如果
## 第 4 步:数据回收功能独立部署(可选)
-::info 信息
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
+:::tip
Meta Service 本身具备了元数据管理和回收功能,这两个功能可以独立部署,如果需要独立部署数据回收功能,可参考以下步骤。
:::
+:::
+
1. 创建新的工作目录(如 `recycler`),并复制 `ms` 目录内容到新目录:
```shell
@@ -200,6 +235,9 @@ Meta Service 本身具备了元数据管理和回收功能,这两个功能可
## 第 5 步:启动 FE Master 节点
+<!-- 知识类型: 配置参数 -->
+<!-- 适用场景: 部署安装 -->
+
1. 配置 fe.conf 文件
在 `fe.conf` 文件中,需要配置以下关键参数:
@@ -230,6 +268,9 @@ Meta Service 本身具备了元数据管理和回收功能,这两个功能可
## 第 6 步:注册 FE Follower/Observer 节点
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
其他节点同样根据上述步骤修改配置文件并启动,使用 mysql 客户端连接 Master 角色的 FE,并用以下 SQL 命令添加额外的 FE 节点:
```sql
@@ -243,6 +284,9 @@ ALTER SYSTEM ADD FOLLOWER "host:port";
## 第 7 步:添加 BE 节点
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
要向集群添加 Backend 节点,请对每个 Backend 执行以下步骤:
1. 配置 be.conf
@@ -294,6 +338,9 @@ ALTER SYSTEM ADD FOLLOWER "host:port";
## 第 8 步:添加 Storage Vault
+<!-- 知识类型: 操作步骤 -->
+<!-- 适用场景: 部署安装 -->
+
Storage Vault 是 Doris 存算分离架构中的重要组件。它们代表了存储数据的共享存储层。您可以使用 HDFS 或兼容 S3 的对象存储创建一个或多个 Storage Vault。可以将一个 Storage Vault 设置为默认 Storage Vault,系统表和未指定 Storage Vault 的表都将存储在这个默认 Storage Vault 中。默认 Storage Vault 不能被删除。以下是为您的 Doris 集群创建 Storage Vault 的方法:
1. 创建 HDFS Storage Vault
@@ -339,6 +386,67 @@ Storage Vault 是 Doris 存算分离架构中的重要组件。它们代表了
SET <storage_vault_name> AS DEFAULT STORAGE VAULT
```
+## 常见问题
+
+### Q: Meta Service 启动失败,提示 "FDB version mismatch"?
+
+Doris 默认依赖 FDB 7.1.x 系列。请执行 `fdbserver --version` 确认已安装的 FoundationDB 版本。如版本不匹配,需重新安装正确版本的 FDB。
+
+### Q: 如何确认 FE 节点已成功启动并成为 Master?
+
+执行以下命令确认:
+```bash
+mysql -h <fe_host> -P 9030 -u root -e "SHOW FRONTENDS;"
+```
+检查输出中对应 FE 的 `Role` 列是否为 `MASTER`。
+
+### Q: BE 节点启动后一直处于 "Starting" 状态如何排查?
+
+请按以下步骤排查:
+1. 检查 BE 日志 `be.log` 中是否有错误信息
+2. 确认 `meta_service_endpoint` 配置正确且 Meta Service 可访问
+3. 确认 `deploy_mode` 配置为 `cloud`
+4. 执行 `SHOW BACKENDS;` 查看详细的错误描述
+
+### Q: 如何确认 Storage Vault 已创建成功?
+
+执行以下 SQL 查看:
+```sql
+SHOW STORAGE VAULT;
+```
+确认创建的 Vault 状态为 `OK`。
+
+### Q: 添加 BE 节点时报错 "backend already exists"?
+
+该 BE 节点可能已存在或之前的记录未完全清理。执行以下命令移除旧记录后重试:
+```sql
+ALTER SYSTEM DROP BACKEND "<ip>:<port>";
+```
+
+## 故障排查
+
+### FE 无法连接 Meta Service
+
+- **症状**:FE 日志提示 "connect to meta service failed"
+- **排查步骤**:
+ 1. 确认 Meta Service 进程运行正常:`ps aux | grep doris_cloud`
+ 2. 检查 `meta_service_endpoint` 配置格式是否正确(应为 `IP:Port`)
+ 3. 确认节点间网络互通(默认端口 5000)
+
+### BE 启动失败 "Too many open files"
+
+- **排查步骤**:
+ 1. 执行 `ulimit -n` 检查当前限制
+ 2. 在 `be.conf` 中添加 `max_open_files = 65535`
+ 3. 或执行 `ulimit -n 65535` 后重新启动 BE
+
+### FDB 集群无法启动
+
+- **排查步骤**:
+ 1. 检查 `fdb_vars.sh` 中 `DATA_DIRS` 目录是否存在且有权限
+ 2. 确认所有节点的 `FDB_CLUSTER_IPS` 配置一致
+ 3. 查看 FDB 日志 `/var/log/foundationdb/fdbserver.log`
+
## 注意事项
- 仅元数据操作功能的 Meta Service 进程应作为 FE 和 BE 的 `meta_service_endpoint` 配置目标。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-cloud/doris-on-aws.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-cloud/doris-on-aws.md
index f6881e75128..faea58d2c79 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-cloud/doris-on-aws.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-cloud/doris-on-aws.md
@@ -6,51 +6,70 @@
}
---
-为了方便大家在 AWS 上快速体验 Doris,提供了 CloudFormation 模版(CFT),允许快速启动和运行集群。使用模板,只需最少的配置,就可以自动配置 AWS 资源,并启动 Doris 集群。
+本文介绍如何在 AWS 上快速部署 Doris 集群,以便体验最新的 Doris 功能。
-当然,您也可以自行购买 AWS 资源,采用标准的手动方式进行集群部署。
+## 适用场景
+
+如果您希望在 AWS 上快速体验 Doris,可以选择以下两种部署方式:
+
+| 部署方式 | 适用人群 | 特点 |
+| --- | --- | --- |
+| 使用 CloudFormation 模板(CFT)部署 | 希望快速启动并体验 Doris 的用户 | 只需最少的配置,自动配置 AWS 资源并启动集群 |
+| 自行购买 AWS 资源,手动部署 | 希望自定义部署架构的用户 | 完全自主控制资源选择与配置流程 |
+
+本文重点介绍**基于 CloudFormation 模板**的快速部署方式。
:::tip
-目前还不支持存算分离模式编译部署
+目前还不支持存算分离模式的编译部署。
:::
-## 什么是 AWS CloudFormation?
+:::caution
+- 当前的 CloudFormation 模板仅支持 **us-east-1**、**us-west-1**、**us-west-2** 三个区域。
+- Doris on AWS CloudFormation 主要用于测试或体验,**请勿用于生产环境**。
+:::
-CloudFormation 允许用户只用一个步骤就可以创建一个“资源堆栈”。资源是指用户所创建的东西(如 EC2 实例、VPC、子网等),一组这样的资源称为堆栈。用户可以编写一个模板,使用它可以很容易地按照用户的意愿通过一个步骤创建一个资源堆栈。这比手动创建并且配置更快,而且可重复,一致性更好。并且可以将模板放入源代码做版本控制,在任何时候根据需要把它用于任何目的。
+## 背景概念
-## 什么是 Doris on AWS CloudFormation?
+### 什么是 AWS CloudFormation?
-当前 Doris 提供了 Doris CloudFormation Template,方便用户直接使用这个模板可以在 AWS 上快速创建 Doris 相关版本的集群,以便体验最新的 Doris 功能。
+CloudFormation 允许用户只用一个步骤就可以创建一个“资源堆栈”。其中:
-:::caution
+- **资源**:用户所创建的东西,如 EC2 实例、VPC、子网等。
+- **堆栈**:一组这样的资源。
-注意:
+用户可以编写一个模板,按照自己的意愿通过一个步骤创建一个资源堆栈。相比手动创建与配置,CloudFormation 具备以下优势:
-基于 CloudFormation 构建 Doris 集群的模板,当前仅支持 us-east-1,us-west-1,us-west-2 区域。
+- 创建速度更快
+- 可重复执行,一致性更好
+- 支持将模板纳入源代码进行版本控制,可在任何时候按需复用
-Doris on AWS CloudFormation 主要用于测试或者体验,请不要用于生产环境。
-:::
+### 什么是 Doris on AWS CloudFormation?
+
+Doris 官方提供了 Doris CloudFormation Template,用户可以直接使用该模板在 AWS 上快速创建指定版本的 Doris 集群,方便快速体验最新功能。
-## 使用前注意
+## 部署前准备
-- 确定要部署的 VPC 和 Subnet
+在开始部署之前,请提前确认以下信息:
-- 确定用来登录节点的 key pair
+- 确定要部署到的 **VPC** 和 **Subnet**
+- 确定用于登录节点的 **key pair**
+- 知悉部署过程中会创建 **S3 的 VPC Endpoint Interface**
-- 部署中会建立 S3 的 VPC Endpoint Interface
+## 部署步骤
-## 开始部署
+### 步骤 1:进入 CloudFormation 并创建 Stack
-**1. AWS 控制台上,进入 CloudFormation,点击 Create stack**
+在 AWS 控制台上进入 CloudFormation,点击 **Create stack**。

-选用 Amazon S3 URL Template source,填写 Amazon S3 URL 为下面模板链接:
+选择 **Amazon S3 URL** 作为 Template source,并填写 Amazon S3 URL 为以下模板链接:
+```
https://sdb-cloud-third-party.s3.amazonaws.com/doris-cf/cloudformation_doris.template.yaml
+```
-**2. 配置模板的具体参数**
-
+### 步骤 2:配置模板参数

@@ -58,40 +77,34 @@ https://sdb-cloud-third-party.s3.amazonaws.com/doris-cf/cloudformation_doris.tem

-
主要参数说明如下:
-- VPC ID:要部署到的 VPC
-
-- Subnet ID:要部署的子网
-
-- Key pair name:用来连接部署后的 BE 和 FE 节点的 public/private key pairs
+| 参数 | 说明 | 备注 |
+| --- | --- | --- |
+| VPC ID | 要部署到的 VPC | 必填 |
+| Subnet ID | 要部署的子网 | 必填 |
+| Key pair name | 用来连接部署后的 BE 和 FE 节点的 public/private key pairs | 必填 |
+| Version of Doris | 选择部署的 Doris 版本 | 例如 2.1.0、2.0.6 等 |
+| Number of Doris FE | FE 的个数 | 模板默认只能选择 1 个 FE |
+| Fe instance type | FE 的节点类型 | 可采用默认值 |
+| Number of Doris Be | BE 节点的个数 | 可选择 1 个或 3 个 |
+| Be instance type | BE 的节点类型 | 可采用默认值 |
+| Meta data dir | FE 节点的元数据目录 | 可采用默认值 |
+| Sys log level | 系统日志等级 | 可使用默认的 info |
+| Volume type of Be nodes | BE 节点挂载 EBS 的 volume type | 每台节点默认挂载一块磁盘,可使用默认值 |
+| Volume size of Be nodes | BE 节点挂载 EBS 的大小(单位:GB) | 可使用默认值 |
-- Version of Doris:选择部署的 Doris 版本,比如 2.1.0、2.0.6 等
+## 连接 Doris 集群
-- Number of Doris FE:FE 的个数,模板默认只能选择 1 个 FE
+### 步骤 1:确认部署成功
-- Fe instance type: FE 的节点类型,可以采用默认值
-
-- Number of Doris Be:BE 节点的个数,可以选择 1 个或者 3 个
-
-- Be instance type:BE 的节点类型,可以采用默认值
-
-- Meta data dir:FE 节点的元数据目录,可以采用默认值
-
-- Sys log level:设置系统日志的等级,可以使用默认的 info
-
-- Volume type of Be nodes:BE 节点挂载 EBS 的 volume type,每台节点默认挂载一块磁盘。可以使用默认值
-
-- Volume size of Be nodes: BE 节点挂载 EBS 的大小,单位 GB,可以使用默认值。
-
-## 部署后,如何连接数据库
-
-**1. 部署成功后的展示如下**
+部署成功后,CloudFormation 会展示如下结果。

-**2. 依次如下面,找到 FE 的连接地址。这个例子中,从 FE Outputs 里,可以查看到地址为 172.16.0.97。**
+### 步骤 2:获取 FE 的连接地址
+
+按照下面的截图步骤,进入 Stack 的 **Outputs** 标签页,从 FE Outputs 中获取 FE 的连接地址。在以下示例中,FE 的地址为 `172.16.0.97`。

@@ -99,14 +112,14 @@ https://sdb-cloud-third-party.s3.amazonaws.com/doris-cf/cloudformation_doris.tem

-**3. 连接部署的 Doris Cluster,Doris 的 CloudFormation 部署后的一些默认值:**
-
-- FE 的 IP:按照上面步骤 2 获取 FE 的 IP 地址
-
-- FE 的 MySQL 协议端口:9030
-
-- FE 的 HTTP 协议端口:8030
+### 步骤 3:连接 Doris 集群
-- 默认的 root 密码:空
+通过 CloudFormation 部署完成后,Doris 集群的默认连接信息如下:
-- 默认的 admin 密码:空
+| 项目 | 默认值 |
+| --- | --- |
+| FE 的 IP | 通过步骤 2 获取的 FE IP 地址 |
+| FE 的 MySQL 协议端口 | 9030 |
+| FE 的 HTTP 协议端口 | 8030 |
+| 默认的 root 密码 | 空 |
+| 默认的 admin 密码 | 空 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/access-cluster.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/access-cluster.md
index d65b664180a..a5b3f8a8d7e 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/access-cluster.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/access-cluster.md
@@ -1,8 +1,9 @@
---
{
- "title": "访问 Doris 集群",
+ "title": "04 访问 Doris 集群",
"language": "zh-CN",
- "description": "Kubernetes 通过 Service 作为 vip 和负载均衡器的能力,Service 有三种对外暴漏模式 ClusterIP 、 NodePort 、 LoadBalancer。"
+ "description": "了解在 Kubernetes 上通过 ClusterIP、NodePort、LoadBalancer 三种模式访问 Doris 集群的方法,包括 MySQL 客户端连接和 StreamLoad 配置。",
+ "keywords": ["访问 Doris 集群", "MySQL 客户端", "ClusterIP", "NodePort", "LoadBalancer", "StreamLoad", "Service", "K8s"]
}
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation.md
index 9857c111068..f597ca2bc91 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation.md
@@ -2,7 +2,8 @@
{
"title": "集群运维",
"language": "zh-CN",
- "description": "在 K8s 环境中服务因为一些预期之外的事情会进入 CrashLoopBackOff 状态,通过 kubectl get pod --namespace ${namespace} 命令可以查看指定 namespace 下的 pod 状态和 podname。"
+ "description": "Doris 集群运维指南:服务扩缩容、滚动升级、CrashLoopBackOff 处理、Debug 模式启动、元数据恢复等 Kubernetes 环境集群管理操作。",
+ "keywords": ["Doris 集群运维", "扩缩容", "滚动升级", "CrashLoopBackOff", "Debug 模式", "元数据恢复", "K8s", "Kubernetes"]
}
---
@@ -435,4 +436,4 @@ admin set frontend config("disable_tablet_scheduler" = "false");
:::tip 提示
1. 添加注解后,不可以通过 delete pod 的模式重启,这样会导致注解丢失。等待 kubelet 自动重启拉起,或者进入容器手动 kill 进程。
2. 使用 `metadata_failure_recovery` 模式启动,FE 回放日志耗时会很长,在使用该模式启动之前请先修改 FE 服务的[启动超时时间](install-config-cluster.md#启动探测超时配置),然后删除所有的 FE Pod 在进行 `metadata_failure_recovery` 启动。
-:::
\ No newline at end of file
+:::
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-config-cluster.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-config-cluster.md
index 44f374bab9b..f794fef5279 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-config-cluster.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-config-cluster.md
@@ -1,8 +1,9 @@
---
{
- "title": "配置 Doris 集群",
+ "title": "02 配置 Doris 集群",
"language": "zh-CN",
- "description": "默认部署的 DorisCluster 资源中,FE 和 BE 的镜像可能并非最新版本,且默认副本数均为 3。默认情况下,FE 使用的计算资源配置为 6c 12Gi,BE 使用的资源是 8c 16Gi。以下介绍如何根据需求调整这些默认配置。"
+ "description": "DorisCluster 资源配置指南:镜像设置、副本数规划、计算资源分配、持久化存储配置、ConfigMap 定制、Service 访问模式及用户名密码管理。",
+ "keywords": ["DorisCluster", "资源配置", "副本数", "ConfigMap", "持久化存储", "NodePort", "LoadBalancer", "ClusterIP", "访问配置", "存算一体"]
}
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-cluster.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-cluster.md
index a96eb7692fc..65abeeb3936 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-cluster.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-cluster.md
@@ -1,8 +1,9 @@
---
{
- "title": "部署 Doris 集群",
+ "title": "03 部署 Doris 集群",
"language": "zh-CN",
- "description": "在 Kubernetes 上部署 Doris 集群时,请提前部署 Doris Operator。"
+ "description": "在 Kubernetes 上使用 Doris Operator 部署 Apache Doris 集群的完整指南,涵盖下载部署模板、配置集群、验证集群状态等步骤。",
+ "keywords": ["Doris 集群部署", "Kubernetes", "K8s", "DorisCluster", "存算一体", "快速部署"]
}
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md
index e0ba0ce58b0..b17f090a0ce 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md
@@ -1,8 +1,9 @@
---
{
- "title": "部署 Doris Operator",
+ "title": "01 部署 Doris Operator",
"language": "zh-CN",
- "description": "部署 Doris Operator 的过程分为安装 CRD、部署 Operator 服务以及检查部署状态三个步骤。"
+ "description": "在 Kubernetes 上安装 Apache Doris Operator 的完整指南,涵盖 CRD 安装、Operator 部署及状态验证流程。",
+ "keywords": ["Doris Operator", "Kubernetes", "K8s", "CRD", "Operator 部署", "存算一体"]
}
---
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/intro.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/intro.mdx
new file mode 100644
index 00000000000..967e95f19a7
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/intro.mdx
@@ -0,0 +1,33 @@
+---
+{
+ "title": "Kubernetes 部署",
+ "language": "zh-CN",
+ "description": "使用 Doris Operator 在 Kubernetes 上部署 Apache Doris。"
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Kubernetes 部署
+
+Apache Doris 在 Kubernetes 上由 Doris Operator 管理。请根据您要部署的架构选择对应指南。
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Doris Operator"
+ description="了解 Doris Operator 的能力, 以及在不同云厂商 Kubernetes 服务上的安装方式"
+ link="../doris-operator/intro"
+/>
+
+<GettingStartedCard
+ title="存算一体部署"
+ description="在 Kubernetes 上以存算一体模式部署 Doris 集群"
+ link="integrated-storage-compute/intro"
+/>
+
+<GettingStartedCard
+ title="存算分离部署"
+ description="在 Kubernetes 上以存算分离模式部署 Doris 集群"
+ link="separating-storage-compute/install-doris-cluster"
+/>
+</div>
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cg.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cg.md
index 9836baa3578..484a6771339 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cg.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cg.md
@@ -2,14 +2,25 @@
{
"title": "配置计算组",
"language": "zh-CN",
- "description": "存算分离集群中,计算组(Compute Group)负责数据导入并缓存对象存储中的数据以提高查询效率,计算组之间相互隔离。"
+ "description": "详细介绍计算组(Compute Group)的配置方法,包括副本配置、多计算组配置、资源配置、访问模式配置、启动参数配置和持久化存储配置。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "计算组", "Compute Group", "BE", "NodePort", "LoadBalancer", "持久化存储", "ConfigMap"]
}
---
-存算分离集群中,计算组(Compute Group)负责数据导入并缓存对象存储中的数据以提高查询效率,计算组之间相互隔离。
+计算组(Compute Group)是一组负责相同任务的 BE 集合。本文按使用场景介绍 `DorisDisaggregatedCluster` 资源中计算组的配置方法,主要包括:
+
+- **基础部署**:单计算组、多计算组的快速搭建
+- **资源管控**:CPU、内存等计算资源限制
+- **访问控制**:集群内、外通过不同方式访问 BE 服务
+- **启动定制**:通过 ConfigMap 自定义 BE 启动参数
+- **数据持久化**:缓存、日志、StreamLoad 暂存数据的持久化存储
+
+## 场景 1:快速搭建单个计算组
+
+### 最简配置
+
+一个最简单的计算组配置仅包含 3 个字段:
-## 最简计算组配置
-计算组为一组负责相同任务的 BE 集合。在配置 `DorisDisaggregatedCluster` 资源时,必须为每个计算组设置唯一标识符,唯一标识符也是计算组的名称,一旦设定便无法修改。一个最简单计算组配置包括 3 个组成部分,uniqueId,image,replicas,配置如下:
```yaml
spec:
computeGroups:
@@ -17,10 +28,19 @@ spec:
image: ${beImage}
replicas: 1
```
-`${beImage}` 为部署 BE 服务的镜像地址,请使用 [apache doris 官方镜像仓库](https://hub.docker.com/r/apache/doris)提供的镜像。`${uniqueId}` 为计算组的唯一标识也是计算组的名称,匹配规则为`[a-zA-Z][0-9a-zA-Z_]+`。replicas 为计算组内 BE 服务节点的数量。
-## 配置多计算组
-`DorisDisaggregatedCluster` 资源支持部署多套计算组,每套计算组之间相互独立。以下展示了部署名称为 `cg1` 和 `cg2` 两套计算组的配置示例:
+### 字段说明
+
+| 字段 | 说明 |
+|------|------|
+| `uniqueId` | 计算组的唯一标识,也是计算组的名称。一旦设定便无法修改,命名需匹配规则 `[a-zA-Z][0-9a-zA-Z_]+` |
+| `image` | 部署 BE 服务的镜像地址。请使用 [Apache Doris 官方镜像仓库](https://hub.docker.com/r/apache/doris) 提供的镜像 |
+| `replicas` | 计算组内 BE 服务节点的数量 |
+
+## 场景 2:部署多个计算组实现业务隔离
+
+`DorisDisaggregatedCluster` 资源支持部署多套计算组,每套计算组之间相互独立。以下示例展示了部署名称为 `cg1` 和 `cg2` 两套计算组的配置:
+
```yaml
spec:
computeGroups:
@@ -31,10 +51,26 @@ spec:
image: ${beImage}
replicas: 2
```
-其中,名称为 `cg1` 的计算组副本数为 3,名称为 `cg2` 的计算组副本数为 2。`${beImage}` 表示部署的 BE 服务镜像。尽管计算组之间相互独立,但建议同一存算分离集群中各计算组内 BE 服务所使用的镜像保持一致。
-## 计算资源配置
-存算分离[默认部署样例](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,没有对 BE 服务使用的计算资源做限制。`DorisDisaggregatedCluster` 使用 Kubernetes 的[resources.requests 和 resources.limits](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) 指定 CPU 和内存资源。例如,配置名称为 `cg1` 的计算组 BE 可使用 8c 8Gi 的资源,配置如下:
+各计算组的副本数说明如下:
+
+| 计算组名称 | 副本数 |
+|------|------|
+| `cg1` | 3 |
+| `cg2` | 2 |
+
+其中,`${beImage}` 表示部署的 BE 服务镜像。
+
+:::tip 提示
+尽管计算组之间相互独立,但建议同一存算分离集群中各计算组内 BE 服务所使用的镜像保持一致。
+:::
+
+## 场景 3:限制计算组的计算资源
+
+存算分离[默认部署样例](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,没有对 BE 服务使用的计算资源做限制。`DorisDisaggregatedCluster` 使用 Kubernetes 的 [resources.requests 和 resources.limits](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) 指定 CPU 和内存资源。
+
+例如,配置名称为 `cg1` 的计算组 BE 可使用 8c 8Gi 的资源:
+
```yaml
spec:
computeGroups:
@@ -46,39 +82,65 @@ spec:
cpu: 8
memory: 8Gi
```
-将上述配置更新到需要部署的[`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中。
-## 访问配置
-默认情况下,计算组不会直接对外提供服务。Doris Operator 在 `DorisDisaggregatedCluster` 资源中为计算组提供 Service 作为被访问的代理。Service 有三种对外暴漏模式 `ClusterIP`、`NodePort`、`LoadBalancer`。
-### ClusterIP
-在 Kubernetes 上默认使用 [ClusterIP 访问模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)。ClusterIP 访问模式在 Kubernetes 集群内提供了一个内部地址,该地址作为服务在 Kubernetes 内部的。
+将上述配置更新到需要部署的 [`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中即可生效。
+
+## 场景 4:配置计算组的访问方式
+
+默认情况下,计算组不会直接对外提供服务。Doris Operator 在 `DorisDisaggregatedCluster` 资源中为计算组提供 Service 作为被访问的代理。Service 支持三种对外暴露模式,请根据访问来源选择合适的方式:
+
+| 访问模式 | 适用场景 | 特点 |
+|------|------|------|
+| `ClusterIP` | Kubernetes 集群内部访问 | 默认模式,提供集群内部地址 |
+| `NodePort` | 自建 Kubernetes 环境的集群外访问 | 通过宿主机端口暴露服务 |
+| `LoadBalancer` | 云平台 Kubernetes 环境的集群外访问 | 由云服务商提供负载均衡器 |
+
+### 4.1 ClusterIP(集群内访问)
+
+[ClusterIP 访问模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)在 Kubernetes 集群内提供了一个内部地址,该地址作为服务在 Kubernetes 内部访问的入口。
#### 第 1 步:配置使用 ClusterIP 作为 Service 类型
+
Doris 默认在 Kubernetes 上启用 ClusterIP 访问模式,用户无需额外配置即可使用。
+
#### 第 2 步:获取 Service 访问地址
+
部署集群后,通过以下命令可以查看计算组服务对外暴露的 Service:
+
```shell
kubectl -n doris get svc
```
+
返回结果如下:
+
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-disaggregated-cluster-cg1 ClusterIP 10.152.183.154 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 2d
```
-在上述结果中,获取了 namespace 为 doris 下,`uniqueId` 为 `cg1` 的对外可使用的 Service 。
-### NodePort
-若需从 Kubernetes 集群外部访问 Doris,可以选择 [NodePort 的模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport)。NodePort 模式提供两种配置方式:静态宿主机端口映射和动态宿主机端口分配。
-- **动态宿主机端口分配**:如果未显示设置端口映射,Kubernetes 会在创建 pod 的时自动分配一个宿主机未被使用的端口(默认范围为 30000-32767)。
-- **静态宿主机端口分配**:如果显示指定了端口映射,当宿主机端口未被占用且无冲突的时,Kubernetes 会固定分配该端口。
- 静态分配需要规划端口映射,Doris 提供以下端口用于与外部交互:
+在上述结果中,获取了 namespace 为 `doris` 下,`uniqueId` 为 `cg1` 的对外可使用的 Service。
+
+### 4.2 NodePort(自建集群外访问)
-| 端口名称 | 默认端口 | 端口描述 |
-|------| ---- |--------------------------|
+若需从 Kubernetes 集群外部访问 Doris,可以选择 [NodePort 模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport)。NodePort 模式提供两种端口分配方式:
+
+| 分配方式 | 说明 |
+|------|------|
+| 动态宿主机端口分配 | 未显示设置端口映射时,Kubernetes 在创建 Pod 时会自动分配一个未被使用的宿主机端口(默认范围为 30000-32767) |
+| 静态宿主机端口分配 | 显示指定端口映射后,当宿主机端口未被占用且无冲突时,Kubernetes 会固定分配该端口 |
+
+静态分配需要规划端口映射,Doris 提供以下端口用于与外部交互:
+
+**表 1:BE 服务端口说明**
+
+| 端口名称 | 默认端口 | 端口描述 |
+|------|------|------|
| Web Server Port | 8040 | BE 上的 http server 端口,用于查看 BE 的信息 |
#### 静态分配配置
-名称为 `cg1` 的计算组静态配置 NodePort 访问模式如下:
+
+以下示例将名称为 `cg1` 的计算组中 BE 监听端口 8040 映射到宿主机的 31012 端口:
+
```yaml
spec:
computeGroups:
@@ -89,9 +151,11 @@ spec:
- nodePort: 31012
targetPort: 8040
```
-上述配置中,将计算组名称为 cg1 的 BE 监听端口 8040 映射到宿主机的 31012 端口。
-#### 动态配置
-名称为 `cg1` 的计算组动态配置 NodePort 访问模式如下:
+
+#### 动态分配配置
+
+名称为 `cg1` 的计算组使用动态 NodePort 访问模式的配置如下:
+
```yaml
spec:
computeGroups:
@@ -100,9 +164,10 @@ spec:
type: NodePort
```
-### LoadBalancer
-[LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 模式适用于云平台的 Kubernetes 环境,是由云服务商提供的负载均衡器。
-在 `computeGroup.service` 中设置类型为 LoadBalancer,如下所示:
+### 4.3 LoadBalancer(云环境集群外访问)
+
+[LoadBalancer 模式](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)适用于云平台的 Kubernetes 环境,是由云服务商提供的负载均衡器。在 `computeGroup.service` 中设置类型为 `LoadBalancer`,如下所示:
+
```yaml
spec:
computeGroups:
@@ -113,51 +178,87 @@ spec:
service.beta.kubernetes.io/load-balancer-type: "external"
```
-## 自定义启动配置
-1. 自定义包含启动信息的 ConfigMap
- 默认部署中,每个计算组的 BE 服务均使用镜像内的默认配置文件启动。Doris Operator 使用 Kubernetes 的 ConfigMap 来挂载自定义启动配置文件。以下展示了一个 BE 服务可使用的 ConfigMap 示例:
- ```yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: be-configmap
- labels:
- app.kubernetes.io/component: be
- data:
- be.conf: |
- # For jdk 17, this JAVA_OPTS will be used as default JVM options
- JAVA_OPTS_FOR_JDK_17="-Xmx1024m -DlogPath=$LOG_DIR/jni.log -Xlog:gc*:$LOG_DIR/be.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNA [...]
- file_cache_path = [{"path":"/opt/apache-doris/be/file_cache","total_size":107374182400,"query_limit":107374182400}]
- deploy_mode = cloud
- ```
- 存算分离集群 BE 服务的启动配置必须设置 `file_cache_path`,格式请参考[存算分离配置 `be.conf`](../../../compute-storage-decoupled/compilation-and-deployment.md#541-配置-beconf) 章节。
-2. 部署 ConfigMap
- 使用如下命令将自定义启动配置信息的 ConfigMap 部署到 Kubernetes 集群中:
- ```shell
- kubectl -n ${namespace} -f ${beConfigMapFileName}.yaml
- ```
- `${namespace}` 为 `DorisDisaggregatedCluster` 部署的命名空间,${beConfigMapFileName} 为包含自定义 ConfigMap 的文件名称。
-
-3. 更新 [`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)以 ConfigMap,配置如下:
- ```yaml
- spec:
- computeGroups:
- - uniqueId: cg1
- configMaps:
- - name: be-configmap
- mountPath: "/etc/doris"
- ```
-
-:::tip 提示
-启动配置必须挂载到 "/etc/doris" 目录下。
+## 场景 5:自定义 BE 启动配置
+
+默认部署中,每个计算组的 BE 服务均使用镜像内的默认配置文件启动。Doris Operator 使用 Kubernetes 的 ConfigMap 来挂载自定义启动配置文件。整体流程如下:
+
+| 阶段 | 说明 |
+|------|------|
+| 输入 | 自定义的 `be.conf` 配置文件 |
+| 操作 | 创建 ConfigMap 并挂载到 `/etc/doris` 目录 |
+| 输出 | 计算组 BE 服务使用自定义配置启动 |
+
+### 第 1 步:创建包含启动信息的 ConfigMap
+
+以下展示了一个 BE 服务可使用的 ConfigMap 示例:
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: be-configmap
+ labels:
+ app.kubernetes.io/component: be
+data:
+ be.conf: |
+ # For jdk 17, this JAVA_OPTS will be used as default JVM options
+ JAVA_OPTS_FOR_JDK_17="-Xmx1024m -DlogPath=$LOG_DIR/jni.log -Xlog:gc*:$LOG_DIR/be.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED [...]
+ file_cache_path = [{"path":"/opt/apache-doris/be/file_cache","total_size":107374182400,"query_limit":107374182400}]
+ deploy_mode = cloud
+```
+
+:::tip 提示
+存算分离集群 BE 服务的启动配置必须设置 `file_cache_path`,格式请参考[存算分离配置 `be.conf`](../../../compute-storage-decoupled/compilation-and-deployment.md#541-配置-beconf) 章节。
+:::
+
+### 第 2 步:部署 ConfigMap
+
+使用如下命令将自定义启动配置信息的 ConfigMap 部署到 Kubernetes 集群中:
+
+```shell
+kubectl -n ${namespace} -f ${beConfigMapFileName}.yaml
+```
+
+参数说明:
+
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | `DorisDisaggregatedCluster` 部署的命名空间 |
+| `${beConfigMapFileName}` | 包含自定义 ConfigMap 的文件名称 |
+
+### 第 3 步:更新 DorisDisaggregatedCluster 资源
+
+更新 [`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)以挂载 ConfigMap,配置如下:
+
+```yaml
+spec:
+ computeGroups:
+ - uniqueId: cg1
+ configMaps:
+ - name: be-configmap
+ mountPath: "/etc/doris"
+```
+
+:::tip 提示
+启动配置必须挂载到 `/etc/doris` 目录下。
:::
-## 持久化存储配置
-默认部署中,BE 服务使用 Kubernetes 的 [EmptyDir](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#emptydir) 作为服务的缓存。`EmptyDir` 模式是非持久化存储模式,服务重启后缓存的数据会丢失相应查询效率会降低。
-为了保证 BE 服务在重启后缓存数据不丢失、查询效率不降低,需要对缓存数据进行持久化存储。BE 服务的日志既会输出到标准输出,也会写入启动配置中 `LOG_DIR` 指定的目录。StreamLoad 模式导入会使用 `/opt/apache-doris/be/storage` 作为数据的暂存位置,避免服务异常重启后暂存的数据丢失,需要对对应写入位置挂载持久化存储。
+## 场景 6:为计算组配置持久化存储
+
+默认部署中,BE 服务使用 Kubernetes 的 [EmptyDir](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#emptydir) 作为服务的缓存。`EmptyDir` 模式是非持久化存储模式,服务重启后缓存的数据会丢失,相应查询效率会降低。
+
+为保证 BE 服务在重启后缓存数据不丢失、查询效率不降低,需要对缓存数据进行持久化存储。BE 服务涉及的关键存储路径如下:
+
+| 存储路径 | 用途 |
+|------|------|
+| BE 日志目录 | BE 服务的日志既会输出到标准输出,也会写入启动配置中 `LOG_DIR` 指定的目录 |
+| `/opt/apache-doris/be/storage` | StreamLoad 模式导入时数据的暂存位置,避免服务异常重启后暂存的数据丢失 |
+| BE 缓存目录 | 查询缓存,重启后数据丢失会降低查询效率 |
+
+### 6.1 持久化存储样例
-### 持久化存储样例
以下为需要持久化数据挂载持久化存储的配置样例:
+
```yaml
spec:
computeGroups:
@@ -189,14 +290,21 @@ spec:
requests:
storage: 500Gi
```
-上述配置中,日志目录使用自定义的存储配置挂载 300Gi 的存储磁盘,WAL 以及 StreamLoad 导入时使用的目录配置挂载 300Gi 的存储磁盘,而缓存目录则使用存储模板挂载 500Gi 的存储磁盘。
+
+上述配置说明:
+
+- 日志目录使用自定义的存储配置,挂载 300Gi 的存储磁盘
+- WAL 以及 StreamLoad 导入时使用的目录配置挂载 300Gi 的存储磁盘
+- 缓存目录使用存储模板,挂载 500Gi 的存储磁盘
:::tip 提示
若 `mountPaths` 数组为空,则表示当前存储配置为模板配置。
:::
-### 不持久化日志
-如果不希望将日志持久化,而仅输出到标准输出,则可配置如下:
+### 6.2 不持久化日志
+
+如果不希望将日志持久化,仅输出到标准输出,则可配置如下:
+
```yaml
spec:
computeGroups:
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cluster.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cluster.md
index ed6832871cc..3f429c04ad2 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cluster.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-cluster.md
@@ -1,202 +1,263 @@
---
{
- "title": "集群级配置",
+ "title": "配置认证",
"language": "zh-CN",
- "description": "存算分离集群存在集群级别的配置,比如管控账号的用户名密码用于管理集群中各个组件的节点等。"
+ "description": "详细介绍存算分离集群中集群级配置的两种模式(环境变量与 Secret),以及三种密码配置场景的完整操作步骤,包括 Kerberos 认证配置。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "用户名密码", "Secret", "Kerberos", "认证", "Node_priv"]
}
---
-存算分离集群存在集群级别的配置,比如管控账号的用户名密码用于管理集群中各个组件的节点等。
+## 学完本章节你将能够
-## 配置管理用户名和密码
+- 理解 Doris Operator 管理集群节点所需的认证机制
+- 使用环境变量或 Secret 两种方式配置管理凭证
+- 在集群部署前、部署时、部署后三个阶段正确配置用户名密码
+- 为存算分离集群配置 Kerberos 认证
-Doris 节点的管理需要通过用户名、密码以 MySQL 协议连接活着的 FE 节点进行操作。Doris 实现[类似 RBAC 的权限管理机制](../../../admin-manual/auth/authentication-and-authorization),节点的管理需要用户拥有 [Node_priv](../../../admin-manual/auth/authentication-and-authorization#权限类型) 权限。Doris Operator 默认使用拥有所有权限的 root 用户无密码模式对 DorisDisaggregatedCluster 资源配置的集群进行部署和管理。root 用户添加密码后,需要在 DorisDisaggregatedCluster 资源中显示配置拥有 Node_Priv 权限的用户名和密码,以便 Doris Operator 对集群进行自动化管理操作。
+## 配置原理与场景选择
-无论何种方式配置密码,请注意以下几点:
-- root、admin 等已经存在用户的密码,任何情况下 operator 都不会自动进行修改,需要用户自己去配置或者修改。
-- 极度不推荐使用 admin 用户来作为 operator 的管理用户,因为 admin 用户通常作为数据库读写最高权限用户,而非用作集群运维,在 operator 的某些功能上,admin 用户缺少特定权限。
-- 非 root 用户,建议专号专用,不要用作其他用途。避免密码修改后无法同步到 operator 上 或者 权限丢失,导致运维失效。
+### 为什么需要配置管理凭证
-DorisDisaggregatedCluster 资源提供两种方式来配置管理集群节点所需的用户名、密码,包括:环境变量配置的方式,以及使用 [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) 配置的方式。配置集群管理的用户名和密码分为 3 种情况:
+Doris 节点的管理需要通过用户名、密码以 MySQL 协议连接活着的 FE 节点进行操作。Doris 实现[类似 RBAC 的权限管理机制](../../../admin-manual/auth/authentication-and-authorization),节点的管理需要用户拥有 [Node_priv](../../../admin-manual/auth/authentication-and-authorization#权限类型) 权限。
-- 集群部署需初始化 root 用户密码;
+Doris Operator 默认使用拥有所有权限的 root 用户无密码模式对 DorisDisaggregatedCluster 资源配置的集群进行部署和管理。当 root 用户添加密码后,需要在 DorisDisaggregatedCluster 资源中显式配置拥有 Node_Priv 权限的用户名和密码,以便 Doris Operator 对集群进行自动化管理操作。
-- root 无密码部署下,自动化设置拥有管理权限的非 root 用户;
+### 三种密码配置场景对比
-- 集群 root 无密码模式部署后,设置 root 用户密码。
+根据集群所处阶段和管理需求的不同,存在三种配置场景,可参考下表选择:
-### 集群部署配置 root 用户密码
+| 场景 | 适用时机 | 操作复杂度 | 是否需要代码加密 |
+|------|---------|-----------|-----------------|
+| 场景一:部署时初始化 root 密码 | 首次部署集群 | 中 | 需要(SHA-1 两阶段加密) |
+| 场景二:部署时自动创建非 root 管理用户(推荐) | 首次部署集群 | 低 | 不需要 |
+| 场景三:部署后设置 root 密码 | 集群已运行 | 高 | 不需要 |
-Doris 支持将 root 的用户以密文的形式配置在 `fe.conf` 中,在 Doris 首次部署时配置 root 用户的密码,以便让 Doris Operator 能够自动管理集群节点,请按照如下步骤操作:
+### 通用配置原则
-#### 第 1 步:构建 root 加密密码
+无论选择何种场景配置密码,请注意以下几点:
-Doris 支持密文的方式在 [FE 的配置文件](../../../admin-manual/config/fe-config#initial_root_password)中设置 root 用户的密码,密码的加密方式是采用两阶段 SHA-1 加密实现。代码实现示例如下:
+- **已存在用户的密码不会被自动修改**:root、admin 等已经存在用户的密码,任何情况下 Operator 都不会自动进行修改,需要用户自己去配置或者修改。
+- **不推荐使用 admin 用户作为管理用户**:admin 用户通常作为数据库读写最高权限用户,而非用作集群运维。在 Operator 的某些功能上,admin 用户缺少特定权限。
+- **非 root 管理用户应专号专用**:建议非 root 用户专号专用,不要用作其他用途,避免密码修改后无法同步到 Operator 上或者权限丢失,导致运维失效。
-Java 代码实现:
+### 两种凭证下发方式
+
+DorisDisaggregatedCluster 资源支持以下两种凭证配置方式,可在每个场景中任选其一:
+
+| 配置方式 | 使用字段 | 实现机制 |
+|---------|---------|---------|
+| 环境变量 | `.spec.adminUser` | Operator 将用户名密码自动转为容器环境变量,由容器辅助服务读取 |
+| [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) | `.spec.authSecret` | Operator 将 Basic Authentication Secret 以文件形式挂载到容器指定位置,由容器辅助服务解析 |
+
+## 场景一:部署时初始化 root 用户密码
+
+首次部署集群时,希望使用 root 作为管理用户并预先设置初始化密码。Doris 支持将 root 的用户以密文的形式配置在 `fe.conf` 中,在 Doris 首次部署时配置 root 用户的密码,以便让 Doris Operator 能够自动管理集群节点。
+
+配置流程概览:
+
+1. 生成 root 加密密码
+2. 在 `fe.conf` 中配置加密密码
+3. 在 DorisDisaggregatedCluster 中配置管理凭证(环境变量或 Secret 二选一)
+
+### 第 1 步:生成 root 加密密码
+
+Doris 支持密文的方式在 [FE 的配置文件](../../../admin-manual/config/fe-config#initial_root_password) 中设置 root 用户的密码,密码的加密方式是采用两阶段 SHA-1 加密实现。代码实现示例如下。
+
+**Java 代码实现:**
```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);
- }
+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 代码实现:
+**Golang 代码实现:**
```go
import (
-"crypto/sha1"
-"encoding/hex"
-"fmt"
-"strings"
+ "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)
+ // 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 启动参数配置章节](config-fe.md#自定义启动配置)的说明,将配置文件以 `ConfigMap` 的形式下发到 Kubernetes 集群。
+### 第 2 步:在 fe.conf 中配置加密密码
-#### 第 2 步:构建 DorisDisaggregatedCluster 资源
+将上一步加密后的密码按照配置文件要求配置到 `fe.conf` 中,根据 [FE 启动参数配置章节](config-fe#自定义启动配置)的说明,将配置文件以 `ConfigMap` 的形式下发到 Kubernetes 集群。
+
+### 第 3 步:在 DorisDisaggregatedCluster 中配置管理凭证
配置文件设置了 root 初始化密码后,当 Doris FE 第一个节点启动后 root 的密码会立即生效,后续节点加入集群时,Doris Operator 将使用 root 用户名和密码来添加节点。因此,需要在部署的 DorisDisaggregatedCluster 资源中指定用户名和密码,以便 Doris Operator 管理集群节点。
-- 环境变量方式
+请从以下两种方式中任选其一进行配置。
+
+#### 方式 A:环境变量配置
- 将 root 用户名和密码配置到 DorisDisaggregatedCluster 资源中的 ".spec.adminUser.name" 和 ".spec.adminUser.password" 字段,Doris Operator 会自动将这些配置转为容器的环境变量,容器内的辅助服务会使用环境变量来添加节点到集群。配置格式如下:
+将 root 用户名和密码配置到 DorisDisaggregatedCluster 资源中的 `.spec.adminUser.name` 和 `.spec.adminUser.password` 字段,Doris Operator 会自动将这些配置转为容器的环境变量,容器内的辅助服务会使用环境变量来添加节点到集群。配置格式如下:
- ```yaml
- spec:
+```yaml
+spec:
adminUser:
- name: root
- password: ${password}
- ```
+ name: root
+ password: ${password}
+```
- 其中,`${password}` 为 root 的非加密密码。
+其中,`${password}` 为 root 的非加密密码。
-- Secret 方式
+#### 方式 B:Secret 配置
- Doris Operator 提供使用 [Basic authentication Secret](https://kubernetes.io/docs/concepts/configuration/secret/#basic-authentication-secret) 来指定管理节点的用户名和密码,Doris Operator 会自动将 Secret 以文件形式挂载到容器指定位置,容器的辅助服务会解析出文件中的用户名和密码,用于自动将节点加入集群。basic-authentication-secret 的 stringData 只包含 2 个字段:username 和 password。使用 Secret 配置管理用户名和密码流程如下:
+Doris Operator 提供使用 [Basic Authentication Secret](https://kubernetes.io/docs/concepts/configuration/secret/#basic-authentication-secret) 来指定管理节点的用户名和密码。Doris Operator 会自动将 Secret 以文件形式挂载到容器指定位置,容器的辅助服务会解析出文件中的用户名和密码,用于自动将节点加入集群。Basic Authentication Secret 的 stringData 只包含 2 个字段:username 和 password。
- a. 配置需要使用的 Secret
+**步骤 1:创建并部署 Secret**
- 按照如下格式配置需要使用的 Basic Authentication Secret:
+按照如下格式配置需要使用的 Basic Authentication Secret:
- ```yaml
- stringData:
+```yaml
+stringData:
username: root
password: ${password}
- ```
+```
- 其中,`${password}` 为 root 设置的非加密密码。
- 通过如下命令将更新后的 Secret 部署到 Kubernetes 集群中。
- ```shell
- kubectl -n ${namespace} apply -f ${secretFileName}.yaml
- ```
- 其中,`${namespace}` 为 DorisDisaggregatedCluster 资源需要部署的命名空间,${secretFileName} 为需要部署的 Secret 的文件名称。
+其中,`${password}` 为 root 设置的非加密密码。
- b. 配置 DorisDisaggregatedCluster 资源
+通过如下命令将 Secret 部署到 Kubernetes 集群中:
- 在需要部署的 DorisDisaggregatedCluster 资源中,指定使用的 Secret。配置如下:
+```shell
+kubectl -n ${namespace} apply -f ${secretFileName}.yaml
+```
- ```yaml
- spec:
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | DorisDisaggregatedCluster 资源需要部署的命名空间 |
+| `${secretFileName}` | 需要部署的 Secret 的文件名称 |
+
+**步骤 2:在 DorisDisaggregatedCluster 中引用 Secret**
+
+在需要部署的 DorisDisaggregatedCluster 资源中,指定使用的 Secret。配置如下:
+
+```yaml
+spec:
authSecret: ${secretName}
- ```
+```
- 其中,`${secretName}` 为包含 root 用户名和密码的 Secret 名称。
+其中,`${secretName}` 为包含 root 用户名和密码的 Secret 名称。
-### 部署时自动创建非 root 管理用户和密码(推荐)
+## 场景二:部署时自动创建非 root 管理用户(推荐)
-在首次部署时,如果不设置 root 的初始化密码,通过环境变量或者 Secret 的方式配置非 root 用户和登录密码。Doris 容器的辅助服务会自动在 Doris 中创建该用户,设置密码和赋予 Node_priv 权限,Doris Operator 将使用自动创建的用户名和密码管理集群节点。
+首次部署集群时,希望由 Operator 自动创建一个专用的非 root 管理用户。在首次部署时,如果不设置 root 的初始化密码,可以通过环境变量或者 Secret 的方式配置非 root 用户和登录密码。Doris 容器的辅助服务会自动在 Doris 中创建该用户,设置密码并赋予 Node_priv 权限,Doris Operator 将使用自动创建的用户名和密码管理集群节点。
-- 环境变量模式
+请从以下两种方式中任选其一进行配置。
- 按照如下格式配置需要部署的 DorisDisaggregatedCluster 资源:
- ```yaml
- spec:
+### 方式 A:环境变量配置
+
+按照如下格式配置需要部署的 DorisDisaggregatedCluster 资源:
+
+```yaml
+spec:
adminUser:
- name: ${DB_ADMIN_USER}
- password: ${DB_ADMIN_PASSWD}
- ```
+ name: ${DB_ADMIN_USER}
+ password: ${DB_ADMIN_PASSWD}
+```
- 其中,`${DB_ADMIN_USER}` 为需要新建拥有管理权限的用户名,`${DB_ADMIN_PASSWD}` 为新建用户的密码。
+| 参数 | 说明 |
+|------|------|
+| `${DB_ADMIN_USER}` | 需要新建拥有管理权限的用户名 |
+| `${DB_ADMIN_PASSWD}` | 新建用户的密码 |
-- Secret 方式
+### 方式 B:Secret 配置
- a. 配置需要使用的 Secret
+**步骤 1:创建并部署 Secret**
- 按照如下格式配置需要使用的 Basic authentication Secret:
+按照如下格式配置需要使用的 Basic Authentication Secret:
- ```yaml
- stringData:
+```yaml
+stringData:
username: ${DB_ADMIN_USER}
password: ${DB_ADMIN_PASSWD}
- ```
+```
- 其中,`${DB_ADMIN_USER}` 为新创建的用户名,`${DB_ADMIN_PASSWD}` 为新建用户名设置的密码。
+| 参数 | 说明 |
+|------|------|
+| `${DB_ADMIN_USER}` | 新创建的用户名 |
+| `${DB_ADMIN_PASSWD}` | 新建用户名设置的密码 |
- 使用以下命令将 Secret 部署到 Kubernetes 集群中:
+使用以下命令将 Secret 部署到 Kubernetes 集群中:
- ```
- kubectl -n ${namespace} apply -f ${secretFileName}.yaml
- ```
+```shell
+kubectl -n ${namespace} apply -f ${secretFileName}.yaml
+```
- 其中,`${namespace}` 为 DorisDisaggregatedCluster 资源部署的命名空间,`${secretFileName}` 为需要部署的 Secret 的文件名称。
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | DorisDisaggregatedCluster 资源部署的命名空间 |
+| `${secretFileName}` | 需要部署的 Secret 的文件名称 |
- b. 更新 DorisDisaggregatedCluster 资源
+**步骤 2:在 DorisDisaggregatedCluster 中引用 Secret**
- 在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:
+在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:
- ```yaml
- spec:
+```yaml
+spec:
authSecret: ${secretName}
- ```
+```
- 其中,`${secretName}` 为部署的 Basic Authentication Secret 的名称。
+其中,`${secretName}` 为部署的 Basic Authentication Secret 的名称。
:::tip 提示
-- 部署后请设置 root 的密码,Doris Operator 会切换为使用新用户和密码管理集群节点,请避免删除新建的用户。
- :::
+部署后请设置 root 的密码,Doris Operator 会切换为使用新用户和密码管理集群节点,请避免删除新建的用户。
+:::
+
+## 场景三:集群部署后设置 root 用户密码
-### 集群部署后设置 root 用户密码
+Doris 集群在部署后若未设置 root 用户的密码,需要配置一个具有 [Node_priv](../../../admin-manual/auth/authentication-and-authorization#权限类型) 权限的用户,便于 Doris Operator 自动化的管理集群节点。建议不要使用 root 用户,请参考[用户新建和权限赋值章节](../../../sql-manual/sql-statements/account-management/CREATE-USER)来创建新用户并赋予 Node_priv 权限。创建用户后,再通过环境变量或者 Secret 配置新的管理用户和密码,并在 DorisDisaggregatedCluster 资源中配置。
-Doris 集群在部署后,若未设置 root 用户的密码。需要配置一个具有 [Node_priv](../../../admin-manual/auth/authentication-and-authorization.md#权限类型) 权限的用户,便于 Doris Operator 自动化的管理集群节点。建议不要使用 root 用户,请参考[用户新建和权限赋值章节](../../../sql-manual/sql-statements/account-management/CREATE-USER)来创建新用户并赋予 Node_priv 权限。创建用户后,通过环境变量或者 Secret 配置新的管理用户和密码,并在 DorisDisaggregatedCluster 资源中配置。
+配置流程概览:
-#### 第 1 步:新建拥有 Node_priv 权限用户
+1. 通过 MySQL 协议新建拥有 Node_priv 权限的用户
+2. 为新用户赋予 Node_priv 权限
+3. 在 DorisDisaggregatedCluster 中配置管理凭证(环境变量或 Secret 二选一)
-通过 MySQL 协议连接数据库后,通过如下命令创建一个仅拥有 Node_priv 权限的用户并设置密码。
+### 第 1 步:新建拥有 Node_priv 权限用户
+
+通过 MySQL 协议连接数据库后,通过如下命令创建一个用户并设置密码:
```shell
CREATE USER '${DB_ADMIN_USER}' IDENTIFIED BY '${DB_ADMIN_PASSWD}';
```
-其中 `${DB_ADMIN_USER}` 为要创建的用户名,`${DB_ADMIN_PASSWD}` 为要设置的密码。
+| 参数 | 说明 |
+|------|------|
+| `${DB_ADMIN_USER}` | 要创建的用户名 |
+| `${DB_ADMIN_PASSWD}` | 要设置的密码 |
-#### 第 2 步:为新用户赋予 Node_priv 权限
+### 第 2 步:为新用户赋予 Node_priv 权限
-使用 MySQL 协议连接数据库后,执行如下命令将 Node_priv 权限赋予新用户。
+使用 MySQL 协议连接数据库后,执行如下命令将 Node_priv 权限赋予新用户:
```shell
GRANT NODE_PRIV ON *.*.* TO ${DB_ADMIN_USER};
@@ -204,80 +265,134 @@ GRANT NODE_PRIV ON *.*.* TO ${DB_ADMIN_USER};
其中,`${DB_ADMIN_USER}` 为新创建的用户名。
-新建用户名密码,以及赋予权限详细使用,请参考官方文档 [CREATE-USER](../../../sql-manual/sql-statements/account-management/CREATE-USER) 部分。
+新建用户名密码以及赋予权限的详细使用,请参考官方文档 [CREATE-USER](../../../sql-manual/sql-statements/account-management/CREATE-USER) 部分。
+
+### 第 3 步:在 DorisDisaggregatedCluster 中配置管理凭证
+
+请从以下两种方式中任选其一进行配置。
-#### 第 3 步:配置 DorisDisaggregatedCluster 资源
+#### 方式 A:环境变量配置
-- 环境变量方式
+在 DorisDisaggregatedCluster 资源中配置新建用户及其密码,格式如下:
- 在 DorisDisaggregatedCluster 资源中配置新建用户及其密码,格式如下:
- ```yaml
- spec:
+```yaml
+spec:
adminUser:
- name: ${DB_ADMIN_USER}
- password: ${DB_ADMIN_PASSWD}
- ```
+ name: ${DB_ADMIN_USER}
+ password: ${DB_ADMIN_PASSWD}
+```
- 其中,`${DB_ADMIN_USER}` 为新建的用户名,`${DB_ADMIN_PASSWD}` 为新建用户设置的密码。
+| 参数 | 说明 |
+|------|------|
+| `${DB_ADMIN_USER}` | 新建的用户名 |
+| `${DB_ADMIN_PASSWD}` | 新建用户设置的密码 |
-- Secret 方式
+#### 方式 B:Secret 配置
- a. 配置 Secret
+**步骤 1:创建并部署 Secret**
- 按照如下格式创建 Basic Authentication Secret:
+按照如下格式创建 Basic Authentication Secret:
- ```yaml
- stringData:
+```yaml
+stringData:
username: ${DB_ADMIN_USER}
password: ${DB_ADMIN_PASSWD}
- ```
+```
- 其中 `${DB_ADMIN_USER}` 为新创建的用户名,`${DB_ADMIN_PASSWD}` 为新建用户名设置的密码。
+| 参数 | 说明 |
+|------|------|
+| `${DB_ADMIN_USER}` | 新创建的用户名 |
+| `${DB_ADMIN_PASSWD}` | 新建用户名设置的密码 |
- 使用以下命令将 Secret 部署到 Kubernetes 集群:
+使用以下命令将 Secret 部署到 Kubernetes 集群:
- ```shell
- kubectl -n ${namespace} apply -f ${secretFileName}.yaml
- ```
+```shell
+kubectl -n ${namespace} apply -f ${secretFileName}.yaml
+```
- 其中,`${namespace}` 为 DorisDisaggregatedCluster 资源部署的命名空间,`${secretFileName}` 为需要部署的 Secret 的文件名称。
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | DorisDisaggregatedCluster 资源部署的命名空间 |
+| `${secretFileName}` | 需要部署的 Secret 的文件名称 |
- b. 更新需要使用 Secret 的 DorisDisaggregatedCluster 资源
+**步骤 2:在 DorisDisaggregatedCluster 中引用 Secret**
- 在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:
+在 DorisDisaggregatedCluster 资源中指定使用的 Secret,如下所示:
- ```yaml
- spec:
+```yaml
+spec:
authSecret: ${secretName}
- ```
+```
+
+其中,`${secretName}` 为部署的 Basic Authentication Secret 的名称。
+
+:::tip 提示
+部署后设置 root 密码,并配置新的拥有管理节点的用户名和密码后,会引起存量服务滚动重启一次。
+:::
+
+## 挂载 Kerberos 认证文件
+
+本节介绍如何在 Kubernetes 环境中为 Doris 存算分离集群挂载 Kerberos 认证文件。配置完成后,将 Kerberos 认证所需的 `krb5.conf` 配置文件和 `keytab` 密钥文件挂载到 Doris 容器中,供 [Hive Catalog](../../../lakehouse/catalogs/hive-catalog) 等功能使用,使 Doris 能够连接开启了 Kerberos 认证的 Hive 或其他外部数据源。
+
+:::caution 注意
+这里并不是通过 Kerberos 访问 Doris 集群,而是挂载后,Doris 能使用这些 Kerberos 文件访问其他外部数据源(如 HDFS)。
+:::
+
+### 前置条件
+
+- Doris Operator 25.5.1 及以上版本
+- Doris 存算分离集群 2.1.10 或 3.0.6 及以上版本
+
+### 所需文件
+
+| 文件 | 说明 |
+|------|------|
+| [krb5.conf](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html) | Kerberos 配置文件 |
+| [keytab 文件](https://web.mit.edu/Kerberos/krb5-1.16/doc/basic/keytab_def.html) | 包含 Kerberos 主体和加密密钥的文件 |
- 其中,`${secretName}` 为部署的 Basic authentication Secret 的名称。
+### 第 1 步:创建 ConfigMap 存储 krb5.conf
+
+```shell
+kubectl create -n ${namespace} configmap ${name} --from-file=krb5.conf
+```
+
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | `DorisDisaggregatedCluster` 部署的命名空间 |
+| `${name}` | ConfigMap 名称 |
+
+### 第 2 步:创建 Secret 存储 keytab 文件
+
+```shell
+kubectl create -n ${namespace} secret generic ${name} --from-file=${xxx.keytab}
+```
+
+| 参数 | 说明 |
+|------|------|
+| `${namespace}` | `DorisDisaggregatedCluster` 部署的命名空间 |
+| `${name}` | Secret 名称 |
+| `${xxx.keytab}` | keytab 文件名 |
:::tip 提示
-- 部署后设置 root 密码,并配置新的拥有管理节点的用户名和密码后,会引起存量服务滚动重启一次。
- :::
-
-
-## 使用 Kerberos 认证
-Doris Operator 从 25.5.1 版本开始支持 Doris 存算分离集群(2.1.10 和 3.0.6 及以后版本) 在 Kubernetes 使用 Kerberos 认证。 Doris 使用 Kerberos 认证需要使用 [krb5.conf](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html) 和 [keytab 文件](https://web.mit.edu/Kerberos/krb5-1.16/doc/basic/keytab_def.html) 。
-Doris Operator 使用 `ConfigMap` 资源挂载 krb5.conf 文件,使用 `Secret` 资源挂载 keytab 文件。使用 Kerberos 认证流程如下:
-1. 构建包含 krb5.conf 文件的 ConfigMap:
- ```shell
- kubectl create -n ${namespace} create configmap ${name} --from-file=krb5.conf
- ```
- `${namespace}` 为 `DorisDisaggregatedCluster` 部署的命名空间,`${name}` 为 ConfigMap 想要指定的名字。
-2. 构建包含 keytab 的 Secret:
- ```shell
- kubectl create -n ${namespace} secret generic ${name} --from-file= ${xxx.keytab}
- ```
- `${namespace}` 为 `DorisDisaggregatedCluster` 部署的命名空间,`${name}` 为 Secret 想要指定的名字,如果需要挂载多个 `keytab` 文件,请参考 [kubectl 创建 Secret 文档](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_secret/)将多个 `keytab` 文件放到一个 Secret 中。
-3. 配置 DorisDisaggregatedCluster 资源,指定包含 `krb5.conf` 的 ConfigMap, 以及包含 `keytab` 文件的 Secret。
- ```yaml
- spec:
- kerberosInfo:
+如果需要挂载多个 `keytab` 文件,请参考 [kubectl 创建 Secret 文档](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_secret/) 将多个 `keytab` 文件放到一个 Secret 中。
+:::
+
+### 第 3 步:在 DorisDisaggregatedCluster 中配置 Kerberos 信息
+
+```yaml
+spec:
+ kerberosInfo:
krb5ConfigMap: ${krb5ConfigMapName}
keytabSecretName: ${keytabSecretName}
keytabPath: ${keytabPath}
- ```
- `${krb5ConfigMapName}` 为包含要使用的 `krb5.conf` 文件的 ConfigMap 名称。`${keytabSecretName}` 为包含 keytab 文件的 Secret 名称。`${keytabPath}` 为 Secret 希望挂载到容器中的路径,这个路径是创建 catalog 时,通过 `hadoop.kerberos.keytab` 指定 keytab 的文件所在目录。创建
- catalog 请参考配置 [Hive Catalog](../../../lakehouse/catalogs/hive-catalog#配置-catalog) 文档。
+```
+
+| 参数 | 说明 |
+|------|------|
+| `${krb5ConfigMapName}` | 包含 `krb5.conf` 文件的 ConfigMap 名称 |
+| `${keytabSecretName}` | 包含 keytab 文件的 Secret 名称 |
+| `${keytabPath}` | keytab 文件挂载到容器中的路径 |
+
+### 第 4 步:在 Hive Catalog 中使用 Kerberos 认证
+
+Kerberos 配置完成后,你可以在创建 Hive Catalog 时启用 Kerberos 认证。具体配置请参考 [Hive Catalog 配置文档](../../../lakehouse/catalogs/hive-catalog#配置-catalog)。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-fe.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-fe.md
index f9ba989b6b8..db9549c1047 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-fe.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-fe.md
@@ -1,53 +1,94 @@
---
{
- "title": "配置部署 FE",
+ "title": "配置 FE",
"language": "zh-CN",
- "description": "FE 在存算分离模式下主要负责查询解析和规划等相关工作。"
+ "description": "详细介绍存算分离集群中 FE(FrontEnd)的配置方法,包括计算资源、Follower 数量、启动参数、访问模式(ClusterIP/NodePort/LoadBalancer)和持久化存储配置。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "FE", "FrontEnd", "Follower", "NodePort", "LoadBalancer", "持久化存储"]
}
---
-FE 在存算分离模式下主要负责查询解析和规划等相关工作。
+## 学完本章节你将能够
+
+- 配置 FE 组件的计算资源(CPU 和内存)
+- 配置 FE Follower 数量和角色
+- 通过 ConfigMap 自定义 FE 启动参数
+- 根据访问场景选择 FE 服务的访问模式(ClusterIP/NodePort/LoadBalancer)
+- 为 FE 配置持久化存储以避免元数据丢失
+
+## 配置概览
+
+FE(Frontend)在存算分离模式下主要负责查询解析和规划等相关工作。本章节按以下顺序介绍 FE 的配置方法:
+
+| 配置项 | 解决的问题 |
+| --- | --- |
+| 计算资源配置 | 为 FE 显式分配 CPU 和内存 |
+| Follower 节点数量配置 | 在分布式部署中规划元数据管理节点 |
+| 自定义启动配置 | 通过 ConfigMap 覆盖默认启动参数 |
+| 访问模式配置 | 根据访问场景(集群内/集群外/云平台)暴露 FE 服务 |
+| 持久化存储配置 | 防止 FE 重启后元数据丢失 |
## 配置计算资源
-Doris-Operator 仓库提供的[部署样例](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,FE 默认不限制资源使用。通过 Kubernetes 的 [requests 和 Limits](https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/) 配置服务的计算资源。例如,为 FE 分配 8c 8Gi 计算资源配置如下:
+
+Doris-Operator 仓库提供的[部署样例](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,FE 默认不限制资源使用。生产环境建议通过 Kubernetes 的 [requests 和 limits](https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/) 显式配置 FE 的计算资源。
+
+为 FE 分配 8c8Gi 计算资源的配置示例如下:
+
```yaml
spec:
- feSpec:
- requests:
- cpu: 8
- memory: 8Gi
- limits:
- cpu: 8
- memory: 8Gi
+ feSpec:
+ requests:
+ cpu: 8
+ memory: 8Gi
+ limits:
+ cpu: 8
+ memory: 8Gi
```
-将上述配置信息更新到[需要部署的 `DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中。
-## 配置 Follower 数量
-FE 服务有 Follower 和 Observer 两种角色,Follower 负责 sql 解析任务和元数据的管理和存储。Observer 主要负责 sql 解析任务,分担 Follower 的查询和写入负载任务。Doris 使用 bdbje 存储系统管理元数据,bdbje 底层实现类似 paxos 协议算法。
-分布式部署中,需要配置多个 Follower 节点参与分布式环境下元数据管理工作。
-使用 `DorisDisaggregatedCluster` 资源部署 Doris 存算分离集群,Follower 默认的数量为 1。可通过如下配置设置 Follower 节点的数量。设置 Follower 节点数量为 3 的配置示例如下:
+将上述配置信息更新到[需要部署的 `DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#配置-dorisdisaggregatedcluster-资源)中。
+
+## 配置 Follower 节点数量
+
+FE 服务包含两种角色,分工如下:
+
+| 角色 | 职责 |
+| --- | --- |
+| Follower | 负责 SQL 解析任务以及元数据的管理和存储 |
+| Observer | 负责 SQL 解析任务,分担 Follower 的查询和写入负载 |
+
+Doris 使用 bdbje 存储系统管理元数据,bdbje 底层实现类似 Paxos 协议算法。在分布式部署中,需要配置多个 Follower 节点共同参与元数据管理工作。
+
+使用 `DorisDisaggregatedCluster` 资源部署 Doris 存算分离集群时,Follower 默认数量为 1。可通过 `electionNumber` 字段调整 Follower 节点数量。设置 Follower 数量为 3 的配置示例如下:
+
```yaml
spec:
- feSpec:
- electionNumber: 3
+ feSpec:
+ electionNumber: 3
```
+
:::tip 提示
-存算分离集群部署后,`electionNumber` 不允许修改。
+
+存算分离集群部署后,`electionNumber` 不允许修改,请在部署前规划好 Follower 数量。
+
:::
## 自定义启动配置
-Doris Operator 通过 Kubernetes 的 ConfigMap 挂载 FE 启动配置。配置步骤如下:
-1. 自定义一个包含 FE 启动配置的 ConfigMap,样例如下:
- ```yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: fe-configmap
- namespace: default
- labels:
+
+Doris Operator 通过 Kubernetes 的 ConfigMap 挂载 FE 启动配置。配置流程如下:
+
+### 第 1 步:编写 FE 启动配置 ConfigMap
+
+定义一个包含 FE 启动配置的 ConfigMap,样例如下:
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: fe-configmap
+ namespace: default
+ labels:
app.kubernetes.io/component: fe
- data:
- fe.conf: |
+data:
+ fe.conf: |
CUR_DATE=`date +%Y%m%d-%H%M%S`
# Log dir
LOG_DIR = ${DORIS_HOME}/log
@@ -65,99 +106,152 @@ Doris Operator 通过 Kubernetes 的 ConfigMap 挂载 FE 启动配置。配置
edit_log_port = 9010
enable_fqdn_mode=true
deploy_mode = cloud
- ```
+```
-2. 通过如下命令部署 `ConfigMap` 到 `DorisDisaggregatedCluster` 所在的命名空间:
- ```shell
- kubectl apply -n ${namespace} -f ${feConfigMapName}.yaml
- ```
- 其中,`${namespace}` 为 `DorisDisaggregatedCluster` 所在的命名空间,${feConfigMapName} 为包含上述配置的文件名称。
+### 第 2 步:将 ConfigMap 部署到目标命名空间
-3. 更新 [`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)使用ConfigMap。
- 在 `DorisDisaggregatedCluster` 资源中,通过 `feSpec.configMaps` 数组挂载 ConfigMap, 示例如下:
- ```yaml
- spec:
- feSpec:
+通过以下命令将 ConfigMap 部署到 `DorisDisaggregatedCluster` 所在的命名空间:
+
+```shell
+kubectl apply -n ${namespace} -f ${feConfigMapName}.yaml
+```
+
+参数说明:
+
+- `${namespace}`:`DorisDisaggregatedCluster` 所在的命名空间
+- `${feConfigMapName}`:包含上述配置的文件名称
+
+### 第 3 步:在 DorisDisaggregatedCluster 中引用 ConfigMap
+
+更新[`DorisDisaggregatedCluster` 资源](./install-doris-cluster.md#配置-dorisdisaggregatedcluster-资源),通过 `feSpec.configMaps` 数组挂载 ConfigMap,示例如下:
+
+```yaml
+spec:
+ feSpec:
replicas: 2
configMaps:
- - name: fe-configmap
- ```
+ - name: fe-configmap
+```
:::tip 提示
-1. Kubernetes 部署中,启动配置中无需要添加 `meta_service_endpoint` 以及 `cluster_id` 配置,Doris-Operator 会自动添加相关信息。
-2. Kubernetes 部署中,自定义启动配置时,必须设定 `enable_fqdn_mode=true`。
- :::
+
+在 Kubernetes 部署中,自定义启动配置时请注意以下两点:
+
+1. **无需添加** `meta_service_endpoint` 以及 `cluster_id` 配置,Doris-Operator 会自动注入相关信息。
+2. **必须设置** `enable_fqdn_mode=true`。
+
+:::
## 访问配置
-Doris-Operator 使用 Kubernetes 的 Service 提供 VIP 和负载均衡器的能力,支持以下三种对外暴漏模式: `ClusterIP` 、 `NodePort` 、 `LoadBalancer` .
+
+Doris-Operator 使用 Kubernetes 的 Service 提供 VIP 和负载均衡器的能力。根据访问场景的不同,可选择以下三种对外暴露模式:
+
+| 访问模式 | 适用场景 | 说明 |
+| --- | --- | --- |
+| ClusterIP | 仅在 Kubernetes 集群内部访问 | 默认模式,无需额外配置 |
+| NodePort | 从 Kubernetes 集群外部访问(自建集群常用) | 通过宿主机端口暴露服务 |
+| LoadBalancer | 在云平台环境中通过云负载均衡器访问 | 由云服务商提供负载均衡器 |
+
+下面分别介绍每种模式的配置方法。
+
### ClusterIP 模式
-在 Kubernetes 上默认使用 [ClusterIP 访问模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)。ClusterIP 访问模式在 Kubernetes 集群内提供了一个内部地址,该地址作为服务在 Kubernetes 内部的。
+
+在 Kubernetes 上默认使用 [ClusterIP 模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)。该模式在 Kubernetes 集群内提供一个内部地址,仅供集群内部访问使用。
#### 第 1 步:配置 ClusterIP
-默情况下,Doris 在 Kubernetes 上启用 ClusterIP 访问模式,用户无需额外修改即可使用该模式。
+
+ClusterIP 是默认访问模式,**无需额外修改**即可使用。
+
#### 第 2 步:获取 Service 访问地址
-部署集群后,通过以下命令可以查看 FE 暴露的 service:
+
+部署集群后,通过以下命令查看 FE 暴露的 Service:
+
```shell
kubectl -n doris get svc
```
+
示例返回结果如下:
+
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 14m
doriscluster-sample-fe ClusterIP 10.1.118.16 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 14m
```
-在上述结果中,以 internal 后缀的 Service 仅供 Doris 内部通信使用(如心跳和数据交换)不对外暴漏。 不带 internal 后缀的 Service 用于外部访问 FE 服务。
+
+返回结果中包含两类 Service:
+
+- 带 `internal` 后缀:仅供 Doris 内部通信使用(如心跳和数据交换),不对外暴露
+- 不带 `internal` 后缀:用于外部访问 FE 服务
#### 第 3 步:在容器内部访问 Doris
-使用如下命令在当前的 Kubernetes 集群中创建一个包含 MySQL 客户端 的 Pod:
+
+使用如下命令在当前的 Kubernetes 集群中创建一个包含 MySQL 客户端的 Pod:
+
```shell
kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never --namespace=doris -- /bin/bash
```
-在容器内部,可以通过访问不带有 `internal` 后缀的 Service 名称连接 Doris 集群:
+
+在容器内部,通过不带 `internal` 后缀的 Service 名称连接 Doris 集群:
```shell
mysql -uroot -P9030 -hdoriscluster-sample-fe-service
```
-### NodePort
-若需从 Kubernetes 集群外部访问 Doris,可使用 [NodePort 的模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport)。NodePort 模式支持两种配置方式:静态宿主机端口分配和动态宿主机端口分配。
-- **动态宿主机端口分配**:如果未显示设置端口映射,Kubernetes 会自动分配一个宿主机未被使用的端口(默认范围为 30000-32767)。
-- **静态宿主机端口分配**:如果显示指定了端口映射,当宿主机端口未被占用且无冲突的时,Kubernetes 会固定分配该端口。
- 静态分配需要规划端口映射,Doris 默认提供以下端口用于与外部交互:
+### NodePort 模式
-| 端口名称 | 默认端口 | 端口描述 |
-|------| ---- |--------------------------|
-| Query Port | 9030 | 用于通过 MySQL 协议访问 Doris 集群 |
-| HTTP Port | 8030 | FE 上的 http server 端口,用于查看 FE 的信息 |
+若需从 Kubernetes 集群外部访问 Doris,可使用 [NodePort 模式](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport)。NodePort 模式支持两种端口分配方式:
+
+| 分配方式 | 说明 |
+| --- | --- |
+| 动态宿主机端口分配 | 未显式设置端口映射时,Kubernetes 自动分配宿主机未被使用的端口(默认范围 30000-32767) |
+| 静态宿主机端口分配 | 显式指定端口映射,宿主机端口未被占用且无冲突时固定分配该端口 |
+
+静态分配需要规划端口映射,Doris 默认提供以下端口用于与外部交互:
+
+**表 1:FE 服务端口说明**
+
+| 端口名称 | 默认端口 | 端口描述 |
+|---------- | ------- | -------------------------------------- |
+| Query Port | 9030 | 用于通过 MySQL 协议访问 Doris 集群 |
+| HTTP Port | 8030 | FE 上的 HTTP Server 端口,用于查看 FE 的信息 |
#### 第 1 步:配置 FE NodePort
-- 动态分配配置:
+
+根据需求选择以下任一方式配置:
+
+- **动态分配端口**:
+
```yaml
spec:
- feSpec:
- service:
- type: NodePort
+ feSpec:
+ service:
+ type: NodePort
```
-- 静态分配配置示例:
+- **静态分配端口**:
+
```yaml
spec:
- feSpec:
- service:
- type: NodePort
- portMaps:
- - nodePort: 31001
- targetPort: 8030
- - nodePort: 31002
- targetPort: 9030
+ feSpec:
+ service:
+ type: NodePort
+ portMaps:
+ - nodePort: 31001
+ targetPort: 8030
+ - nodePort: 31002
+ targetPort: 9030
```
#### 第 2 步:获取 Service
-集群部署完成后,通过以下命令查看 `Service` :
+
+集群部署完成后,通过以下命令查看 `Service`:
+
```shell
kubectl get service
```
+
返回结果如下:
+
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
@@ -166,42 +260,58 @@ doriscluster-sample-fe NodePort 10.152.183.58 <none> 803
```
#### 第 3 步:使用 NodePort 访问 Doris
-以 MySQL 连接为例,Doris 的 Query Port 映射到宿主机端口 31545。首先获取到 Kubernetes 集群任一 node 的 IP 地址,例如通过:
-```shell
-kubectl get nodes -owide
-```
-示例返回:
-```shell
-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
-```
-使用其中任一节点的 IP(如 192.168.88.62),通过以下命令连接 Doris 集群:
-```shell
-mysql -h 192.168.88.62 -P 31545 -uroot
-```
-### LoadBalancer
-[LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 模式适用于云平台的 Kubernetes 环境,是由云服务商提供的负载均衡器。
+以 MySQL 连接为例,假设 Doris 的 Query Port 映射到宿主机端口 31545,操作步骤如下:
+
+1. 获取 Kubernetes 集群任一节点的 IP 地址:
+
+ ```shell
+ kubectl get nodes -owide
+ ```
+
+ 示例返回:
+
+ ```shell
+ 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
+ ```
+
+2. 使用其中任一节点的 IP(如 192.168.88.62)和映射端口连接 Doris 集群:
+
+ ```shell
+ mysql -h 192.168.88.62 -P 31545 -uroot
+ ```
+
+### LoadBalancer 模式
+
+[LoadBalancer 模式](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 适用于云平台的 Kubernetes 环境,由云服务商提供负载均衡器。
+
#### 第 1 步:配置 LoadBalancer 模式
-在 `feSpec.service` 中设置类型为 LoadBalancer,如下所示:
+
+在 `feSpec.service` 中将类型设置为 `LoadBalancer`:
+
```yaml
spec:
- feSpec:
- service:
- type: LoadBalancer
- annotations:
- service.beta.kubernetes.io/load-balancer-type: "external"
+ feSpec:
+ service:
+ type: LoadBalancer
+ annotations:
+ service.beta.kubernetes.io/load-balancer-type: "external"
```
#### 第 2 步:获取 Service
-在部署集群后,通过以下命令查看 `Service`:
+
+集群部署后,通过以下命令查看 `Service`:
+
```shell
kubectl get service
```
+
示例返回结果:
+
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
@@ -210,62 +320,86 @@ doriscluster-sample-fe LoadBalancer 10.152.183.58 ac4828493dgrft
```
#### 第 3 步:使用 LoadBalancer 访问
-以 MySQL 连接为例,假设 Query Port 的监听端口为 9030,则可使用如下命令连接 Doris 集群:
+
+以 MySQL 连接为例,假设 Query Port 的监听端口为 9030,可使用如下命令连接 Doris 集群:
+
```shell
mysql -h ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com -P 9030 -uroot
```
## 持久化存储
-[默认部署](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,FE 服务使用 Kubernetes 的 [EmptyDir](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#emptydir) 作为元数据存储模式。由于 `EmptyDir` 模式是非持久化存储模式,服务重启后元数据会丢失。
-为了保证 FE 元数据在重启后不丢失,需要配置持久化存储。
+
+[默认部署](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/cluster/ddc-sample.yaml)中,FE 服务使用 Kubernetes 的 [EmptyDir](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#emptydir) 作为元数据存储模式。由于 `EmptyDir` 是非持久化存储模式,**服务重启后元数据会丢失**。
+
+为保证 FE 元数据在重启后不丢失,需要为 FE 配置持久化存储。Doris Operator 提供以下三种方案,可根据使用需求选择:
+
+| 方案 | 适用场景 |
+| --- | --- |
+| 使用存储模板自动生成 | 日志和元数据使用相同的存储配置,简化配置 |
+| 自定义挂载点配置 | 需要为不同目录指定不同的存储规格 |
+| 不持久化日志 | 日志只输出到标准输出,不需要持久化 |
+
### 使用存储模板自动生成
-使用存储模板对日志和元数据进行持久化配置,示例如下:
+
+通过存储模板对日志和元数据进行统一持久化配置,示例如下:
+
```yaml
spec:
- feSpec:
- persistentVolumes:
- - persistentVolumeClaimSpec:
- # storageClassName: ${storageclass_name}
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 200Gi
+ feSpec:
+ persistentVolumes:
+ - persistentVolumeClaimSpec:
+ # storageClassName: ${storageclass_name}
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 200Gi
```
-使用如上配置部署集群后,Doris Operator 会自动为日志目录(默认为 `/opt/apache-doris/fe/log`)以及元数据目录(默认为 `/opt/apache-doris/fe/doris-meta`)挂载持久化存储。 如果在[自定义启动配置](#自定义启动配置)中显示指定了日志或元数据目录,Doris Operator 会自动解析并进行挂载。
-持久化存储采用 [StorageClass 模式](https://kubernetes.io/docs/concepts/storage/storage-classes/),可以通过 `storageClassName` 指定所需的 StorageClass。
+
+应用上述配置部署集群后,会有以下效果:
+
+- Doris Operator 自动为日志目录(默认为 `/opt/apache-doris/fe/log`)以及元数据目录(默认为 `/opt/apache-doris/fe/doris-meta`)挂载持久化存储
+- 如果在[自定义启动配置](#自定义启动配置)中显式指定了日志或元数据目录,Doris Operator 会自动解析并进行挂载
+- 持久化存储采用 [StorageClass 模式](https://kubernetes.io/docs/concepts/storage/storage-classes/),可通过 `storageClassName` 指定所需的 StorageClass
### 自定义挂载点配置
-Doris Operator 支持对挂载目录进行个性化存储配置。为日志目录使用自定义存储配置挂载 300Gi 的存储磁盘,为元数据目录使用存储模板挂载 200Gi 的存储磁盘:
+
+Doris Operator 支持对挂载目录进行个性化存储配置。例如,为日志目录使用自定义存储配置挂载 300Gi 的存储磁盘,为元数据目录使用存储模板挂载 200Gi 的存储磁盘:
+
```yaml
spec:
- feSpec:
- persistentVolumes:
- - mountPaths:
- - /opt/apache-doris/fe/log
- persistentVolumeClaimSpec:
- # storageClassName: ${storageclass_name}
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 300Gi
- - persistentVolumeClaimSpec:
- # storageClassName: ${storageclass_name}
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 200Gi
+ feSpec:
+ persistentVolumes:
+ - mountPaths:
+ - /opt/apache-doris/fe/log
+ persistentVolumeClaimSpec:
+ # storageClassName: ${storageclass_name}
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 300Gi
+ - persistentVolumeClaimSpec:
+ # storageClassName: ${storageclass_name}
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 200Gi
```
+
:::tip 提示
-若 `mountPaths` 数组为空,则表示当前存储配置为模板配置。
+
+若 `mountPaths` 数组为空,则表示当前存储配置为模板配置(即应用于所有未单独配置的目录)。
+
:::
### 不持久化日志
-如果不希望将日志持久化,而仅输出到标准输出,则可配置如下:
+
+如果不希望将日志持久化,而仅输出到标准输出,可使用如下配置:
+
```yaml
spec:
- feSpec:
- logNotStore: true
+ feSpec:
+ logNotStore: true
```
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-ms.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-ms.md
index 50e93c40f48..6d1cf1da9c7 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-ms.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/config-ms.md
@@ -1,48 +1,99 @@
---
{
- "title": "配置部署 MetaService",
+ "title": "配置 MetaService",
"language": "zh-CN",
- "description": "MetaService 是 Doris 存算分离集群元数据管理组件,不对外暴漏,仅用于内部使用。MetaService 属于无状态服务,通常采用主备模式部署。下面介绍如何在 DorisDisaggregatedCluster 资源中配置 MetaService。"
+ "description": "详细介绍 MetaService 元数据管理组件的配置方法,包括 FoundationDB 访问配置、镜像配置、资源配置、启动参数配置和服务探测超时配置。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "MetaService", "FoundationDB", "元数据", "配置"]
}
---
-MetaService 是 Doris 存算分离集群元数据管理组件,不对外暴漏,仅用于内部使用。MetaService 属于无状态服务,通常采用主备模式部署。下面介绍如何在 `DorisDisaggregatedCluster` 资源中配置 MetaService。
-
-## 配置 FoundationDB 访问
-根据 FoundationDB 部署环境不同,配置方式也有所差异:
-- 使用 ConfigMap 配置 FoundationDB 访问
- 如果 FoundationDB 集群通过 `fdb-kubernetes-operator` 部署,可直接使用 该 Operator 生成的包含 FoundationDB 访问地址的 ConfigMap,示例如下:
- ```yaml
- spec:
- metaService:
- fdb:
- configMapNamespaceName:
- name: ${foundationdbConfigMapName}
- namespace: ${namespace}
- ```
- 其中,`${foundationdbConfigMapName}` 为 ConfigMap 的名称。`${namespace}` 为 FoundationDB 部署的命名空间。查找 `fdb-kubernetes-operator` 生成的 ConfigMap,请参考部署 FoundationDB 章节的 [获取包含 FoundationDB 访问信息的 ConfigMap](install-fdb.md#获取包含-foundationdb-访问信息的-configmap)。
-
-- 直接配置 FoundationDB 访问地址
- 如果 FoundationDB 是直接在物理机上部署,则可以直接在 MetaService 配置中指定访问地址:
- ```yaml
- spec:
- metaService:
- fdb:
- address: ${fdbEndpoint}
- ```
- `${fdbEndpoint}` 为可访问 FoundationDB 的访问地址信息,物理机部署情况下查找请参考存算分离章节 [MetaService 部署获取 `fdb_cluster` 介绍](../../../compute-storage-decoupled/compilation-and-deployment.md#31-配置)。
-
-## 配置镜像
-在部署样例中,MetaService 配置的镜像可能不是最新版本镜像。自定义镜像时,请按照如下格式配置:
+## 学完本章节你将能够
+
+- 配置 MetaService 访问 FoundationDB 的连接信息
+- 自定义 MetaService 镜像版本
+- 为 MetaService 分配合适的计算资源
+- 通过 ConfigMap 自定义 MetaService 启动参数
+- 配置 MetaService 的存活探测超时和启动超时
+
+## 概述
+
+MetaService 是 Doris 存算分离集群的元数据管理组件,仅供集群内部使用,不对外暴露。它属于无状态服务,通常采用主备模式部署。本章介绍如何在 `DorisDisaggregatedCluster` 资源中配置 MetaService。
+
+完整配置项概览如下:
+
+| 配置场景 | 配置字段 | 是否必选 | 适用场景 |
+|----------|----------|----------|----------|
+| 连接 FoundationDB | `fdb.configMapNamespaceName` 或 `fdb.address` | 必选 | 所有场景 |
+| 自定义镜像 | `image` | 可选 | 部署样例镜像版本不满足需求时 |
+| 分配计算资源 | `requests` / `limits` | 可选 | 需要限制 CPU 和内存使用时 |
+| 定制化启动参数 | `configMaps` | 可选 | 需要修改默认启动参数时 |
+| 存活探测超时 | `liveTimeout` | 可选 | 默认 180 秒不满足需求时 |
+| 启动超时 | `startTimeout` | 可选 | 默认 300 秒不满足需求时 |
+
+## 1. 连接 FoundationDB
+
+MetaService 依赖 FoundationDB 存储元数据,因此必须配置 FoundationDB 的访问信息。根据 FoundationDB 的部署方式不同,有两种配置方式:
+
+| FoundationDB 部署方式 | 推荐配置方式 | 配置字段 |
+|----------------------|--------------|----------|
+| 通过 `fdb-kubernetes-operator` 在 Kubernetes 上部署 | 引用 Operator 自动生成的 ConfigMap | `fdb.configMapNamespaceName` |
+| 直接在物理机上部署 | 直接填写访问地址 | `fdb.address` |
+
+### 方式一:通过 ConfigMap 配置访问信息
+
+如果 FoundationDB 集群通过 `fdb-kubernetes-operator` 部署,可直接使用该 Operator 自动生成的、包含 FoundationDB 访问地址的 ConfigMap:
+
+```yaml
+spec:
+ metaService:
+ fdb:
+ configMapNamespaceName:
+ name: ${foundationdbConfigMapName}
+ namespace: ${namespace}
+```
+
+参数说明:
+
+- `${foundationdbConfigMapName}`:ConfigMap 的名称
+- `${namespace}`:FoundationDB 部署所在的命名空间
+
+查找 `fdb-kubernetes-operator` 生成的 ConfigMap,请参考部署 FoundationDB 章节的 [获取包含 FoundationDB 访问信息的 ConfigMap](install-fdb.md#获取包含-foundationdb-访问信息的-configmap)。
+
+### 方式二:直接配置访问地址
+
+如果 FoundationDB 部署在物理机上,则可在 MetaService 配置中直接指定访问地址:
+
+```yaml
+spec:
+ metaService:
+ fdb:
+ address: ${fdbEndpoint}
+```
+
+参数说明:
+
+- `${fdbEndpoint}`:可访问 FoundationDB 的地址信息
+
+物理机部署情况下查找该地址,请参考存算分离章节 [MetaService 部署获取 `fdb_cluster` 介绍](../../../compute-storage-decoupled/compilation-and-deployment.md#31-配置)。
+
+## 2. 自定义镜像
+
+部署样例中 MetaService 配置的镜像可能不是最新版本。如需指定镜像版本,按如下格式配置:
+
```yaml
spec:
metaService:
image: ${msImage}
```
-其中 `${msImage}` 为想要部署的 MetaService 的镜像。请使用 Doris 官方提供的 [MetaService 镜像](https://hub.docker.com/r/apache/doris)(镜像 tag 中包含 ms 前缀)。
-## 配置资源
-可以通过 Kubernetes 的资源限制为 MetaService 分配合适的计算资源,例如限制为 4 核 CPU 和 4Gi 内存,配置如下:
+参数说明:
+
+- `${msImage}`:要部署的 MetaService 镜像。请使用 Doris 官方提供的 [MetaService 镜像](https://hub.docker.com/r/apache/doris)(镜像 tag 中包含 `ms` 前缀)。
+
+## 3. 分配计算资源
+
+通过 Kubernetes 资源限制为 MetaService 分配合适的 CPU 和内存。例如,限制为 4 核 CPU 和 4Gi 内存的配置如下:
+
```yaml
spec:
metaService:
@@ -53,68 +104,102 @@ spec:
cpu: 4
memory: 4Gi
```
-将配置更新到需要[部署的 DorisDisaggregatedCluster 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中。
-
-## 定制化启动配置
-Doris-Operator 通过 ConfigMap 挂载组件的启动配置文件。Doris-Operator 自动填充 MetaService 启动配置中有关 FoundationDB 的相关配置,因此定制化启动配置时无需填写这些信息。
-1. 创建自定义 ConfigMap
- 自定义一个包含启动配置信息的 ConfigMap。启动配置文件的名称必须为 `doris_cloud.conf`,示例如下:
- ```yaml
- apiVersion: v1
- data:
- doris_cloud.conf: |
- # // meta_service
- brpc_listen_port = 5000
- brpc_num_threads = -1
- brpc_idle_timeout_sec = 30
- http_token = greedisgood9999
-
- # // doris txn config
- label_keep_max_second = 259200
- expired_txn_scan_key_nums = 1000
-
- # // logging
- log_dir = ./log/
- # info warn error
- log_level = info
- log_size_mb = 1024
- log_filenum_quota = 10
- log_immediate_flush = false
- # log_verbose_modules = *
-
- # //max stage num
- max_num_stages = 40
- kind: ConfigMap
- metadata:
- name: doris-metaservice
- namespace: default
- ```
-2. 挂载自定义启动配置
- 在 `DorisDisaggregatedCluster` 资源中,通过 `metaService.configMaps` 挂载上述 ConfigMap,示例如下:
- ```yaml
- spec:
- metaService:
- configMaps:
- - name: ${msConfigMapName}
- mountPath: /etc/doris
- ```
- `${msConfigMapName}` 为包含 MetaService 启动配置的 ConfigMap 名称。更新到需要部署的 [DorisDisaggregatedCluster 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)。包含启动配置的 ConfigMap 的挂载点必须为 `/etc/doris` ,即 `mountPath` 为 `/etc/doris`。
+
+将上述配置更新到需要[部署的 DorisDisaggregatedCluster 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中。
+
+## 4. 定制化启动配置
+
+如果默认的启动参数不满足需求,可以通过 ConfigMap 挂载自定义的启动配置文件。Doris-Operator 通过 ConfigMap 挂载组件的启动配置文件来实现自定义。
+
+整体流程如下:
+
+| 阶段 | 说明 |
+|------|------|
+| 输入 | 自定义的 `doris_cloud.conf` 配置文件 |
+| 操作 | 创建 ConfigMap,挂载到 `/etc/doris` 目录 |
+| 输出 | MetaService 使用自定义配置启动 |
:::tip 提示
-在 Kubernetes 部署中,定制化 MetaService 启动配置时请不要填写 `fdb_cluster` 配置,Doris Operator 会自动处理相关信息。
+Doris-Operator 会自动填充 MetaService 启动配置中关于 FoundationDB 的相关配置,因此定制化启动配置时无需(也不要)填写 `fdb_cluster` 配置。
:::
-## 配置服务探测超时
-Doris Operator 为存算分离集群服务提供两种超时参数配置:存活探测超时和启动超时。
+### 第 1 步:创建自定义 ConfigMap
+
+启动配置文件的名称必须为 `doris_cloud.conf`,示例如下:
+
+```yaml
+apiVersion: v1
+data:
+ doris_cloud.conf: |
+ # // meta_service
+ brpc_listen_port = 5000
+ brpc_num_threads = -1
+ brpc_idle_timeout_sec = 30
+ http_token = greedisgood9999
+
+ # // doris txn config
+ label_keep_max_second = 259200
+ expired_txn_scan_key_nums = 1000
+
+ # // logging
+ log_dir = ./log/
+ # info warn error
+ log_level = info
+ log_size_mb = 1024
+ log_filenum_quota = 10
+ log_immediate_flush = false
+ # log_verbose_modules = *
+
+ # //max stage num
+ max_num_stages = 40
+kind: ConfigMap
+metadata:
+ name: doris-metaservice
+ namespace: default
+```
+
+### 第 2 步:挂载自定义启动配置
+
+在 `DorisDisaggregatedCluster` 资源中,通过 `metaService.configMaps` 挂载上述 ConfigMap:
+
+```yaml
+spec:
+ metaService:
+ configMaps:
+ - name: ${msConfigMapName}
+ mountPath: /etc/doris
+```
+
+参数说明:
+
+- `${msConfigMapName}`:包含 MetaService 启动配置的 ConfigMap 名称
+- `mountPath`:挂载点必须为 `/etc/doris`
+
+将上述配置更新到需要部署的 [DorisDisaggregatedCluster 资源](./install-doris-cluster.md#3-配置-dorisdisaggregatedcluster-资源)中。
+
+## 5. 配置服务探测超时
+
+Doris Operator 为存算分离集群服务提供两种超时参数配置:
+
+| 探测类型 | 配置字段 | 默认值 | 作用阶段 | 触发条件 |
+|----------|----------|--------|----------|----------|
+| 存活探测(LivenessProbe) | `liveTimeout` | 180 秒 | 服务运行期间 | 探测失败超过阈值时,服务被强制重启 |
+| 启动超时 | `startTimeout` | 300 秒 | 服务启动阶段 | 启动时间超过阈值时,服务被强制重启 |
+
### 存活探测超时配置
-存活探测(LivenessProbe)用于监控服务运行状态,当探测失败超过设定阈值时,服务将被强制重启。默认超时时间为 180 秒,若需要配置为 30 秒,可按如下设置
+
+存活探测用于监控服务运行状态。例如,将存活探测超时配置为 30 秒:
+
```yaml
spec:
metaService:
liveTimeout: 30
```
+
### 启动超时配置
-启动超时用于应对服务启动时间过长的情况,当服务启动时间超过设定阈值时,服务将被强制重启。默认启动超时时间为 300 秒,若需要配置为 120 秒,可按如下设置:
+
+启动超时用于应对服务启动时间过长的情况。例如,将启动超时配置为 120 秒:
+
```yaml
spec:
metaService:
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md
index b91bd42ce9b..3d66df774d3 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md
@@ -1,100 +1,240 @@
---
{
- "title": "部署存算分离 Doris 集群",
+ "title": "部署完整 Doris 存算分离集群",
"language": "zh-CN",
- "description": "在 Kubernetes 上部署可用存算分离集群分为 4 步:"
+ "description": "在 Kubernetes 上从零搭建一套可用的 Doris 存算分离集群的端到端教程:部署 FoundationDB、部署 Doris Operator、部署 Doris 集群、创建 Storage Vault。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "部署集群", "FoundationDB", "Doris Operator", "Storage Vault"]
}
---
-在 Kubernetes 上部署可用存算分离集群分为 4 步:
-1. 部署前准备,主要包括安装 FoundationDB 集群。
-2. 部署 Doris Operator。
-3. 部署 Doris 存算分离集群。
-4. 创建存储后端。
+本文面向首次在 Kubernetes 上搭建 Doris 存算分离集群的同学,提供从零部署到可写入数据的端到端教程。读完本文你将能够:
-## 第 1 步:部署前准备
-在 Kubernetes 上部署存算分离集群需要提前部署好 FoundationDB。
-- (推荐)如果使用机器直接部署,需要确保该机器能够被 Kubernetes 集群上的服务访问。FoundationDB 在机器上直接部署请参考存算分离部署文档中[部署前准备阶段的介绍](../../../compute-storage-decoupled/before-deployment)。
-- 在 Kubernetes 上部署请参考[在 Kubernetes 上部署 FoundationDB](install-fdb.md)。
+- 完成 FoundationDB(元数据存储)的部署或接入
+- 在 Kubernetes 上部署 Doris Operator
+- 通过 Doris Operator 部署一套完整的存算分离集群
+- 通过 SQL 创建对象存储后端(Storage Vault)
+
+## 部署成果
+
+完成本教程后,你将得到一个由以下组件构成的 Doris 存算分离集群:
+
+| 组件 | 说明 | 默认副本数 |
+|------|------|-----------|
+| FE | 负责 SQL 解析和协调 | 1 |
+| MS (MetaService) | 元数据管理 | 1 |
+| 计算组 (CG) | 数据导入和缓存 | 2 |
+| FoundationDB | 元数据存储 | - |
+| Storage Vault | S3 兼容对象存储 | - |
+
+## 部署路径概览
+
+整个流程按顺序分为 5 个步骤,每一步的输入与产出如下:
+
+| 步骤 | 阶段目标 | 输入 | 输出 |
+|------|----------|------|------|
+| 第 1 步 | 部署 FoundationDB | K8s 集群 / 可用机器 | 可用的 FDB 集群 + 访问信息 |
+| 第 2 步 | 部署 Doris Operator | K8s 集群访问权限 | 运行中的 Operator + CRD |
+| 第 3 步 | 部署 Doris 存算分离集群 | `ddc-sample.yaml` + FDB 访问信息 | 运行中的存算分离集群 |
+| 第 4 步 | 创建远程存储后端 | 运行中的集群 + S3 兼容对象存储凭证 | 可用于数据持久化的 Storage Vault |
+| 第 5 步 | 连接集群并端到端验证 | 第 4 步建立的 MySQL 连接 | 通过读写验证的可用集群 |
+
+完成第 4 步后集群即可写入数据,第 5 步通过 SQL 完成端到端验证。如需对 FE / MS / 计算组 做进阶定制,参见文末 [进阶配置](#进阶配置) 一节。
+
+## 第 1 步:部署 FoundationDB
+
+存算分离集群依赖 FoundationDB(FDB)存储元数据,部署前必须先准备好可用的 FDB。根据现有基础设施选择部署方式:
+
+| 部署方式 | 适用场景 | 后续操作 |
+|----------|----------|----------|
+| 机器直接部署(推荐) | 已有可用物理机 / 虚拟机 | 参考 [存算分离 - 部署前准备](../../../compute-storage-decoupled/before-deployment) 完成部署,确保部署机与 K8s 集群在同一局域网 |
+| Kubernetes 上部署 | 希望统一在 K8s 中管理 FDB | 直接执行下方"K8s 快速部署" |
+
+### K8s 快速部署(最简通道)
+
+依次执行以下 4 步即可在 K8s 上拉起一个最简 FDB 集群(单副本):
+
+**1. 下发 FoundationDB CRD:**
-## 第 2 步:部署 Doris Operator
-### 1. 下发资源定义
```shell
-kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/crds.yaml
+kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbclusters.yaml
+kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbbackups.yaml
+kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbrestores.yaml
```
-如果已经部署过非存算分离集群请用如下命令下发资源定义:
-```yaml
-kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/disaggregated.cluster.doris.com_dorisdisaggregatedclusters.yaml
+
+**2. 部署 fdb-kubernetes-operator:**
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/fdb-operator.yaml
+```
+
+**3. 部署 FoundationDB 集群(单副本最简模式):**
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster-single.yaml
```
+**4. 验证 FDB 状态:**
+
+```shell
+kubectl get fdb
+```
+
+`kubectl get fdb` 返回的 `AVAILABLE` 列为 `true` 时,表示 FDB 集群已就绪。
+
+:::tip 进阶选项
+单副本模式仅适合开发测试。生产环境推荐使用两副本模式,并且 Kubernetes 集群至少需要三台宿主机。其他部署形态(两副本、生产部署、私有仓库镜像、FQDN 模式等)请参考 [部署 FoundationDB](install-fdb.md)。
+:::
+
+## 第 2 步:部署 Doris Operator
+
+**输入**:Kubernetes 集群访问权限
+**操作**:下发 CRD 资源定义,部署 Operator 及 RBAC 规则
+**输出**:Doris Operator 运行在 `doris` namespace 中
+
+### 1. 下发 CRD 资源定义
+
+根据集群现状选择对应命令:
+
+- **场景 A:首次部署(或只部署存算分离)**——下发全部 CRD:
+
+ ```shell
+ kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/crds.yaml
+ ```
+
+- **场景 B:已部署过非存算分离集群**——仅追加存算分离相关的 CRD:
+
+ ```shell
+ kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/disaggregated.cluster.doris.com_dorisdisaggregatedclusters.yaml
+ ```
+
### 2. 部署 Operator 及 RBAC 规则
+
执行如下命令部署 Doris Operator 及其依赖的 RBAC 规则:
+
```shell
kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/disaggregated-operator.yaml
```
-部署后可通过以下命令检查 Operator Pod 状态:
+
+部署完成后检查 Operator Pod 状态:
+
```shell
kubectl -n doris get pods
NAME READY STATUS RESTARTS AGE
doris-operator-6b97df65c4-xwvw8 1/1 Running 0 19s
```
+`STATUS` 为 `Running` 表示 Operator 已就绪。
+
## 第 3 步:部署存算分离集群
+
+**输入**:部署样例 `ddc-sample.yaml` + FoundationDB 访问信息
+**操作**:下载样例、按需修改关键字段、部署集群
+**输出**:运行中的 Doris 存算分离集群
+
### 1. 下载部署样例
+
从 Doris Operator 仓库下载默认部署样例:
+
```shell
curl -O https://raw.githubusercontent.com/apache/doris-operator/master/doc/examples/disaggregated/cluster/ddc-sample.yaml
```
-### 2. 配置 FoundationDB 访问信息
-Doris 存算分离版本使用 FDB 存储元数据,在 `DorisDisaggregatedCluster` 的 `spec.metaService.fdb` 中提供两种配置方式:
-- 配置访问地址
- 若 FoundationDB 部署在 Kubernetes 外部,可直接配置 FoundationDB 的访问地址:
- ```yaml
- spec:
- metaService:
- fdb:
- address: ${fdbAddress}
- ```
- 其中,${fdbAddress} 为 FoundationDB 使用客户端的访问地址。Linux 虚机默认部署的情况下存储在 `/etc/foundationdb/fdb.cluster`,可参考 FoundationDB 对于 [cluster file](https://apple.github.io/foundationdb/administration.html#foundationdb-cluster-file) 的介绍了解详细信息。
-
-- 配置包含访问信息的 ConfigMap
- 使用 [fdb-kubernetes-operator](https://github.com/FoundationDB/fdb-kubernetes-operator) 部署 FoundationDB,`fdb-kubernetes-operator` 会在部署的命名空间下生成一个特定的,包含 FoundationDB 访问信息的 ConfigMap。
- 生成的 ConfigMap 名称为部署 FoundationDB 的资源名称加上 "-config"。如何获取 `ConfigMap`,请参考文档 FoundationDB 在 Kubernetes 上部署中的[访问信息获取](./install-fdb.md#获取包含-foundationdb-访问信息的-configmap)章节。获取 `ConfigMap` 的命名空间和名称后,请按照如下格式配置 `DorisDisaggregatedCluster` 资源:
- ```yaml
- spec:
- metaService:
- fdb:
- configMapNamespaceName:
- name: {foundationdbConfigMapName}
- namespace: {namespace}
- ```
- 其中,${foundationdbConfigMapName} 为 `fdb-kubernetes-operator` 生成的 `ConfigMap` 名称。${namespace} 为 `ConfigMap` 所在的命名空间。
-
-### 3. 配置 DorisDisaggregatedCluster 资源
-根据存算分离 Kubernetes 部署文档中:
-- [元数据配置章节](config-ms.md)配置 metaService;
-- [FE 集群配置章节](config-fe.md)进行 FE 规格配置;
-- [计算资源组配置章节](config-cg.md)进行相关资源组的配置。
- 配置完成后,使用如下命令部署:
+### 2. 修改关键配置
+
+样例下载后,至少需要修改以下两类字段才能部署,其余字段保留默认即可:
+
+| 字段 | 必改 / 可选 | 说明 |
+|------|-------------|------|
+| `spec.metaService.fdb` | **必改** | 第 1 步部署的 FDB 访问信息(地址或 ConfigMap 二选一) |
+| `spec.computeGroups[].image` | **必改** | BE 镜像版本,需匹配你期望的 Doris 版本 |
+| `spec.metaService.image` | 可选 | MetaService 镜像版本,默认使用样例中的版本 |
+| `spec.feSpec.electionNumber` | 可选 | FE Follower 数量,默认 1;**部署后不可修改** |
+| `spec.computeGroups[].replicas` | 可选 | 计算组副本数,默认按样例 |
+| `spec.feSpec.requests` / `limits` | 可选 | FE 计算资源限制(推荐生产环境配置) |
+
+修改后的 `spec` 段大致如下(**方式 A:FDB 部署在机器上**):
+
+```yaml
+spec:
+ metaService:
+ fdb:
+ address: ${fdbEndpoint} # 必改:FDB 客户端访问地址(机器部署)
+ feSpec:
+ electionNumber: 1
+ requests:
+ cpu: 8
+ memory: 8Gi
+ limits:
+ cpu: 8
+ memory: 8Gi
+ computeGroups:
+ - uniqueId: cg1
+ image: ${beImage} # 必改:BE 镜像
+ replicas: 2
+ requests:
+ cpu: 8
+ memory: 8Gi
+ limits:
+ cpu: 8
+ memory: 8Gi
+```
+
+**方式 B:FDB 部署在 K8s 上**——把 `metaService.fdb` 段替换为:
+
+```yaml
+spec:
+ metaService:
+ fdb:
+ configMapNamespaceName:
+ name: ${foundationdbConfigMapName} # 必改:fdb-kubernetes-operator 生成的 ConfigMap 名(默认是 ${FDB 资源名}-config)
+ namespace: ${namespace} # 必改:ConfigMap 所在命名空间
+```
+
+ConfigMap 的获取方法可执行 `kubectl get configmap` 查看(详见 [部署 FoundationDB - 获取访问信息 ConfigMap](install-fdb.md#获取包含-foundationdb-访问信息的-configmap))。
+
+参数说明:
+
+| 参数 | 说明 |
+|------|------|
+| `${fdbEndpoint}` | FoundationDB 客户端访问地址。Linux 虚机默认部署时存储在 `/etc/foundationdb/fdb.cluster`,详见 [FoundationDB cluster file 文档](https://apple.github.io/foundationdb/administration.html#foundationdb-cluster-file) |
+| `${beImage}` | BE 镜像,请使用 [Apache Doris 官方镜像仓库](https://hub.docker.com/r/apache/doris) 提供的镜像 |
+| `${foundationdbConfigMapName}` | `fdb-kubernetes-operator` 生成的 ConfigMap 名称 |
+| `${namespace}` | ConfigMap 所在命名空间 |
+
+### 3. 部署并验证
+
```shell
kubectl apply -f ddc-sample.yaml
```
-部署资源下发后,等待集群自动搭建完成,预期结果如下:
+
+部署资源下发后,等待集群自动搭建完成。通过以下命令查询集群状态:
+
```shell
kubectl get ddc
NAME CLUSTERHEALTH FEPHASE CGCOUNT CGAVAILABLECOUNT CGFULLAVAILABLECOUNT
test-disaggregated-cluster green Ready 2 2 2
```
+**判定就绪标志:** `CLUSTERHEALTH` 为 `green` 且 `CGAVAILABLECOUNT` 等于 `CGCOUNT`。
+
## 第 4 步:创建远程存储后端
-集群启动成功后,需要通过相应的 SQL 配置,将可用的对象存储作为持久化存储后端(Doris 称之为 Vault)。
+
+**输入**:运行中的 Doris 集群 + S3 兼容对象存储凭证
+**操作**:通过 MySQL 客户端执行 SQL 创建并启用 Vault
+**输出**:配置完成的存储后端,可用于数据持久化
+
+集群启动成功后,需要通过 SQL 将一个对象存储注册为持久化存储后端(Doris 中称为 Vault),并设为默认 Vault,写入的数据才能持久化。
+
### 1. 获取 FE Service 的访问地址
-部署集群后,通过以下命令查找可访问 FE 服务的 Service:
+
+通过以下命令查找可访问 FE 服务的 Service:
+
```shell
kubectl get svc
```
+
示例输出:
+
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-disaggregated-cluster-fe ClusterIP 10.96.147.97 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 15m
@@ -103,36 +243,106 @@ test-disaggregated-cluster-ms ClusterIP 10.96.169.8 <none>
test-disaggregated-cluster-cg1 ClusterIP 10.96.47.90 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m
test-disaggregated-cluster-cg2 ClusterIP 10.96.50.199 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m
```
-其中不带 "-internal" 后缀的 Service 为外部访问使用的 Service 。
+
+不带 `-internal` 后缀的 Service 用于外部访问。
### 2. 通过 MySQL 客户端连接
-在 Kubernetes 集群中创建一个包含 MySQL Client 的 Pod,并进入 Pod内部:
+
+在 Kubernetes 集群中拉起一个包含 MySQL Client 的临时 Pod 并进入:
+
```shell
kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never -- /bin/bash
```
-在 Pod 内部使用 Service 名称直接连接 Doris 集群:
+
+在 Pod 内部使用 FE Service 名称连接 Doris 集群:
+
```shell
mysql -uroot -P9030 -h test-disaggregated-cluster-fe
```
-### 3. 存储后端创建(Vault)
-通过 SQL 命令创建支持 S3 协议的对象存储作为 Vault。示例如下:
- ```mysql
- CREATE STORAGE VAULT IF NOT EXISTS s3_vault
- PROPERTIES (
- "type"="S3",
- "s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
- "s3.region" = "bj",
- "s3.bucket" = "bucket",
- "s3.root.path" = "big/data/prefix",
- "s3.access_key" = "your-ak",
- "s3.secret_key" = "your-sk",
- "provider" = "OSS"
- );
- ```
-有关其他存储后端的创建以及各字段详细说明,请参考存算分离文档中的[管理 Storage Vault](../../../compute-storage-decoupled/managing-storage-vault.md)部分。
-设置默认存储后端,命令如下:
+### 3. 创建 Storage Vault
+
+通过 SQL 创建支持 S3 协议的对象存储作为 Vault。以下示例使用阿里云 OSS:
+
+```mysql
+CREATE STORAGE VAULT IF NOT EXISTS s3_vault
+ PROPERTIES (
+ "type"="S3",
+ "s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
+ "s3.region" = "bj",
+ "s3.bucket" = "bucket",
+ "s3.root.path" = "big/data/prefix",
+ "s3.access_key" = "your-ak",
+ "s3.secret_key" = "your-sk",
+ "provider" = "OSS"
+ );
+```
+
+其他存储后端的创建方法以及各字段详细说明,请参考存算分离文档中的 [管理 Storage Vault](../../../compute-storage-decoupled/managing-storage-vault.md)。
+
+### 4. 设置默认 Storage Vault
+
+```mysql
+SET ${vaultName} AS DEFAULT STORAGE VAULT;
+```
+
+其中,`${vaultName}` 为希望使用的 Vault 名称(如上一步中的 `s3_vault`)。
+
+至此,集群已具备写入条件,下一步通过 SQL 完成端到端验证。
+
+## 第 5 步:连接集群并端到端验证
+
+**输入**:第 4 步建立的 MySQL 连接
+**操作**:执行验证 SQL,确认集群已就绪并可正常读写
+**输出**:通过端到端验证的可用集群
+
+延续第 4 步中已建立的 MySQL 客户端连接(如已退出,重复 [第 4 步 - 通过 MySQL 客户端连接](#2-通过-mysql-客户端连接)),依次执行以下命令完成验证。
+
+### 1. 确认 BE 节点存活
+
```mysql
-SET {vaultName} AS DEFAULT STORAGE VAULT;
+SHOW BACKENDS;
```
-其中,{vaultName} 为希望使用的 Vault 的名称,比如创建示例中的 `s3_vault`。
\ No newline at end of file
+
+输出中各 BE 节点的 `Alive` 列均为 `true`,表示计算组中的 BE 已就绪并被 FE 识别。
+
+### 2. 确认 Storage Vault 已生效
+
+```mysql
+SHOW STORAGE VAULTS;
+```
+
+输出中能看到第 4 步创建的 Vault(如 `s3_vault`),且其 `IsDefault` 为 `true`,表示存储后端已就绪。
+
+### 3. 写入并查询测试数据
+
+依次执行如下 SQL,完成"建库 → 建表 → 写入 → 查询"的完整链路:
+
+```mysql
+CREATE DATABASE IF NOT EXISTS demo;
+USE demo;
+
+CREATE TABLE IF NOT EXISTS hello (
+ id INT,
+ msg VARCHAR(64)
+)
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 1;
+
+INSERT INTO hello VALUES (1, 'hello doris');
+SELECT * FROM hello;
+```
+
+若 `SELECT` 返回写入的数据,表示 FE → MetaService → 计算组 → Storage Vault 端到端链路全部畅通,集群已可投入使用。
+
+## 进阶配置
+
+完成上述 5 步后,集群即可投入使用。生产场景下通常还需要按需做进一步定制,可按以下索引查阅对应文档:
+
+| 关注点 | 参考文档 | 主要内容 |
+|--------|----------|----------|
+| FoundationDB 部署细节、两副本/生产模式、FQDN 部署、私有镜像仓库 | [部署 FoundationDB](install-fdb.md) | FDB 部署的完整原理与所有部署形态 |
+| 切换 MetaService 镜像、调资源、定制启动参数、调存活探测超时 | [配置 MetaService](config-ms.md) | `spec.metaService.*` 全量字段 |
+| 调 FE 资源、改 Follower 数量、自定义启动配置、配置访问模式(NodePort / LoadBalancer)、持久化存储 | [配置 FE](config-fe.md) | `spec.feSpec.*` 全量字段 |
+| 单组/多组计算组、限制资源、配置访问模式、缓存与日志的持久化 | [配置计算组](config-cg.md) | `spec.computeGroups[*]` 全量字段 |
+| 设置 root / 非 root 管理用户密码、Secret 凭证、挂载 Kerberos 认证文件 | [配置认证](config-cluster.md) | 集群级凭证与 Kerberos |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-fdb.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-fdb.md
index d6361c5904d..49763d97fde 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-fdb.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/install-fdb.md
@@ -2,29 +2,40 @@
{
"title": "部署 FoundationDB",
"language": "zh-CN",
- "description": "FoundationDB 是基于Apache 2.0开源协议的分布式强一致性存储结构化数据的数据库,Doris 存算分离模式使用 FoundationDB 作为元数据存储。Kubernetes 上部署存算分离集群需要提前部署 FoundationDB 服务,推荐两种部署方式:"
+ "description": "详细介绍在 Kubernetes 上使用 fdb-kubernetes-operator 部署 FoundationDB 集群的完整步骤,包括资源定义、Operator 部署、集群配置和状态验证。为 Doris 存算分离集群提供元数据存储能力。",
+ "keywords": ["Doris", "存算分离", "Kubernetes", "FoundationDB", "fdb-kubernetes-operator", "元数据存储", "K8s"]
}
---
-[FoundationDB](https://apple.github.io/foundationdb/#overview) 是基于Apache 2.0开源协议的分布式强一致性存储结构化数据的数据库,Doris 存算分离模式使用 FoundationDB 作为元数据存储。Kubernetes 上部署存算分离集群需要提前部署 FoundationDB 服务,推荐两种部署方式:
+[FoundationDB](https://apple.github.io/foundationdb/#overview) 是基于 Apache 2.0 开源协议的分布式强一致性存储结构化数据的数据库,Doris 存算分离模式使用 FoundationDB 作为元数据存储。
+
+Kubernetes 上部署存算分离集群需要提前部署 FoundationDB 服务,推荐两种部署方式:
+
- 在机器(包括物理机)上直接部署。机器直接部署 FoundationDB 请参考 Doris 存算分离官方文档[部署前准备部分](../../../compute-storage-decoupled/before-deployment)搭建 FoundationDB 集群。部署前请确保 FoundationDB 部署的机器和 Doris 所在的 Kubernetes 在同一个局域网内。
+
- 在 Kubernetes 上部署 FoundationDB。FoundationDB 官方提供 Kubernetes 上部署运维管理服务 [fdb-kubernetes-operator](https://github.com/FoundationDB/fdb-kubernetes-operator)。
## 在 Kubernetes 上部署 FoundationDB
+
在 Kubernetes 上部署 FoundationDB 分为 4 步:
+
1. 部署 FoundationDB 相关资源定义。
2. 部署 fdb-kubernetes-operator 服务。
3. 部署 FoundationDB 集群。
4. 确认 FoundationDB 状态。
### 第 1 步:部署 FoundationDB 相关资源定义
+
通过以下命令下发 FoundationDB 资源定义:
+
```shell
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbclusters.yaml
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbbackups.yaml
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbrestores.yaml
```
+
预期结果:
+
```shell
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbclusters.yaml
customresourcedefinition.apiextensions.k8s.io/foundationdbclusters.apps.foundationdb.org created
@@ -35,24 +46,35 @@ customresourcedefinition.apiextensions.k8s.io/foundationdbrestores.apps.foundati
```
### 第 2 步:部署 fdb-kubernetes-operator 服务
+
fdb-kubernetes-operator 仓库提供了以 IP 模式部署 FoundationDB 集群的部署样例。在 doris-operator 仓库中提供了以 FQDN 模式部署的 FoundationDB 集群样例,可以按需下载。
+
1. 下载部署样例
- - 从 fdb-kubernetes-operator 官方仓库下载
+
+ - 从 fdb-kubernetes-operator 官方仓库下载
fdb-kubernetes-operator 默认情况下使用 IP 模式部署 FoundationDB Cluster,可以下载 YAML 文件 [fdb-kubernetes-operator 默认部署](https://raw.githubusercontent.com/foundationdb/fdb-kubernetes-operator/main/config/samples/deployment.yaml)。如果使用 FQDN 部署模式,请按照官方文档[使用 DNS 部分](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/docs/manual/customization.md#using-dns)进行定制化使用域名模式。
+
```shell
wget -O fdb-operator.yaml https://raw.githubusercontent.com/foundationdb/fdb-kubernetes-operator/main/config/samples/deployment.yaml
```
- - 从 doris-operator 仓库下载
- doris-operator 仓库中制定化了以 fdb-kuberentes-operator 1.46.0 版本为基础的部署示例,可直接使用部署 FoundationDB cluster。
+
+ - 从 doris-operator 仓库下载
+ doris-operator 仓库中定制化了以 fdb-kubernetes-operator 1.46.0 版本为基础的部署示例,可直接使用部署 FoundationDB cluster。
+
```shell
wget https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/fdb-operator.yaml
```
-2. 部署 fdb-kubernetes-operator 服务
- 定制化 `fdb-kubernetes-operator` 的部署 yaml 后,使用如下命令部署 fdb-kubernetes-operator:
+
+2. 部署 fdb-kubernetes-operator 服务
+
+ 定制化 `fdb-kubernetes-operator` 的部署 yaml 后,使用如下命令部署 fdb-kubernetes-operator:
+
```shell
kubectl apply -f fdb-operator.yaml
```
- 预期结果:
+
+ 预期结果:
+
```shell
serviceaccount/fdb-kubernetes-operator-controller-manager created
clusterrole.rbac.authorization.k8s.io/fdb-kubernetes-operator-manager-clusterrole created
@@ -62,65 +84,84 @@ fdb-kubernetes-operator 仓库提供了以 IP 模式部署 FoundationDB 集群
deployment.apps/fdb-kubernetes-operator-controller-manager created
```
### 第 3 步:部署 FoundationDB 集群
+
在 [fdb-kubernetes-operator 仓库](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/config/samples/cluster.yaml)中提供了部署 FoundationDB 的部署样例,通过如下命令直接下载使用。
-1. 下载部署样例
- 从 FoundationDB 官方下载 IP 模式部署样例:
+
+1. 下载部署样例
+
+ 从 FoundationDB 官方下载 IP 模式部署样例:
+
```shell
wget https://raw.githubusercontent.com/foundationdb/fdb-kubernetes-operator/main/config/samples/cluster.yaml
```
+
2. 定制化部署样例
- - 环境可访问 dockerhub
- 根据官网提供的[用户手册](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/docs/manual/index.md)定制化部署终态。如果使用 FQDN 部署,请将 `routing.useDNSInClusterFile` 字段设置为 true,配置如下:
+
+ - 环境可访问 dockerhub
+ 根据官网提供的[用户手册](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/docs/manual/index.md)定制化部署终态。如果使用 FQDN 部署,请将 `routing.useDNSInClusterFile` 字段设置为 true,配置如下:
doris-operator 的官方仓库中提供了使用 [FQDN 部署 FoundationDB 的部署样例](https://github.com/apache/doris-operator/blob/master/doc/examples/disaggregated/fdb/)可直接下载使用。
+
```yaml
spec:
- routing:
- useDNSInClusterFile: true
+ routing:
+ useDNSInClusterFile: true
```
- - 私网环境
+
+ - 私网环境
在私网环境下,如果不能直接访问 dockerhub 可从 FoundationDB 的官方仓库中将需要的镜像下载,并推到私有仓库中。fdb-kubernetes-operator 依赖 [foundationdb/fdb-kubernetes-operator](https://hub.docker.com/r/foundationdb/fdb-kubernetes-operator), [foundationdb/foundationdb-kubernetes-sidecar](https://hub.docker.com/r/foundationdb/foundationdb-kubernetes-sidecar) 。
部署 FoundationDB 依赖的镜像是 [fdb-kubernetes-monitor](https://hub.docker.com/r/foundationdb/fdb-kubernetes-monitor/tags)。
- 推到私有仓库后,按照 fdb-kubernetes-operator 官方文档[定制化镜像配置](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/docs/manual/customization.md#customizing-the-foundationdb-image)说明进行配置。
+ 推到私有仓库后,按照 fdb-kubernetes-operator 官方文档[定制化镜像配置](https://github.com/FoundationDB/fdb-kubernetes-operator/blob/main/docs/manual/customization.md#customizing-the-foundationdb-image)说明进行配置。
可参考如下配置添加私有仓库镜像配置:
+
```yaml
spec:
- mainContainer:
- imageConfigs:
- - baseImage: foundationdb/fdb-kubernetes-monitor
- tag: 7.1.38
- sidecarContainer:
- imageConfigs:
- - baseImage: foundationdb/fdb-kubernetes-monitor
- tag: 7.1.38
- version: 7.1.38
+ mainContainer:
+ imageConfigs:
+ - baseImage: foundationdb/fdb-kubernetes-monitor
+ tag: 7.1.38
+ sidecarContainer:
+ imageConfigs:
+ - baseImage: foundationdb/fdb-kubernetes-monitor
+ tag: 7.1.38
+ version: 7.1.38
```
- 在 doris operator 仓库中,总结了 4 种 FoundationDB 的部署形态,[单副本模式最简部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster-single.yaml),[两副本模式最简部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster.yaml),[两副本生产部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/fdb_product.yaml),[两副本生产使用私有仓库镜像部署](https://raw.githubuse [...]
+
+ 在 doris-operator 仓库中,总结了 4 种 FoundationDB 的部署形态:[单副本模式最简部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster-single.yaml),[两副本模式最简部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster.yaml),[两副本生产部署](https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/fdb_product.yaml),[两副本生产使用私有仓库镜像部署](https://raw.githubus [...]
:::tip 提示
- 部署 FoundationDB 时,FoundationDBCluster 资源,`.spec.version` 必须配置,且为 FoundationDB 发布的版本号。
-- FoundationDB 基于 fdb-kubernetes-operator 部署,要求 Kubernetes 集群至少有三台宿主机才可满足生产环境高可用要求。
- :::
+- FoundationDB 基于 fdb-kubernetes-operator 部署,要求 Kubernetes 集群至少有三台宿主机才可满足生产环境高可用要求。
+:::
### 第 4 步:确认 FoundationDB 状态
+
FoundationDB 基于 fdb-kubernetes-operator 部署,可以通过如下命令查看 FoundationDB 集群状态:
+
```shell
kubectl get fdb
```
+
预期结果如下,若 `AVAILABLE` 为 `true` 则代表集群可用:
+
```shell
NAME GENERATION RECONCILED AVAILABLE FULLREPLICATION VERSION AGE
test-cluster 1 1 true true 7.1.26 13m
```
+
## 获取包含 FoundationDB 访问信息的 ConfigMap
+
使用 [fdb-kubernetes-operator](https://github.com/FoundationDB/fdb-kubernetes-operator) 部署 FoundationDB,会在部署的命名空间下生成一个特定的 ConfigMap 包含 FoundationDB 的访问信息。这个 ConfigMap 的名称为部署 FoundationDB 的资源名称加上 "-config"。使用如下命令查看 ConfigMap:
+
```shell
kubectl get configmap
```
+
预期结果:
+
```shell
test-cluster-config 5 15d
```
-:::tip 提示
-在 Kubernetes 上部署,清理 FoundationDBCluster 资源会导致元数据丢失,请慎重处理 FoundationDBCluster 资源。
+:::tip 提示
+在 Kubernetes 上部署,清理 FoundationDBCluster 资源会导致元数据丢失,请慎重处理 FoundationDBCluster 资源。
:::
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx
new file mode 100644
index 00000000000..e5c092b9adb
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/deploy-on-kubernetes/separating-storage-compute/intro.mdx
@@ -0,0 +1,45 @@
+---
+{
+ "title": "存算分离部署",
+ "language": "zh-CN",
+ "description": "在 Kubernetes 上部署存算分离架构的 Apache Doris 集群。"
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# 在 Kubernetes 上部署存算分离架构
+
+在 Kubernetes 上部署存算分离架构的 Doris 集群需要按顺序完成以下步骤。
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="1. 安装 FoundationDB"
+ description="安装 FoundationDB 作为元数据存储后端"
+ link="install-fdb"
+/>
+
+<GettingStartedCard
+ title="2. 配置 Meta Service"
+ description="配置 Meta Service 组件"
+ link="config-ms"
+/>
+
+<GettingStartedCard
+ title="3. 配置 Frontend"
+ description="配置 Doris Frontend (FE) 组件"
+ link="config-fe"
+/>
+
+<GettingStartedCard
+ title="4. 配置 Compute Group"
+ description="配置 Doris 计算组(Compute Group)"
+ link="config-cg"
+/>
+
+<GettingStartedCard
+ title="5. 配置集群"
+ description="应用集群级配置, 完成整体部署"
+ link="config-cluster"
+/>
+</div>
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/doris-operator-overview.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/doris-operator-overview.md
new file mode 100644
index 00000000000..cba3ca1bed9
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/doris-operator-overview.md
@@ -0,0 +1,121 @@
+---
+{
+ "title": "Doris Operator 简介",
+ "language": "zh-CN",
+ "description": "Doris Operator 是 Apache Doris 官方提供的 Kubernetes Operator,支持在 K8s 上自动化部署、扩缩容、滚动升级 Doris 集群。本文介绍架构原理、核心能力及部署指引。",
+ "keywords": [
+ "Doris Operator",
+ "Doris Kubernetes",
+ "K8s 部署 Doris",
+ "Kubernetes Operator",
+ "Doris 容器化",
+ "K8s Doris 部署"
+ ]
+}
+---
+
+为满足用户在 Kubernetes 平台上对 Doris 的高效部署和运维需求诞生的 [Kubernetes Operator](https://github.com/apache/doris-operator)(简称:Doris Operator),
+集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
+旨在实现 Doris 在 Kubernetes 上的高效管控,帮助用户减少运维管理和学习成本的同时,提供强大的功能和灵活的配置能力。
+
+Doris Operator 基于 Kubernetes CustomResourceDefinitions(CRD)实现了 Doris 在 Kubernetes 平台的配置、管理和调度。Doris Operator 能够根据用户自定义的期望状态,自动创建 Pods 及其他资源以启动服务。通过自动注册机制,可将所有启动的服务整合成一个完整的 Doris 集群。这一实现显著降低了在 Doris 集群中处理配置信息、节点发现与注册、访问通信及健康检查等生产环境必备操作的复杂性和学习成本。
+
+## Doris Operator 架构形态
+
+
+
+Doris Operator 的设计基于二层调度器的原理:
+
+- **第一层调度**:使用原生 StatefulSet 和 Service 管理 Pod,完全兼容标准 Kubernetes 集群
+- **第二层调度**:Doris Operator 监听 DorisCluster CRD 资源,将用户定义的集群规格转换为 StatefulSet 及其附属资源
+
+通过 kubectl 下发集群配置后,Doris Operator 自动完成 StatefulSet 创建、Pod 调度、服务注册等操作。
+
+Doris 集群的核心组件包括:
+
+| 组件 | 作用 |
+|------|------|
+| FE(Frontend) | 负责元数据管理、查询协调 |
+| BE(Backend) | 负责数据存储和查询执行 |
+| CN(Compute Node) | 负责计算加速(存算分离模式) |
+| Broker | 负责访问外部数据源 |
+
+## 关键能力
+
+- **终态部署**:
+
+ Kubernetes 采用终态运维模式来管理服务,而 Doris Operator 则定义了一种能够描述 Doris 集群的资源类型——DorisCluster。用户可以参考相关文档和使用示例,轻松配置所需的集群。
+ 用户通过 Kubernetes 的命令行工具 kubectl,可以将配置下发到 Kubernetes 集群中。Doris Operator 会自动构建所需集群,并实时更新集群状态至相应的资源中。这一过程确保了集群的高效管理与监控,极大地简化了运维操作。
+
+- **易扩展**:
+
+ Doris Operator 在基于云盘的环境中支持并发实时横向扩容。Doris 的所有组件服务均通过 Kubernetes 的 StatefulSet 进行部署和管理。在部署或扩容时,采用 StatefulSet 的 Parallel 模式创建 Pods,这样理论上可以在启动一个节点的时间内启动所有副本。每个副本的启动互不干扰,当某个服务启动失败时,其他服务的启动不会受到影响。
+ Doris Operator 采用并发模式启动服务,并内置分布式架构,极大简化了服务扩展的过程。用户只需设置副本数量,即可轻松完成扩容,彻底解放了运维操作的复杂性。
+
+- **无感变更**:
+
+ 在分布式环境中,服务重启可能会引发服务的暂时不稳定。尤其对于数据库这类对稳定性要求极高的服务而言,如何在重启过程中保证服务的稳定性是一个非常重要的课题。Doris 在 Kubernetes 上通过以下三种机制确保服务重启过程中的稳定性,从而实现业务在重启和升级过程中无感知的体验。
+
+ 1. 优雅退出
+ 2. 滚动重启
+ 3. 主动停止查询分配
+
+- **宿主机系统配置**:
+
+ 在某些场景中,需要配置宿主机系统参数来达到 Apache Doris 的理想性能。而在容器化场景下,宿主机的部署不确定和参数修改难度高给用户带来挑战。为解决该问题,Doris Operator 通过利用 Kubernetes 的初始化容器,实现了宿主机参数的可配置化。
+ Doris Operator 允许用户配置在宿主机上执行的命令,并通过初始化容器使其生效。为了提升可用性,Doris Operator 抽象了 Kubernetes 初始化容器的配置方式,使宿主机命令的设置更加简单直观。
+
+- **持久化配置**:
+
+ Doris Operator 采用 Kubernetes StorageClass 模式为各个服务提供存储配置。它允许用户自定义挂载目录,在自定义启动配置时,如果修改了存储目录,可以在自定义资源中将该目录设置为持久化位置,从而使服务使用容器内指定的目录来存储数据。
+
+- **运行时调试**:
+
+ 容器化服务对于 Trouble Shooting 来说最大挑战之一是如何在运行时进行调试。Doris Operator 在追求可用性和易用性的同时,也为问题定位提供了更便利的条件。在 Doris 的基础镜像中,预置了多种用于问题定位的工具。当需要实时查看状态时,可以通过 kubectl 提供的 exec 命令进入容器,使用内置工具进行故障排查。
+ 当服务因未知原因无法启动时,Doris Operator 提供了 Debug 运行模式。当一个 Pod 被设置为 Debug 启动模式时,容器将自动进入运行状态。这时可通过 `exec` 命令进入容器,手动启动服务并进行问题定位。详细请参考 [此文档](../../install/deploy-on-kubernetes/integrated-storage-compute/cluster-operation#服务-crash-情况下如何进入容器)
+
+## 兼容性
+
+Doris Operator 开发按照标准的 K8s 规范进行,兼容所有标准 K8s 平台,包含主流云厂商提供的和基于标准自建的 K8s 平台和用户自建平台。
+
+### 云厂商兼容性
+
+在主流云厂商的容器化服务平台上,完全兼容。使用 Doris Operator 环境准备及使用建议,可参考以下文档:
+
+- [阿里云](./on-alibaba)
+
+- [AWS](./on-aws)
+
+## 适用场景
+
+Doris Operator 适用于以下场景:
+
+- 需要在 Kubernetes 上快速部署和管理 Doris 集群
+- 有弹性扩缩容需求,需要根据业务负载动态调整节点数量
+- 需要统一管理多套 Doris 环境的开发和运维团队
+- 希望降低 Doris 集群运维复杂度的用户
+
+## 安装及使用
+
+### 前提条件
+
+部署前需要对宿主机系统进行检查参考 [操作系统检查](../../install/preparation/os-checking.md)
+
+### 部署 Doris Operator
+
+详细安装文档可参考 Doris Operator 安装的 [存算一体版本](../../install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md) 或 [存算分离版本](../../install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md)
+
+## 常见问题
+
+### Q: Doris Operator 和手动在 Kubernetes 上部署 Doris 有什么区别?
+
+Doris Operator 通过 CRD 自动化管理集群生命周期,包括创建、扩缩容、升级、故障恢复等,无需手动执行 kubectl 命令操作每个 Pod。
+
+### Q: 存算一体和存算分离版本如何选择?
+
+存算一体版本适用于中小规模集群,部署简单;存算分离版本适用于大规模、弹性扩展需求场景。具体可参考 [存算一体部署文档](../../install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator.md) 和 [存算分离部署文档](../../install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster.md)。
+
+### Q: Doris Operator 支持哪些 Kubernetes 版本?
+
+兼容 Kubernetes 1.19 及以上版本,包括阿里云 ACK、AWS EKS、公有云私有化部署等标准 K8s 平台。
+
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/intro.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/intro.mdx
new file mode 100644
index 00000000000..bdfe6d705b4
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/intro.mdx
@@ -0,0 +1,33 @@
+---
+{
+ "title": "Doris Operator",
+ "language": "zh-CN",
+ "description": "通过 Doris Operator 在 Kubernetes 上管理 Apache Doris 集群。"
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# Doris Operator
+
+Doris Operator 是在 Kubernetes 上以原生方式部署和管理 Apache Doris 集群的工具。建议先阅读概览, 再根据云厂商选择对应的安装指南。
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="Doris Operator 概览"
+ description="了解 Doris Operator 的能力以及在 Kubernetes 上管理 Doris 的方式"
+ link="doris-operator-overview"
+/>
+
+<GettingStartedCard
+ title="在阿里云上部署"
+ description="在阿里云容器服务 Kubernetes 版(ACK)上安装 Doris Operator"
+ link="on-alibaba"
+/>
+
+<GettingStartedCard
+ title="在 AWS 上部署"
+ description="在 Amazon Elastic Kubernetes Service(EKS)上安装 Doris Operator"
+ link="on-aws"
+/>
+</div>
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-alibaba.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-alibaba.md
new file mode 100644
index 00000000000..35208bfa79b
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-alibaba.md
@@ -0,0 +1,201 @@
+---
+{
+ "title": "阿里云容器服务部署 Doris 集群指南",
+ "sidebar_label": "阿里云容器服务部署建议",
+ "language": "zh-CN",
+ "description": "阿里云 ACK/ACS 部署 Doris 建议指南,包括环境检查、配置调优、镜像仓库配置、常见问题排查。解决 BE 节点无法启动、swap 未禁用、大页内存配置等问题。"
+}
+---
+
+## 阿里云容器服务概述
+
+阿里云提供两种容器服务:
+
+| 服务 | 说明 | 适用场景 |
+|------|------|----------|
+| **ACK** (Container Service for Kubernetes) | 购买 ECS 实例后托管的容器化服务,可获得完全访问控制权限 | 需要控制底层 ECS、需特权模式部署 BE 节点 |
+| **ACS** (Container Service ACS) | 以 K8s 为界面的云计算服务,按需计费,无需关注底层 ECS | 纯弹性算力、按需付费 |
+
+本文档分别介绍这两种服务上使用 Doris Operator 部署集群的方法。
+
+## ACK 部署
+
+ACK 属于购买 ECS 实例后托管的容器化服务,可获得完全访问控制权限进行系统参数调整。使用 Alibaba Cloud Linux 3 镜像时,当前系统参数完全满足 Doris 运行需求;其他镜像可通过 K8s 特权模式在容器内修正参数。
+
+**使用 ACK + Doris Operator 部署时,大多数 ECS 默认配置即可满足要求,未满足的参数 Operator 会自行修正。**
+
+### 场景一:已有集群
+
+如果容器服务集群已创建,按以下步骤检查并修正参数:
+
+#### 步骤 1:检查 swap 状态
+
+```bash
+swapon --show
+```
+
+**预期结果**:无输出(swap 已禁用)。如有关闭 swap 的输出,需执行 `swapoff -a` 并重启。
+
+#### 步骤 2:检查最大文件句柄数
+
+```bash
+ulimit -n
+```
+
+**预期结果**:不小于 65535。如低于此值,需在 `/etc/security/limits.conf` 中添加:
+
+```shell
+* soft nofile 1000000
+* hard nofile 1000000
+```
+
+#### 步骤 3:检查虚拟内存区域数量
+
+```bash
+sysctl vm.max_map_count
+```
+
+**预期结果**:不小于 262144。如需修改,执行 `sysctl -w vm.max_map_count=2000000`。
+
+#### 步骤 4:检查透明大页
+
+```bash
+cat /sys/kernel/mm/transparent_hugepage/enabled
+```
+
+**预期结果**:包含 `[never]`。如为 `[always]`,需执行:
+
+```bash
+echo never > /sys/kernel/mm/transparent_hugepage/enabled
+echo never > /sys/kernel/mm/transparent_hugepage/defrag
+```
+
+详细说明请参考:[操作系统检查](../../install/preparation/os-checking.md)
+
+### 场景二:新建集群
+
+如需创建新集群,可在阿里云容器服务 ACK 控制台点击”创建集群”。在**节点池配置**步骤的”实例预自定义数据”中添加以下脚本:
+
+```shell
+#!/bin/bash
+chmod +x /etc/rc.d/rc.local
+
+# 关闭防火墙
+echo “sudo systemctl stop firewalld.service” >> /etc/rc.d/rc.local
+echo “sudo systemctl disable firewalld.service” >> /etc/rc.d/rc.local
+
+# 设置虚拟内存区域数量
+echo “sysctl -w vm.max_map_count=2000000” >> /etc/rc.d/rc.local
+
+# 禁用 swap
+echo “swapoff -a” >> /etc/rc.d/rc.local
+
+# 设置文件句柄限制
+current_limit=$(ulimit -n)
+desired_limit=1000000
+config_file=”/etc/security/limits.conf”
+if [ “$current_limit” -ne “$desired_limit” ]; then
+ echo “* soft nofile 1000000” >> “$config_file”
+ echo “* hard nofile 1000000” >> “$config_file”
+fi
+```
+
+集群启动后重启节点即可生效。
+
+## ACS 部署
+
+ACS 是以 K8s 为界面的云计算服务,提供按需计费的弹性算力。无需关注底层 ECS,但 BE 节点启动需要特权模式来修改系统参数(如 `vm.max_map_count`)。
+
+:::tip 提示
+如果当前集群无法使用特权模式,则无法启动 BE 节点。建议选择 ACK + 宿主机的形式部署。
+:::
+
+### 步骤 1:配置镜像仓库
+
+ACS 推荐使用配套的阿里云镜像仓库 [Container Registry (ACR)](https://www.alibabacloud.com/en/product/container-registry),分为个人版和企业版。
+
+将 Doris 官方镜像迁移到阿里云镜像仓库后,如使用私有镜像需创建 secret:
+
+```bash
+kubectl create secret docker-registry image-hub-secret \
+ --docker-server={your-server} \
+ --docker-username={your-username} \
+ --docker-password={your-pwd}
+```
+
+### 步骤 2:配置 DCR 使用私有镜像
+
+在 DorisCluster CR 中配置 `imagePullSecrets`:
+
+```yaml
+spec:
+ feSpec:
+ replicas: 1
+ image: <your-acr-registry>/selectdb-test/doris.fe-ubuntu:3.0.3
+ imagePullSecrets:
+ - name: image-hub-secret
+ beSpec:
+ replicas: 3
+ image: <your-acr-registry>/selectdb-test/doris.be-ubuntu:3.0.3
+ imagePullSecrets:
+ - name: image-hub-secret
+ systemInitialization:
+ initImage: <your-acr-registry>/selectdb-test/alpine:latest
+```
+
+### 步骤 3:配置 Service
+
+ACS 不存在常规 Node 概念,Service 限制使用 NodePort 模式。可用以下模式:
+
+#### ClusterIP 模式(默认)
+
+Operator 默认网络模式,参考 [Kubernetes Service 文档](https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)。
+
+#### 负载均衡模式
+
+**方式一:通过 DCR 配置 annotations**
+
+```yaml
+feSpec:
+ replicas: 3
+ image: <your-image>
+ service:
+ type: LoadBalancer
+ annotations:
+ service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
+```
+
+**方式二:通过 ACS 控制台托管**
+
+1. DCR 中 serviceType 设为 ClusterIP(默认)
+2. 在 ACS 控制台:容器计算服务 ACS → 集群列表 → 集群 → 服务 → 创建
+3. 选择新建的 LB 进行绑定。该 Service 随 Doris Operator 管理,不受 Operator 管控。
+
+---
+
+## 常见问题
+
+### Q: BE 节点无法启动怎么办?
+
+检查以下几点:
+1. **特权模式未开启**:ACS 需要特权模式修改 `vm.max_map_count`,如无法开启请使用 ACK
+2. **镜像拉取失败**:检查 `imagePullSecrets` 是否正确配置
+3. **虚拟内存区域数量不足**:执行 `sysctl vm.max_map_count`,确保不小于 262144
+
+### Q: 集群节点显示为 virtual-kubelet 正常吗?
+
+正常。ACS 使用虚拟节点调度容器,节点名类似 `virtual-kubelet-cn-hongkong-d` 是 ACS 的正常行为。
+
+### Q: 阿里云地域未开启特权模式怎么办?
+
+提交工单申请开启 ACS 特权模式能力加白。
+
+### Q: 如何选择 ACK 还是 ACS?
+
+| 场景 | 推荐 |
+|------|------|
+| 需要完全控制底层 ECS | ACK |
+| 纯弹性按需付费,无需关注底层 | ACS |
+| BE 节点需要特权模式 | ACK |
+
+
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-aws.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-aws.md
new file mode 100644
index 00000000000..268426dd578
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/doris-operator/on-aws.md
@@ -0,0 +1,162 @@
+---
+title: 在 AWS EKS 上部署 Doris 集群
+sidebar_label: AWS EKS 部署建议
+language: zh-CN
+description: "AWS EKS 部署 Doris 完整指南:集群模式选择(自治 vs 非自治)、系统参数检查与调优、特权模式配置、存储计算资源规划。解决 vm.max_map_count 不足、swap 未禁用、透明大页未关闭、文件句柄数限制等问题。"
+---
+
+## AWS 容器服务 EKS 概述
+
+AWS EKS 提供两种运行模式:
+
+| 模式 | 说明 | 适用场景 |
+|------|------|----------|
+| **非自治模式**(推荐) | 标准 EKS 模式,可完全控制底层 EC2 实例 | 生产环境、有状态服务、Doris 集群 |
+| **自治模式** | 内置节点池,资源自动弹性扩缩 | 无状态服务、轻量级工作负载 |
+
+:::tip 提示
+不推荐使用自治模式。自治模式的计算资源通过内置节点池动态分配和回收,可能导致 Doris 集群节点漂移,对生产环境造成安全隐患。
+:::
+
+## 场景一:新建集群
+
+### 步骤 1:创建 EKS 集群(非自治模式)
+
+在 EKS 控制台创建集群时,选择**非自治模式**。
+
+**推荐配置**:
+- 操作系统镜像:Amazon Linux 2
+- 节点组:使用独立节点组部署 Doris
+
+### 步骤 2:配置节点组启动脚本
+
+通过 EC2 > 启动模板 > 创建启动模板来设置节点池的启动模板。在模板中添加以下脚本,自动化配置系统参数:
+
+```bash
+#!/bin/bash
+chmod +x /etc/rc.d/rc.local
+
+# 关闭防火墙
+echo "sudo systemctl stop firewalld.service" >> /etc/rc.d/rc.local
+echo "sudo systemctl disable firewalld.service" >> /etc/rc.d/rc.local
+
+# 设置虚拟内存区域数量
+echo "sysctl -w vm.max_map_count=2000000" >> /etc/rc.d/rc.local
+
+# 禁用 swap
+echo "swapoff -a" >> /etc/rc.d/rc.local
+
+# 设置文件句柄限制
+current_limit=$(ulimit -n)
+desired_limit=1000000
+config_file="/etc/security/limits.conf"
+if [ "$current_limit" -ne "$desired_limit" ]; then
+ echo "* soft nofile 1000000" >> "$config_file"
+ echo "* hard nofile 1000000" >> "$config_file"
+fi
+```
+
+集群启动后重启节点即可生效。
+
+### 步骤 3:配置 IAM 角色权限
+
+保证 EKS 节点的 IAM 角色有以下权限:
+
+- AmazonEC2FullAccess
+- AmazonEKSWorkerNodePolicy
+- AmazonEKS_CNI_Policy
+- AmazonSSMManagedInstanceCore
+
+### 步骤 4:配置存储
+
+生产环境推荐使用 [EBS](https://aws.amazon.com/ebs) 存储。在集群配置界面添加 EBS 存储插件,并确保插件拥有相应的[角色权限](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)。
+
+---
+
+## 场景二:已有集群
+
+### 步骤 1:检查 swap 状态
+
+```bash
+swapon --show
+```
+
+**预期结果**:无输出(swap 已禁用)。如有关闭 swap 的输出,需执行 `swapoff -a` 并重启。
+
+### 步骤 2:检查最大文件句柄数
+
+```bash
+ulimit -n
+```
+
+**预期结果**:不小于 65535。如低于此值,需在 `/etc/security/limits.conf` 中添加:
+
+```bash
+* soft nofile 1000000
+* hard nofile 1000000
+```
+
+### 步骤 3:检查虚拟内存区域数量
+
+```bash
+sysctl vm.max_map_count
+```
+
+**预期结果**:不小于 262144。如需修改,执行 `sysctl -w vm.max_map_count=2000000`。
+
+### 步骤 4:检查透明大页
+
+```bash
+cat /sys/kernel/mm/transparent_hugepage/enabled
+```
+
+**预期结果**:包含 `[never]`。如为 `[always]`,需执行:
+
+```bash
+echo never > /sys/kernel/mm/transparent_hugepage/enabled
+echo never > /sys/kernel/mm/transparent_hugepage/defrag
+```
+
+---
+
+## 镜像仓库访问
+
+如需访问 DockerHub 公共镜像仓库,需要为集群添加 `Amazon VPC CNI`、`CoreDNS`、`kube-proxy` 等网络插件,并为集群配置 VPC 时选择可访问公共环境的子网。
+
+---
+
+## 特权模式说明
+
+EKS 下,EC2 实例完全属于当前 EKS 用户,不存在不同用户集群在资源池中相互影响的情况。
+
+- **若您的 EKS 允许特权模式**(默认允许):无需关心系统参数,Doris Operator 默认会为 Doris 运行调整系统参数。
+- **若不允许特权模式**:则需要在宿主机上进行以下系统参数调整:
+
+| 参数 | 命令 | 检查方式 |
+|------|------|----------|
+| 虚拟内存区域数量 | `sysctl -w vm.max_map_count=2000000` | `sysctl vm.max_map_count` |
+| 透明大页 | 关闭 | 检查是否包含 `never` |
+| 最大文件句柄数 | 修改 `/etc/security/limits.conf` | `ulimit -n` |
+| swap | `swapoff -a` | `swapon --show`(无输出则已禁用)|
+
+详细说明请参考:[操作系统检查](../../install/preparation/os-checking.md)
+
+---
+
+## 常见问题
+
+### Q: 自治模式有哪些风险?
+
+自治模式的计算资源通过内置节点池动态分配和回收,每次资源申请或释放都会进行现有资源的重新整合。对于 StatefulSet 有状态服务尤其是启动耗时长和 Doris 这种有严格分布式协同要求的服务,可能造成共享节点池的所有服务动荡,导致整个 Doris 集群全部节点漂移。
+
+### Q: 已有集群如何配置新的节点组?
+
+建议为 Doris 集群配置独立的节点组。涉及 BE 运行的系统设置时,可能需要调整宿主机的系统参数。创建节点组时可通过 EC2 > 启动模板 > 创建启动模板来设置,并通过模板注入脚本自动化配置 EC2 实例的系统环境。
+
+### Q: EKS 节点需要哪些 IAM 权限?
+
+需要 AmazonEC2FullAccess、AmazonEKSWorkerNodePolicy、AmazonEKS_CNI_Policy 和 AmazonSSMManagedInstanceCore 权限。
+
+### Q: 如何验证系统参数已正确配置?
+
+参考场景二中的检查步骤,逐项验证 swap、文件句柄数、虚拟内存区域数量、透明大页等参数是否满足要求。
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/intro.mdx b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/intro.mdx
new file mode 100644
index 00000000000..a568e84fee8
--- /dev/null
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/intro.mdx
@@ -0,0 +1,52 @@
+---
+{
+ "title": "安装与部署",
+ "language": "zh-CN",
+ "description": "选择合适的方式安装并部署 Apache Doris。"
+}
+---
+
+import GettingStartedCard from '@site/src/components/getting-started-card/getting-started-card';
+
+# 安装与部署
+
+本章节将指导您完成 Apache Doris 的安装与部署。请先选择适合您需求的部署模式,然后参考对应的部署指南。
+
+## 部署前准备
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="选择部署模式"
+ description="对比存算一体与存算分离、手动部署与 Kubernetes 部署、云上部署的差异"
+ link="choosing-deployment-mode"
+/>
+
+<GettingStartedCard
+ title="安装准备"
+ description="检查环境、规划集群规模、验证操作系统要求"
+ link="preparation/env-checking"
+/>
+</div>
+
+## 部署方式
+
+<div className="cards-grid">
+<GettingStartedCard
+ title="手动部署"
+ description="在物理机或虚拟机上直接安装 Apache Doris"
+ link="deploy-manually/intro"
+/>
+
+<GettingStartedCard
+ title="Kubernetes 部署"
+ description="使用 Doris Operator 在 Kubernetes 上部署 Apache Doris"
+ link="deploy-on-kubernetes/intro"
+/>
+
+<GettingStartedCard
+ title="云上部署"
+ description="在 AWS 等公有云平台上部署 Apache Doris"
+ link="deploy-on-cloud/doris-on-aws"
+/>
+</div>
+
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/cluster-planning.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/cluster-planning.md
index e3df946519b..4930c91cdcd 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/cluster-planning.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/cluster-planning.md
@@ -2,50 +2,60 @@
{
"title": "集群规划",
"language": "zh-CN",
- "description": "在部署 Doris 时,可以根据业务选择存算一体或存算分离架构:"
+ "description": "部署 Doris 前,需选择架构模式、规划端口与节点数量。"
}
---
+<!-- 知识类型: 架构选型 + 配置参考(Reference)-->
+<!-- 适用场景: 部署规划 / 架构选型 / 容量规划-->
+
## 架构规划
-在部署 Doris 时,可以根据业务选择存算一体或存算分离架构:
+<!-- 知识类型: 架构选型决策 -->
-- [存算一体](../../gettingStarted/what-is-apache-doris.md#存算一体):存算一体架构部署简单,性能优异,不依赖与外部的共享存储设备,适合不需要极致弹性扩缩容的业务场景;
+根据业务需求选择架构模式:
-- [存算分离](../../gettingStarted/what-is-apache-doris.md#存算分离):存算分离架构依赖于共享存储,实现了计算资源的弹性伸缩,适合需要动态调整计算资源的业务场景。
+| 架构模式 | 适用场景 | 依赖 |
+| -------- | -------- | ---- |
+| [存算一体](../../features-architecture/system-architecture#coupled-architecture) | 不需要极致弹性扩缩容 | 无需共享存储 |
+| [存算分离](../../features-architecture/system-architecture#decoupled-architecture) | 需要动态调整计算资源 | 依赖共享存储 |
## 端口规划
-Doris 的各个实例通过网络进行通信,其正常运行需要网络环境提供以下端口。管理员可以根据实际环境自行调整 Doris 的端口配置:
+<!-- 知识类型: 网络配置参数 -->
-| 实例名称 | 端口名称 | 默认端口 | 通信方向 | 说明 |
-| -------- | ---------------------- | -------- | -------------------------- | ----------------------------------------------------- |
-| BE | be_port | 9060 | FE -> BE | BE 上 Thrift Server 的端口,用于接收来自 FE 的请求 |
-| BE | webserver_port | 8040 | BE <-> BE | BE 上的 HTTP Server 端口 |
-| BE | heartbeat_service_port | 9050 | FE -> BE | BE 上的心跳服务端口(Thrift),用于接收来自 FE 的心跳 |
-| BE | brpc_port | 8060 | FE <-> BE,BE <-> BE | BE 上的 BRPC 端口,用于 BE 之间的通信 |
-| FE | http_port | 8030 | FE <-> FE,Client <-> FE | FE 上的 HTTP Server 端口 |
-| FE | rpc_port | 9020 | BE -> FE,FE <-> FE | FE 上的 Thrift Server 端口,每个 FE 的配置需保持一致 |
-| FE | query_port | 9030 | Client <-> FE | FE 上的 MySQL Server 端口 |
-| FE | edit_log_port | 9010 | FE <-> FE | FE 上的 bdbje 通信端口 |
+Doris 实例间通过网络通信,管理员可根据环境调整端口配置:
-## 节点数量规划
+| 实例 | 端口名称 | 默认端口 | 通信方向 | 说明 |
+| ---- | -------- | -------- | -------- | ---- |
+| BE | be_port | 9060 | FE → BE | Thrift Server,接收 FE 请求 |
+| BE | webserver_port | 8040 | BE ↔ BE | HTTP Server |
+| BE | heartbeat_service_port | 9050 | FE → BE | 心跳服务(Thrift) |
+| BE | brpc_port | 8060 | FE ↔ BE,BE ↔ BE | BRPC 通信 |
+| FE | http_port | 8030 | FE ↔ FE,Client ↔ FE | HTTP Server |
+| FE | rpc_port | 9020 | BE → FE,FE ↔ FE | Thrift Server,各 FE 需一致 |
+| FE | query_port | 9030 | Client ↔ FE | MySQL Server |
+| FE | edit_log_port | 9010 | FE ↔ FE | bdbje 通信 |
-### FE 节点数量
+## 节点数量规划
-FE 节点主要负责用户请求的接入、查询解析规划、元数据管理及节点管理等工作。
+<!-- 知识类型: 节点容量规划 -->
-对于生产集群,一般建议部署至少 3 个节点的 FE 以实现高可用环境。FE 节点分为以下两种角色:
+### FE 节点数量
-- **Follower 节点**:参与选举操作,当 Master 节点宕机时,会选择一个可用的 Follower 节点成为新的 Master。
-
-- **Observer 节点**:仅从 Leader 节点同步元数据,不参与选举,可用于横向扩展以提升元数据的读服务能力。
+FE 负责用户请求接入、查询规划、元数据管理及节点管理。
-通常情况下,建议部署至少 3 个 Follower 节点。在高并发的场景中,可以通过增加 Observer 节点的数量来提高集群的连接数。
+| 节点类型 | 作用 | 生产环境建议 |
+| -------- | ---- | ------------ |
+| Follower | 参与选举,Master 宕机时接替 | ≥ 3 个 |
+| Observer | 仅同步元数据,扩展读服务能力 | 按需增加 |
### BE 节点数量
-BE 节点负责数据的存储与计算。在生产环境中,为了数据的可靠性和容错性,通常会使用 3 副本存储数据,因此建议部署至少 3 个 BE 节点。
+BE 负责数据存储与计算。生产环境使用 3 副本保证可靠性。
-BE 节点支持横向扩容,通过增加 BE 节点的数量,可以有效提升查询的性能和并发处理能力。
+| 建议 | 说明 |
+| ---- | ---- |
+| ≥ 3 个 BE | 保证 3 副本可靠存储(存算一体模式。存算分离模式下,可以是 0 个或多个 BE。)|
+| 支持横向扩容 | 增加节点可提升查询性能与并发 |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/env-checking.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/env-checking.md
index b5c354aa53d..9e6bebc3e25 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/env-checking.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/env-checking.md
@@ -2,122 +2,114 @@
{
"title": "软硬件环境检查",
"language": "zh-CN",
- "description": "部署 Doris 时,需要对软硬件环境进行以下检查:"
+ "description": "部署 Doris 前,需检查硬件配置、服务器规格、硬盘空间及 Java 环境。"
}
---
-部署 Doris 时,需要对软硬件环境进行以下检查:
+<!-- 知识类型: 参考手册(Reference)-->
+<!-- 适用场景: 部署前检查 / 硬件规划 / 环境验收-->
-- 硬件环境检查
-
-- 服务器建议配置
-
-- 硬盘空间计算
-
-- Java 环境检查
+本文档为部署 Doris 提供软硬件环境参考。
## 硬件环境检查
-在硬件环境检查中,要对以下硬件条件进行检查:
+<!-- 知识类型: 硬件要求 -->
-| 检查项 | 建议配置 |
-| -------- | ---------------------- |
-| CPU | 支持 AVX2 指令集。 |
-| 内存 | 建议至少 CPU 4 倍。 |
-| 存储 | 推荐 SSD 硬盘。 |
-| 文件系统 | ext4 或 xfs 文件系统。 |
-| 网卡 | 10GbE 网卡。 |
+| 检查项 | 最低配置 | 推荐配置 |
+| -------- | -------- | -------- |
+| CPU | 支持 AVX2 指令集 | 支持 AVX2 指令集 |
+| 内存 | CPU 核数 × 4 GB | CPU 核数 × 8 GB |
+| 存储 | SSD 或 HDD | SSD |
+| 文件系统 | ext4 或 xfs | ext4 或 xfs |
+| 网卡 | 1GbE | 10GbE + 链路聚合 |
### CPU 检查
-当安装 Doris 时,建议选择支持 AVX2 指令集的机器,以利用 AVX2 的向量化能力实现查询向量化加速。
-
-运行以下命令,有输出结果,及表示机器支持 AVX2 指令集。
+Doris 利用 AVX2 向量化能力加速查询,建议选择支持 AVX2 指令集的机器。
```bash
cat /proc/cpuinfo | grep avx2
```
-如果机器不支持 AVX2 指令集,可以使用 no AVX2 的 Doris 安装包进行部署。
+若有输出,则表示支持 AVX2。若不支持,可使用 no AVX2 的 Doris 安装包。
### 内存检查
-Doris 没有强制的内存限制。一般在生产环境中,可以根据以下建议选择内存大小:
+<!-- 知识类型: 内存配置参考 -->
-| 组件 | 推荐内存配置 |
-| ---- | ------------------------------------------------------------ |
-| FE | 建议至少 16GB 以上。 |
-| BE | 建议内存至少是 CPU 核数的 4 倍(例如,16 核机器至少配置 64G 内存)。在内存是 CPU 核数 8 倍时,会得到更好的性能。 |
+Doris 无强制内存限制,生产环境建议:
-### 存储检查
+| 组件 | 最低内存 | 推荐内存 |
+| ---- | -------- | -------- |
+| FE | 16 GB | 64 GB+ |
+| BE | CPU 核数 × 4 GB | CPU 核数 × 8 GB |
-Doris 支持将数据存储在 SSD、HDD 或对象存储中。
+### 存储检查
-在以下几种场景中建议使用 SSD 作为数据存储:
+<!-- 知识类型: 存储选型参考 -->
-- 大规模数据量下的高并发点查场景
-
-- 大规模数据量下的高频数据更新场景
+| 场景 | 推荐存储类型 |
+| ---- | ------------ |
+| 大规模数据高并发点查 | SSD |
+| 大规模数据高频更新 | SSD |
+| 冷数据归档 | HDD / 对象存储 |
### 文件系统检查
-Doris 推荐使用 EXT4 或 XFS 文件系统:
-
-- **EXT4 文件系统**:具有良好的稳定性、性能和较低的碎片化问题。
-
-- **XFS 文件系统**:在处理大规模数据和高并发写操作时表现优越,适合高吞吐量应用。
+| 文件系统 | 适用场景 |
+| -------- | -------- |
+| ext4 | 通用场景,稳定性好 |
+| xfs | 大规模数据、高并发写 |
### 网卡检查
-Doris 的计算过程涉及数据分片和并行处理,可能产生网络资源开销。为了最大程度优化 Doris 性能并降低网络资源开销,强烈建议在部署时选用万兆网卡(10 Gigabit Ethernet,即 10GbE)或者更快网络。如果有多块网卡,建议使用链路聚合方式将多块网卡绑定成一块网卡,提高网络带宽、冗余性和复杂均衡的能力。
+推荐 10GbE 或更快网络。多网卡建议使用链路聚合提升带宽与冗余性。
## 服务器建议配置
-Doris 支持运行和部署在 x86-64 架构的服务器平台或 ARM64 架构的服务器上。
+<!-- 知识类型: 服务器规格参考 -->
-- **开发及测试环境**
+支持 x86-64 和 ARM64 架构。
- 开发与测试环境中可以混合部署 FE 与 BE 实例,遵循以下规则:
+### 开发及测试环境
- * 验证测试环境中可以在一台服务器上混合部署一个 FE 与 BE,但不建议部署多个 FE 与 BE 实例;
+FE 与 BE 可混合部署:
- * 如果需要 3 副本数据,至少需要 3 台服各部署一个 BE 实例。
+- 单台服务器部署 1 个 FE + 1 个 BE(不推荐多实例)
+- 3 副本数据:至少 3 台服务器各部署 1 个 BE
- 服务器规格建议如下:
-
- | 模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
- | -------- | ----- | ------ | ----------------- | ------- | ---------- |
- | Frontend | 8 核 + | 8 GB+ | SSD 或 SATA,10 GB+ | 1GbE/10GbE 网卡 | 1 |
- | Backend | 8 核 + | 16 GB+ | SSD 或 SATA,50 GB+ | 1GbE/10GbE 网卡 | 1 |
+| 模块 | 最低 CPU | 最低内存 | 最低磁盘 | 网络 | 实例数 |
+| -------- | -------- | -------- | ----------------- | -------------- | ------ |
+| Frontend | 8 核 | 8 GB | SSD/SATA,10 GB+ | 1GbE/10GbE | 1 |
+| Backend | 8 核 | 16 GB | SSD/SATA,50 GB+ | 1GbE/10GbE | 1 |
-- **生产环境**
-
- 生产环境中建议 FE 与 BE 实例独立部署,遵循以下规则:
+### 生产环境
- * 如果环境资源紧张,将 FE 与 BE 混部在一台服务器上,建议 FE 与 BE 数据放在不同的硬盘;
+FE 与 BE 建议独立部署。资源紧张时混部需将数据放在不同硬盘。
- * BE 节点可以配置多块硬盘存储,在一个 BE 实例上绑定多块 HDD 或 SSD 盘。
-
- 服务器规格建议如下:
-
- | 模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
- | -------- | ------ | ------ | ------------------- | ---- | ---------- |
- | Frontend | 16 核 + | 64 GB+ | SSD,100GB+ | 10GbE 网卡 | 1 |
- | Backend | 16 核 + | 64 GB+ | SSD 或 SATA,100GB+ | 10GbE 网卡 | 3 |
+| 模块 | 推荐 CPU | 推荐内存 | 推荐磁盘 | 网络 | 实例数 |
+| -------- | -------- | -------- | ----------------- | ------- | ------ |
+| Frontend | 16 核+ | 64 GB+ | SSD,100 GB+ | 10GbE | 1 |
+| Backend | 16 核+ | 64 GB+ | SSD/SATA,100 GB+ | 10GbE | 3 |
## 硬盘空间计算
-在 Doris 集群中,FE 主要用于元数据存储,包括元数据 edit log 和 image。BE 的磁盘空间主要用于存放数据,需要根据业务需求计算。
+<!-- 知识类型: 存储容量计算 -->
-| 组件 | 磁盘空间说明 |
-| ------ | ----------------------------------------------------------------------------------------------------- |
-| FE | 建议预留 100GB 以上的存储空间,使用 SSD 硬盘。 |
-| BE | Doris 默认 LZ4 压缩方式进行存储,压缩比在 0.3 - 0.5 左右磁盘空间需要按照总数据量 \* 3(3 副本)计算需要预留出 40% 空间用作后台 compaction 以及临时数据的存储 |
+| 组件 | 建议空间 | 说明 |
+| ---- | -------- | ---- |
+| FE | 100 GB+ | SSD,用于元数据存储 |
+| BE | 总数据量 × 3 × 1.4 | LZ4 压缩比 0.3-0.5,3 副本 + 40% 后台 compaction 空间 |
+
+> 上述 BE 的存储空间计算主要面向**存算一体**部署模式。在**存算分离**部署模式下,全部数据存储于共享存储,本地磁盘只负责缓存,所以磁盘大小取决于热数据的大小。
## Java 环境检查
-Doris 的所有进程都依赖 Java。
+<!-- 知识类型: Java 版本要求 -->
+
+Doris 所有进程依赖 Java。
-- 在 2.1(含)版本之前,请使用 Java 8,推荐版本:`jdk-8u352` 之后版本。
-
-- 从 3.0(含)版本之后,请使用 Java 17,推荐版本:`jdk-17.0.10` 之后版本。
+| Doris 版本 | Java 版本 | 推荐版本 |
+| ---------- | --------- | -------- |
+| 2.1(含)之前 | Java 8 | jdk-8u352+ |
+| 3.0(含)之后 | Java 17 | jdk-17.0.10+ |
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/os-checking.md b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/os-checking.md
index f072b231222..951f2d86612 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/os-checking.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-next/current/install/preparation/os-checking.md
@@ -2,41 +2,39 @@
{
"title": "操作系统检查",
"language": "zh-CN",
- "description": "在部署 Doris 时,需要对以下操作系统项进行检查:"
+ "description": "部署 Doris 前,需按清单检查并配置操作系统环境。"
}
---
-在部署 Doris 时,需要对以下操作系统项进行检查:
-
-- 确保关闭 swap 分区
-
-- 确保系统关闭透明大页
-
-- 确保系统有足够大的虚拟内存区域
-
-- 确保 CPU 不使用省电模式
-
-- 确保网络连接溢出时自动重置新连接
-
-- 确保 Doris 相关端口畅通或关闭系统防火墙
-
-- 确保系统有足够大的打开文件句柄数
-
-- 确定部署集群机器安装 NTP 服务
+<!-- 知识类型: 操作指南(Guide)-->
+<!-- 适用场景: 部署前检查 / 系统配置 / 环境验收-->
+
+部署 Doris 前,需完成以下操作系统检查与配置:
+
+| 检查项 | 目的 |
+|--------|------|
+| 关闭 swap 分区 | 避免内核策略影响性能 |
+| 关闭透明大页 (THP) | 防止内存碎片与性能波动 |
+| 增大虚拟内存区域 | 避免文件句柄不足 |
+| 禁用 CPU 省电模式 | 保证高负载下稳定性能 |
+| 网络连接溢出重置 | 避免高并发下连接挂起 |
+| 端口畅通 / 关闭防火墙 | 保证组件间通信 |
+| 增大文件句柄数 | 支撑大量表数据文件 |
+| 安装 NTP 服务 | 保证元数据时间精度 < 5000ms |
## 关闭 swap 分区
-在部署 Doris 时,建议关闭 swap 分区。swap 分区是内核发现内存紧张时,会按照自己的策略将部分内存数据移动到配置的 swap 分区,由于内核策略不能充分了解应用的行为,会对 Doris 性能造成较大影响。所以建议关闭。
+<!-- 知识类型: 操作步骤 -->
-通过以下命令可以临时或者永久关闭。
+关闭 swap 可避免内核将数据移动到 swap 分区,影响 Doris 性能。
-临时关闭,下次机器启动时,swap 还会被打开。
+**临时关闭**(重启后失效):
```bash
swapoff -a
```
-永久关闭,使用 Linux root 账户,注释掉 `/etc/fstab` 中的 swap 分区,重启即可彻底关闭 swap 分区。
+**永久关闭**:注释掉 `/etc/fstab` 中的 swap 行,重启生效。
```bash
# /etc/fstab
@@ -47,18 +45,20 @@ tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
```
-## 关闭系统透明大页
+## 关闭透明大页
+
+<!-- 知识类型: 操作步骤 -->
-在高负载低延迟的场景中,建议关闭操作系统透明大页(Transparent Huge Pages, THP),避免其带来的性能波动和内存碎片问题,确保 Doris 能够稳定高效地使用内存。
+关闭 THP(Transparent Huge Pages)可减少内存碎片,保证 Doris 稳定使用内存。
-使用以下命令临时关闭透明大页:
+**临时关闭**:
```bash
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
```
-如果需要永久关闭透明大页,可以使用以下命令,在下一次宿主机重启后生效:
+**永久关闭**:
```bash
cat >> /etc/rc.d/rc.local << EOF
@@ -68,72 +68,76 @@ EOF
chmod +x /etc/rc.d/rc.local
```
-## 增加虚拟内存区域
+## 增大虚拟内存区域
-为了保证 Doris 有足够的内存映射区域来处理大量数据,需要修改 VMA(虚拟内存区域)。如果没有足够的内存映射区域,Doris 在启动或运行时可能会遇到 `Too many open files` 或类似的错误。
+<!-- 知识类型: 操作步骤 -->
-通过以下命令可以永久修改虚拟内存区域至少为 2000000,并立即生效:
+增大 VMA(虚拟内存区域)避免 Doris 启动或运行时报 `Too many open files` 错误。
```bash
cat >> /etc/sysctl.conf << EOF
vm.max_map_count = 2000000
EOF
-# Take effect immediately
sysctl -p
```
## 禁用 CPU 省电模式
-在部署 Doris 时检修关闭 CPU 的省电模式,以确保 Doris 在高负载时提供稳定的高性能,避免由于 CPU 频率降低导致的性能波动、响应延迟和系统瓶颈,提高 Doris 的可靠性和吞吐量。如果您的 CPU 不支持 Scaling Governor,可以跳过此项配置。
+<!-- 知识类型: 操作步骤 -->
-通过以下命令可以关闭 CPU 省电模式:
+禁用省电模式可保证高负载下 CPU 频率稳定。若 CPU 不支持 Scaling Governor,可跳过。
```bash
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
```
-## 网络连接溢出时自动重置新连接
+## 网络连接溢出时重置
-在部署 Doris 时,需要确保在 TCP 连接的发送缓冲区溢出时,连接会被立即中断,以防止 Doris 在高负载或高并发情况下出现缓冲区阻塞,避免连接被长时间挂起,从而提高系统的响应性和稳定性。
+<!-- 知识类型: 操作步骤 -->
-通过以下命令可以永久设置系统自动重置新链接,并立即生效:
+启用 `tcp_abort_on_overflow` 可在连接溢出时立即中断,避免高负载下连接长时间挂起。
```bash
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_abort_on_overflow=1
EOF
-# Take effect immediately
sysctl -p
```
-## 相关端口畅通
+## 端口畅通
-如果发现端口不通,可以试着关闭防火墙,确认是否是本机防火墙造成。如果是防火墙造成,可以根据配置的 Doris 各组件端口打开相应的端口通信。
+<!-- 知识类型: 操作步骤 -->
+
+若端口不通,排查防火墙:
```bash
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
```
-## 增加系统的最大文件句柄数
+或根据 Doris 端口配置开放相应端口。
+
+## 增大文件句柄数
-Doris 由于依赖大量文件来管理表数据,所以需要将系统对程序打开文件数的限制调高。
+<!-- 知识类型: 操作步骤 -->
-通过以下命令可以调整最大文件句柄数。在调整后,需要重启会话以生效配置:
+Doris 依赖大量文件管理表数据,需调高文件句柄限制。
```bash
-vi /etc/security/limits.conf
+vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
```
-## 安装并配置 NTP 服务
+修改后需重启会话生效。
+
+## 安装 NTP 服务
-Doris 的元数据要求时间精度要小于 5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
+<!-- 知识类型: 操作步骤 -->
-通常情况下,可以通过配置 NTP 服务保证各节点时钟同步。
+保证集群所有机器时钟同步,元数据时间精度需 < 5000ms。
```bash
sudo systemctl start ntpd.service
diff --git a/sidebars-next.ts b/sidebars-next.ts
index 021996e909b..7bb916c8a9d 100644
--- a/sidebars-next.ts
+++ b/sidebars-next.ts
@@ -5,7 +5,7 @@ const sidebars: SidebarsConfig = {
{
type: 'category',
label: 'Getting Started',
- link: {type: 'doc', id: 'getting-started/getting-started'},
+ link: {type: 'doc', id: 'getting-started/intro'},
collapsed: true,
items: [
'getting-started/what-is-apache-doris',
@@ -25,7 +25,7 @@ const sidebars: SidebarsConfig = {
{
type: 'category',
label: 'Features & Architecture',
- link: {type: 'doc', id: 'features-architecture/getting-started'},
+ link: {type: 'doc', id: 'features-architecture/intro'},
collapsed: true,
items: [
'features-architecture/system-architecture',
@@ -37,8 +37,10 @@ const sidebars: SidebarsConfig = {
{
type: 'category',
label: 'Installation & Deployment',
+ link: {type: 'doc', id: 'install/intro'},
collapsed: true,
items: [
+ 'install/choosing-deployment-mode',
{
type: 'category',
label: 'Installation Preparation',
@@ -50,7 +52,8 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
- label: 'Cluster Deployment Manually',
+ label: 'Deploying Manually',
+ link: {type: 'doc', id: 'install/deploy-manually/intro'},
items: [
'install/deploy-manually/integrated-storage-compute-deploy-manually',
'install/deploy-manually/separating-storage-compute-deploy-manually',
@@ -59,10 +62,23 @@ const sidebars: SidebarsConfig = {
{
type: 'category',
label: 'Deploying on Kubernetes',
+ link: {type: 'doc', id: 'install/deploy-on-kubernetes/intro'},
items: [
+ {
+ type: 'category',
+ label: 'Doris Operator',
+ link: {type: 'doc', id: 'install/doris-operator/intro'},
+ items: [
+ 'install/doris-operator/doris-operator-overview',
+ 'install/doris-operator/on-alibaba',
+ 'install/doris-operator/on-aws',
+ ],
+ },
{
type: 'category',
label: 'Integrated Storage Compute',
+ link: {type: 'doc', id: 'install/deploy-on-kubernetes/integrated-storage-compute/install-doris-cluster'},
+ collapsed: true,
items: [
'install/deploy-on-kubernetes/integrated-storage-compute/install-doris-operator',
'install/deploy-on-kubernetes/integrated-storage-compute/install-config-cluster',
@@ -74,13 +90,14 @@ const sidebars: SidebarsConfig = {
{
type: 'category',
label: 'Separating Storage Compute',
+ link: {type: 'doc', id: 'install/deploy-on-kubernetes/separating-storage-compute/intro'},
+ collapsed: true,
items: [
'install/deploy-on-kubernetes/separating-storage-compute/install-fdb',
- 'install/deploy-on-kubernetes/separating-storage-compute/config-cluster',
'install/deploy-on-kubernetes/separating-storage-compute/config-ms',
'install/deploy-on-kubernetes/separating-storage-compute/config-fe',
'install/deploy-on-kubernetes/separating-storage-compute/config-cg',
- 'install/deploy-on-kubernetes/separating-storage-compute/install-doris-cluster',
+ 'install/deploy-on-kubernetes/separating-storage-compute/config-cluster',
],
},
],
@@ -90,44 +107,6 @@ const sidebars: SidebarsConfig = {
label: 'Deploying on Cloud',
items: ['install/deploy-on-cloud/doris-on-aws'],
},
- {
- type: 'category',
- label: 'Doris Operator',
- items: [
- 'ecosystem/doris-operator/doris-operator-overview',
- 'ecosystem/doris-operator/on-alibaba',
- 'ecosystem/doris-operator/on-aws',
- ],
- },
- {
- type: 'category',
- label: 'Compute-Storage Decoupled',
- items: [
- 'compute-storage-decoupled/overview',
- 'compute-storage-decoupled/before-deployment',
- 'compute-storage-decoupled/compilation-and-deployment',
- 'compute-storage-decoupled/managing-storage-vault',
- 'compute-storage-decoupled/managing-compute-cluster',
- {
- type: 'category',
- label: 'File Cache',
- items: [
- 'compute-storage-decoupled/file-cache/file-cache',
- 'compute-storage-decoupled/file-cache/file-cache-internals',
- ],
- },
- {
- type: 'category',
- label: 'Read-Write Separation',
- items: [
- 'compute-storage-decoupled/rw/read-write-separation',
- 'compute-storage-decoupled/rw/file-cache-rw-compute-group-best-practice',
- ],
- },
- 'compute-storage-decoupled/recycler',
- 'compute-storage-decoupled/upgrade',
- ],
- },
],
},
{
diff --git a/src/components/getting-started-card/getting-started-card.tsx b/src/components/getting-started-card/getting-started-card.tsx
index 0a8d49e6801..c245405d7af 100644
--- a/src/components/getting-started-card/getting-started-card.tsx
+++ b/src/components/getting-started-card/getting-started-card.tsx
@@ -1,5 +1,6 @@
import React from 'react';
import Link from '@docusaurus/Link';
+import {useDoc} from '@docusaurus/plugin-content-docs/client';
import './style.scss';
interface CardProps {
@@ -9,9 +10,36 @@ interface CardProps {
icon?: string;
}
+interface DocLikeMetadata {
+ permalink: string;
+ slug: string;
+ sourceDirName: string;
+}
+
+function resolveDocRelativeLink(link: string, metadata: DocLikeMetadata): string {
+ if (!link) return link;
+ if (/^(https?:)?\/\//.test(link)) return link;
+ if (link.startsWith('/')) return link;
+
+ const permalink = metadata.permalink.replace(/\/+$/, '');
+ const slug = metadata.slug.replace(/\/+$/, '');
+ const docsRoot = slug && permalink.endsWith(slug)
+ ? permalink.slice(0, -slug.length)
+ : permalink;
+
+ const sourceDir = metadata.sourceDirName && metadata.sourceDirName !== '.'
+ ? metadata.sourceDirName
+ : '';
+ const baseDir = (sourceDir ? `${docsRoot}/${sourceDir}/` : `${docsRoot}/`).replace(/\/{2,}/g, '/');
+
+ const url = new URL(link, `http://_${baseDir}`);
+ return url.pathname + url.search + url.hash;
+}
+
export default function GettingStartedCard({ title, description, link, icon }: CardProps) {
+ const { metadata } = useDoc();
return (
- <Link to={link} className="getting-started-card">
+ <Link to={resolveDocRelativeLink(link, metadata)} className="getting-started-card">
{icon && <div className="card-icon">{icon}</div>}
<div className="card-content">
<h3>{title}</h3>
diff --git a/static/images/ecomsystem/doris-operator.jpg b/static/images/ecomsystem/doris-operator.jpg
new file mode 100644
index 00000000000..27dd13592e9
Binary files /dev/null and b/static/images/ecomsystem/doris-operator.jpg differ
diff --git a/static/images/next/install/doris-operator.jpg b/static/images/next/install/doris-operator.jpg
new file mode 100644
index 00000000000..6ebd7bedebd
Binary files /dev/null and b/static/images/next/install/doris-operator.jpg differ
diff --git a/website-quality-governance/docs-next-implementation-plan.md b/website-quality-governance/docs-next-implementation-plan.md
deleted file mode 100644
index 69dda3d2384..00000000000
--- a/website-quality-governance/docs-next-implementation-plan.md
+++ /dev/null
@@ -1,706 +0,0 @@
-# `docs-next` 实施文档(A + 灰度方案)
-
-> 目标: 在不影响线上 `/docs/` 显示的前提下,搭建一套全新的 `/docs-next/`,独立维护新版信息架构。
-> 范围: **仅 English + 中文**, **仅 `current` + `4.x`** 两个版本。
-> 关联文档: [sidebar-information-architecture-analysis.md](./sidebar-information-architecture-analysis.md) — 信息架构分析与新结构蓝图
-
----
-
-## 一、目标与非目标
-
-### 目标
-1. ✅ 在仓库内并存两套文档站: `/docs/`(旧, 当前线上)与 `/docs-next/`(新, 灰度);
-2. ✅ 旧站持续迭代不受影响(PR 继续合 `docs/`、`versioned_docs/`、`i18n/zh-CN/.../current` 等老路径);
-3. ✅ 新站独立修改, 不显示在主导航, 公开但不被搜索引擎索引;
-4. ✅ 新站只支持 `current` (Dev) + `4.x`, 中英文双语;
-5. ✅ 准备就绪后, 一行配置切换主入口到 `/docs-next/`, 并在两边页面顶部加"切换到新版/旧版"按钮;
-6. ✅ 老书签 `/docs/...` 100% 长期可用。
-
-### 非目标(明确不做)
-- ❌ 不维护 `docs-next` 的 3.x / 2.1 / 2.0 / 1.2 版本;老版本依然只在 `/docs/` 提供;
-- ❌ 不维护 `docs-next` 的日文(ja)版本;ja 仍走当前 `ja-source` 独立流程;
-- ❌ 不在第一阶段移动文档源文件位置(保持 docId 一致, 不破坏老书签);
-- ❌ 不在第一阶段并入 Algolia / kapa.ai 搜索新内容(避免搜索结果重复)。
-
----
-
-## 二、整体架构
-
-实施后的关键目录:
-
-```
-doris-website/
-├── docs/ # 旧版当前 (current) 源 — 保持不动
-├── versioned_docs/version-4.x/ # 旧版 4.x 源 — 保持不动
-├── versioned_docs/version-3.x/ # 旧版 3.x — 保持不动 (新版不维护)
-├── versioned_docs/version-2.1/ # 同上
-├── versions.json # 旧站版本列表 — 保持不动
-├── sidebars.ts # 旧站 sidebar — 保持不动
-├── versioned_sidebars/ # 旧站 versioned sidebar — 保持不动
-├── i18n/zh-CN/docusaurus-plugin-content-docs/ # 旧站中文 — 保持不动
-│
-├── docs-next/ # 🆕 新版 current 源
-├── next_versioned_docs/version-4.x/ # 🆕 新版 4.x 源
-├── next_versions.json # 🆕 ["4.x", "current"]
-├── sidebars-next.ts # 🆕 新版 sidebar (顶层 + current)
-├── next_versioned_sidebars/ # 🆕 新版 versioned sidebar
-│ └── version-4.x-sidebars.json
-└── i18n/zh-CN/docusaurus-plugin-content-docs-next/ # 🆕 新版中文
- ├── current/
- ├── current.json
- ├── version-4.x/
- └── version-4.x.json
-```
-
-`docusaurus.config.js` 中通过**第二个 `content-docs` 插件实例**接入, id = `next`, routeBasePath = `/docs-next`。
-
-URL 映射:
-
-| 路径 | 内容来源 | 说明 |
-|------|---------|------|
-| `/docs/` | 旧站, presets.classic.docs | 默认入口(灰度期内不变) |
-| `/docs/4.x/...` | `versioned_docs/version-4.x/` | 老书签全部命中这里 |
-| `/docs-next/` | 新站, plugin id = next | 默认指向 4.x |
-| `/docs-next/4.x/...` | `next_versioned_docs/version-4.x/` | 新版 4.x |
-| `/docs-next/dev/...` | `docs-next/` | 新版 current |
-| `/zh-CN/docs/...` | i18n 旧 | 不变 |
-| `/zh-CN/docs-next/...` | i18n 新 | 新增 |
-
----
-
-## 三、阶段划分
-
-| 阶段 | 时长 | 目标 | 是否影响线上 |
-|------|------|------|-------------|
-| **阶段 0**: 准备 | 0.5 天 | 评审本文档、对齐 owner | 无 |
-| **阶段 1**: 框架搭建 | 1 天 | 拷源文件、加配置、build 通过、`/docs-next/` 可访问 | 无(只是多了一个 URL) |
-| **阶段 2**: 内容重构 | 数周–数月 | 在 `docs-next/` 中按新 IA 调整 sidebar、改写少量文档 | 无 |
-| **阶段 3**: 灰度公开 | 1–3 个月 | 在 `/docs/` 顶部加 "试试新版" banner, 默认入口仍为旧版 | 旧版多一条 banner, 否则无影响 |
-| **阶段 4**: 切换默认 | 0.5 天 | 主导航 / 主页 Docs 按钮指向 `/docs-next/` | 默认入口变更, 旧 URL 仍可用 |
-| **阶段 5**: 收尾** | 视情况 | 决定是否做 C/D 类(移动文件 + 301)将 `/docs/` 重定向到 `/docs-next/`, 或长期并存 | 视决策 |
-
-> **本文档主要覆盖阶段 0 – 阶段 4**。阶段 5 涉及文件迁移与 301 redirect, 等灰度结果出来再决策。
-
----
-
-## 四、阶段 1: 框架搭建(详细步骤)
-
-### 4.1 拷贝源文件
-
-> **原则**: 第一阶段不做任何文件名/路径修改, 完全镜像现有 4.x 与 current 内容, 保证 `docs-next` 第一次 build 能通过, 之后再增量修改 sidebar。
-
-```bash
-cd /Users/morningman/workspace/git/doris-website
-
-# (1) English 源
-cp -r docs docs-next
-mkdir -p next_versioned_docs
-cp -r versioned_docs/version-4.x next_versioned_docs/version-4.x
-
-# (2) 中文源
-mkdir -p i18n/zh-CN/docusaurus-plugin-content-docs-next
-cp -r i18n/zh-CN/docusaurus-plugin-content-docs/current \
- i18n/zh-CN/docusaurus-plugin-content-docs-next/current
-cp i18n/zh-CN/docusaurus-plugin-content-docs/current.json \
- i18n/zh-CN/docusaurus-plugin-content-docs-next/current.json
-cp -r i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x \
- i18n/zh-CN/docusaurus-plugin-content-docs-next/version-4.x
-cp i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x.json \
- i18n/zh-CN/docusaurus-plugin-content-docs-next/version-4.x.json
-```
-
-### 4.2 创建 `next_versions.json`
-
-```bash
-echo '["4.x", "current"]' > next_versions.json
-```
-
-> **重要**: 这里只列 `current` 和 `4.x`, 没有 3.x / 2.1 / 2.0 / 1.2 — 这是用户要求。
-
-### 4.3 创建 `sidebars-next.ts`(current 顶层)
-
-第一步先**完整复制 `sidebars.ts` 的内容**到 `sidebars-next.ts`, 保证 build 不会因 docId 不匹配失败。后续再按新 IA 增量修改。
-
-```bash
-cp sidebars.ts sidebars-next.ts
-```
-
-### 4.4 创建 `next_versioned_sidebars/version-4.x-sidebars.json`
-
-直接拷贝旧版 4.x 的 sidebar:
-
-```bash
-mkdir -p next_versioned_sidebars
-cp versioned_sidebars/version-4.x-sidebars.json \
- next_versioned_sidebars/version-4.x-sidebars.json
-```
-
-### 4.5 在 `docusaurus.config.js` 中加入新插件实例
-
-在 `plugins:` 数组中追加(建议放在 `releases` 实例之后):
-
-```js
-[
- 'content-docs',
- /** @type {import('@docusaurus/plugin-content-docs').Options} */
- ({
- id: 'next',
- path: 'docs-next',
- routeBasePath: 'docs-next',
- sidebarPath: require.resolve('./sidebars-next.ts'),
- includeCurrentVersion: true,
- // 关键: 只编译 current + 4.x, 不动 3.x / 2.1 等
- onlyIncludeVersions: ['current', '4.x'],
- lastVersion: '4.x', // 默认进入 4.x
- versions: {
- current: {
- label: 'Dev',
- path: 'dev',
- banner: 'unreleased',
- },
- '4.x': {
- label: '4.x',
- path: '4.x',
- banner: 'none',
- badge: false,
- },
- },
- // 灰度期内不被搜索引擎索引, 防止与旧站内容判重
- // 注意: 此选项在页面 <head> 注入 noindex, 不进 sitemap
- // 上线灰度后页面公开可访问, 但不会出现在搜索结果
- // 阶段 4 切换默认时可去掉此项
- // (Docusaurus v3 起内置)
- // 见: https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs#noindex
- }),
-],
-```
-
-> **关键参数解释**:
-> - `id: 'next'` — Docusaurus 自动按 `next_versioned_docs/`、`next_versions.json`、`i18n/<locale>/docusaurus-plugin-content-docs-next/` 寻找文件。
-> - `onlyIncludeVersions: ['current', '4.x']` — 即使 `next_versions.json` 中只有这两项, 这里再次显式锁定, 让任何人误加版本也不会生效。
-> - `lastVersion: '4.x'` — 决定 `/docs-next/` 直接进入哪个版本。
-
-### 4.6 文档级 noindex(灰度期防 SEO 重复)
-
-在阶段 4 之前, `docs-next/` 的全部文档应当不被搜索引擎索引。两种实现方式, 选其一:
-
-**方式 A(推荐): 文档级 frontmatter**
-
-写一个一次性脚本, 给 `docs-next/` 与 `next_versioned_docs/version-4.x/` 下所有 `.md` / `.mdx` 文件 frontmatter 加入:
-
-```yaml
----
-draft: false
-unlisted: true # 不进 sitemap, 不被搜索引擎索引, URL 仍可访问
----
-```
-
-`unlisted: true` 是 Docusaurus v3 内置能力, 完全符合需求。
-
-**方式 B: 全站 robots.txt**
-
-在 `static/robots.txt` 中加入:
-
-```
-User-agent: *
-Disallow: /docs-next/
-Disallow: /zh-CN/docs-next/
-```
-
-方式 A 更精细(每篇可单独控制), 方式 B 更省事。**建议组合使用**: 先 robots.txt 兜底, 后续如有特定文档需要先曝光再去除其 unlisted。
-
-### 4.7 站内搜索(search-local)暂不索引 docs-next
-
-修改 `docusaurus.config.js` 的 `themes`:
-
-```js
-themes: [
- [
- '@yang1666204/docusaurus-search-local',
- {
- // ... 其他参数不变
- // 灰度期保持只索引旧版
- docsRouteBasePath: ['docs', 'ja/docs', 'zh-CN/docs'],
- // 阶段 4 切换默认时, 替换为下面这行:
- // docsRouteBasePath: ['docs-next', 'zh-CN/docs-next', 'docs', 'zh-CN/docs', 'ja/docs'],
- },
- ],
-],
-```
-
-### 4.8 sitemap 排除 docs-next
-
-在 `presets.classic.sitemap.createSitemapItems` 里追加过滤:
-
-```js
-const filteredItems = items.filter(item => {
- const pathname = new URL(item.url).pathname.replace(/\/+$/, '');
- if (['/search', '/ja/search', '/zh-CN/search'].includes(pathname)) return false;
- // 灰度期不进 sitemap
- if (pathname.startsWith('/docs-next') || pathname.startsWith('/zh-CN/docs-next')) {
- return false;
- }
- return true;
-});
-```
-
-### 4.9 本地验证
-
-```bash
-yarn install
-# 仅 English 快速验证
-DOCS_VERSIONS="current,4.x" yarn start
-# 浏览器访问:
-# http://localhost:3000/docs/4.x/gettingStarted/what-is-apache-doris (旧站正常)
-# http://localhost:3000/docs-next/4.x/gettingStarted/what-is-apache-doris (新站可访问)
-
-# 中文验证
-yarn start --locale zh-CN
-# 访问 http://localhost:3000/zh-CN/docs-next/4.x/gettingStarted/what-is-apache-doris
-```
-
-### 4.10 完整构建验证
-
-```bash
-yarn build 2>&1 | tee build.log
-# 确认产物中:
-ls build/docs-next/4.x/gettingStarted/
-ls build/zh-CN/docs-next/4.x/gettingStarted/
-# 确认 sitemap 中没有 docs-next:
-grep -c "docs-next" build/sitemap.xml # 应为 0
-```
-
-### 4.11 阶段 1 完成标志(DoD)
-
-- [ ] `yarn build` 通过且 0 broken link warning(与 main 分支基线一致);
-- [ ] `/docs/4.x/...` 与 `/docs-next/4.x/...` 内容相同, 但侧边栏来源不同;
-- [ ] 中文站 `/zh-CN/docs/...` 与 `/zh-CN/docs-next/...` 都可访问;
-- [ ] sitemap 不含 `/docs-next/` 路径;
-- [ ] 站内搜索结果不包含 `/docs-next/` 内容;
-- [ ] 主导航的 "Docs" 按钮**仍然**指向 `/docs/4.x/...`(未切换)。
-
----
-
-## 五、阶段 2: 内容重构日常工作流
-
-阶段 1 完成后, 仓库进入**双轨期**, 以下是日常工作的规则。
-
-### 5.1 旧站维护规则(不变)
-
-- 任何对 `current` / `4.x` 的修改, 仍按现有流程: 修改 `docs/` 或 `versioned_docs/version-4.x/` + 中文 i18n。
-- 这部分修改**不会**自动同步到 `docs-next/`, 由新版 owner 决定哪些回灌。
-- 老版本(3.x / 2.1 / 2.0 / 1.2)仍然在旧站维护, 不进入新版。
-
-### 5.2 新站修改规则
-
-- 新版任何调整只动 `docs-next/`、`next_versioned_docs/`、`sidebars-next.ts`、`next_versioned_sidebars/`、`i18n/zh-CN/docusaurus-plugin-content-docs-next/`;
-- 不要修改 `docs/`、`versioned_docs/`、`sidebars.ts`、`versioned_sidebars/`、`i18n/zh-CN/docusaurus-plugin-content-docs/` —— 这些是旧站的;
-- 信息架构调整原则: **第一阶段只动 sidebar, 不动文件**。即只在 `sidebars-next.ts` / `next_versioned_sidebars/version-4.x-sidebars.json` 内调整 docId 的层级和顺序, 不动 docId 本身和源文件位置。
-
-### 5.3 文档差异同步策略
-
-旧站每周/每月都有 PR 进入 `docs/`, 新站要不要同步?建议:
-
-| 旧站修改类型 | 是否同步到 docs-next |
-|-------------|--------------------|
-| 笔误、链接修复、小段落调整 | **不主动同步**, 灰度结束后批量 rebase |
-| 大功能新增(新章节) | 评估后**手动同步**到 docs-next, 顺便按新 IA 归位 |
-| Bug 修复(带回灌价值) | **手动同步** |
-| 老版本(3.x/2.1)专属修改 | **不同步**(新版不维护老版本) |
-
-**自动化建议(可选)**: 写一个脚本 `scripts/diff-docs-next.sh`, 列出 `docs/` 比 `docs-next/` 新的提交(基于 `git log --diff-filter=AM -- docs/`), 每周 review 一次决定回灌哪些。
-
-### 5.4 CI 校验
-
-新增一个 CI job, 专门 build `docs-next`:
-
-```yaml
-# .github/workflows/docs-next-build.yml
-name: docs-next build check
-on:
- pull_request:
- paths:
- - 'docs-next/**'
- - 'next_versioned_docs/**'
- - 'next_versioned_sidebars/**'
- - 'sidebars-next.ts'
- - 'next_versions.json'
- - 'i18n/zh-CN/docusaurus-plugin-content-docs-next/**'
- - 'docusaurus.config.js'
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - run: yarn install
- - run: DOCS_VERSIONS="current,4.x" yarn build
- - run: |
- test -d build/docs-next/4.x
- test -d build/zh-CN/docs-next/4.x
-```
-
-> 这个 job 在 PR 只动 `docs/` 时不会触发, 节省 CI 时间。
-
----
-
-## 六、阶段 3: 灰度公开 — 加 banner
-
-### 6.1 在旧站顶部加"试试新版导航"banner
-
-在 `docusaurus.config.js` 的 `themeConfig.announcementBar` 已经被占用(slack 公告), 不适合再用。改为**Swizzle**一个组件, 仅在 `/docs/...` 路径下显示。
-
-最简实现: 创建 `src/theme/DocPageWrapper/index.tsx`:
-
-```tsx
-import React from 'react';
-import { useLocation } from '@docusaurus/router';
-
-const NEW_DOCS_BANNER_KEY = 'doris-docs-next-banner-dismissed';
-
-export default function DocPageBanner() {
- const location = useLocation();
- const [dismissed, setDismissed] = React.useState(false);
- React.useEffect(() => {
- setDismissed(localStorage.getItem(NEW_DOCS_BANNER_KEY) === '1');
- }, []);
-
- // 仅在 /docs/ 或 /zh-CN/docs/ 等老路径下显示
- const isLegacyDocs = /^\/(?:zh-CN\/|ja\/)?docs\//.test(location.pathname);
- const isNextDocs = /^\/(?:zh-CN\/|ja\/)?docs-next\//.test(location.pathname);
- if (!isLegacyDocs || isNextDocs || dismissed) return null;
-
- // 把当前 URL 的 /docs/ 替换为 /docs-next/, docId 相同则可命中同一篇文档
- const nextUrl = location.pathname.replace('/docs/', '/docs-next/');
-
- return (
- <div style={{
- background: '#11A679', color: '#fff',
- padding: '8px 16px', textAlign: 'center', fontSize: 14,
- }}>
- 🆕 We're trialing a new docs structure.
- {' '}
- <a href={nextUrl} style={{ color: '#fff', textDecoration: 'underline', fontWeight: 600 }}>
- Try it now →
- </a>
- <button
- onClick={() => {
- localStorage.setItem(NEW_DOCS_BANNER_KEY, '1');
- setDismissed(true);
- }}
- style={{
- marginLeft: 16, background: 'transparent', border: '1px solid #fff',
- color: '#fff', borderRadius: 4, padding: '2px 8px', cursor: 'pointer',
- }}
- >
- Dismiss
- </button>
- </div>
- );
-}
-```
-
-挂载方式: Swizzle `DocRoot/Layout` 或在 `src/theme/Layout/index.tsx` 中包一层。具体取决于希望 banner 出现在哪一层(建议在 `DocRoot` 下, 只对 docs 页面显示):
-
-```bash
-yarn swizzle @docusaurus/theme-classic DocRoot/Layout -- --eject
-```
-
-然后在 swizzled 的 `DocRoot/Layout/index.tsx` 顶部插入 `<DocPageBanner />`。
-
-### 6.2 在新站也加一个反向 banner
-
-让用户能从新版**切回旧版**。同一个组件 `DocPageBanner` 已经处理了 `isNextDocs` 的判断, 加一段相反逻辑即可。或者写 `<DocNextBanner />` 单独管理。
-
-```tsx
-if (isNextDocs && !isLegacyDocs) {
- const legacyUrl = location.pathname.replace('/docs-next/', '/docs/');
- return (
- <div style={{ background: '#666', color: '#fff', padding: '6px 16px', fontSize: 13, textAlign: 'center' }}>
- You're viewing the new docs (beta).
- {' '}
- <a href={legacyUrl} style={{ color: '#fff', textDecoration: 'underline' }}>
- Back to current docs
- </a>
- </div>
- );
-}
-```
-
-### 6.3 阶段 3 完成标志
-
-- [ ] 用户访问 `/docs/4.x/...` 看到顶部绿色 banner, 点击跳转到 `/docs-next/4.x/...` 同一篇文档;
-- [ ] 用户访问 `/docs-next/...` 看到顶部灰色 banner, 可一键返回旧版;
-- [ ] banner 可手动关闭, localStorage 记忆;
-- [ ] Matomo 事件埋点统计 banner 点击率(可选, 用于评估灰度效果)。
-
----
-
-## 七、阶段 4: 切换默认入口
-
-灰度反馈良好后, 一次性切换默认入口。所有变更都很小, 在一个 PR 完成:
-
-### 7.1 主导航与主页 Docs 按钮指向新版
-
-`docusaurus.config.js`:
-
-```diff
- {
- position: 'left',
- label: 'Docs',
-- to: `/docs/${DEFAULT_VERSION}/gettingStarted/what-is-apache-doris`,
-+ to: `/docs-next/${DEFAULT_VERSION}/gettingStarted/what-is-apache-doris`,
- target: '_blank',
- },
-```
-
-`src/pages/index.tsx`:
-
-```diff
-- link: `/docs/${DEFAULT_VERSION}/gettingStarted/what-is-apache-doris`,
-+ link: `/docs-next/${DEFAULT_VERSION}/gettingStarted/what-is-apache-doris`,
-```
-
-`src/pages/index.tsx` 第 463 行同样替换。
-
-### 7.2 移除 docs-next 的 noindex / unlisted
-
-- 删掉 robots.txt 中 `Disallow: /docs-next/` 行;
-- 跑脚本批量去掉 `docs-next/` 与 `next_versioned_docs/` 下文档 frontmatter 里的 `unlisted: true`;
-- 撤掉 sitemap `createSitemapItems` 里的 `docs-next` 过滤;
-- search-local 加上 `docs-next` 与 `zh-CN/docs-next`。
-
-### 7.3 banner 反转
-
-`<DocPageBanner />` 中:
-- 老站 banner 改文案: "This page is from the legacy docs. We've moved to a new structure. View the new version →"
-- 新站 banner 改文案 / 移除(看产品决策)。
-
-### 7.4 阶段 4 完成标志
-
-- [ ] 主页/主导航默认进入新版;
-- [ ] 老 URL `/docs/...` 仍正常访问(不做 redirect, 保护书签);
-- [ ] 老站 banner 提示用户已经有新版可查看, 不强制跳转;
-- [ ] sitemap 中 `/docs-next/` 全部进入;
-- [ ] 搜索结果以新版为主。
-
----
-
-## 八、阶段 5(可选): 长期收尾
-
-灰度 + 切换默认运行 1–3 个月后, 决定:
-
-1. **方案甲(保守)**: 永久并存。`/docs/` 与 `/docs-next/` 都保留, 老 URL 不做任何跳转, 老书签永久有效。代价: 长期维护两份 sidebar, 但内容仍是单源。
-2. **方案乙(彻底)**: 把 `/docs/` 整体 301 到 `/docs-next/`, 完成 IA 收敛。需要做:
- - 把 `docs-next/` 内容替换 `docs/`(git mv);
- - 删除 `docs-next` 插件实例;
- - 配 `@docusaurus/plugin-client-redirects` 把 `/docs-next/...` 自动重定向到 `/docs/...`;
- - 老 `/docs/X` URL 保持原样(因为目录结构没变, 只换了 sidebar)。
-3. **方案丙(带文件迁移)**: 若新版 IA 还要做"移动文件"(C/D 类), 必须配齐每条 redirect, 详见原分析文档第六节。
-
-> 推荐: **先方案甲再方案乙**。运行 1 年观察访问量再决定是否完全下线 `/docs/`。
-
----
-
-## 九、回滚方案
-
-阶段 1–3 任意时刻可零成本回滚:
-
-- 删除 `docusaurus.config.js` 中的 `next` 插件实例配置;
-- 仓库中的 `docs-next/` 等目录可保留(不影响 build), 也可删除。
-
-阶段 4 切换默认后回滚:
-
-- 撤回主导航与主页的 Docs 链接修改即可;
-- `/docs-next/` 仍然可访问。
-
----
-
-## 十、关键决策需确认
-
-下列事项需要在动手前对齐:
-
-| # | 决策点 | 推荐 | 备注 |
-|---|--------|------|------|
-| 1 | `docs-next/` 是否进 git? | ✅ 进 git | 不然多人协作做不了 |
-| 2 | 第一次拷贝是不是"硬拷贝"(完整副本)? | ✅ 是 | 后续两边独立演进 |
-| 3 | 旧版的小修复是否回灌新版? | 默认不回灌, 大修复手动回灌 | 见 5.3 |
-| 4 | kapa.ai AI 助手是否切到新版? | 阶段 4 一并切换(前端 + 后台) | 详见 §10.1 |
-| 5 | docs-next 的中文翻译流程是什么? | 沿用现有"PR 内手工同步"模式(项目实际未使用 Crowdin) | 详见 §10.2 |
-| 6 | ja-source 是否同步建 docs-next? | 不建;并在 ja workflow 防误触发 | 详见 §10.3 |
-| 7 | search-local 是否在阶段 4 前就开通新版索引? | 不开 | 避免搜索结果重复 |
-| 8 | 阶段 3 banner 是否需要 i18n 文案? | 至少英中两版 | code.json 中加翻译 key |
-
-### 10.1 决策点 4 详解: kapa.ai AI 助手
-
-kapa.ai 在仓库内的引用只有一处(`docusaurus.config.js:104`), 是弹窗里的 disclaimer 文案。**真正的 AI 知识来源在 kapa.ai 后台爬虫配置里**, 通过 `data-website-id="a5fb90df-217a-4097-95c0-80490220314b"` 关联, 仓库内看不到。
-
-阶段 4 切换时需要做**两件事**:
-
-**(1) 仓库内的 diff —— 改 disclaimer 文案链接**
-
-`docusaurus.config.js`:
-
-```diff
--'data-modal-disclaimer': 'This is a custom LLM with access to all [Doris documentation](https://doris.apache.org/docs/4.x/gettingStarted/what-is-apache-doris).',
-+'data-modal-disclaimer': 'This is a custom LLM with access to all [Doris documentation](https://doris.apache.org/docs-next/4.x/gettingStarted/what-is-apache-doris).',
-```
-
-> 改进建议: 顺便把硬编码的 `4.x` 换成 `${DEFAULT_VERSION}` 拼接, 后续升版本不再需要改这里。
-
-**(2) 仓库外的运维动作 —— 通知 kapa.ai 后台 owner**
-
-`data-project-logo` 指向 `cdn.selectdb.com`, 说明 kapa 后台账号大概率在 SelectDB 团队。需要找到该账号 owner, 在以下三个选项中选一:
-
-| 时机 | 后台动作 | 效果 |
-|------|---------|------|
-| 阶段 1–3(灰度期) | 不动, 仍只爬 `/docs/` | AI 答案只引用旧版(与 unlisted/noindex 一致) |
-| 阶段 3 末 / 阶段 4 中 | **追加** `/docs-next/` 为爬虫源 | AI 知识扩到新旧两版, 可能出现答案中混引两套 |
-| 阶段 4 完成后 | **替换**为 `/docs-next/` | AI 答案完全切到新版 |
-
-> 推荐: 阶段 1–3 不动, 阶段 4 直接走"替换"。混合期容易让 AI 答案出现矛盾的章节标题。
-
-### 10.2 决策点 5 详解: 中文翻译流程
-
-**重要事实**: `crowdin.yml` 是项目里的孤儿配置文件, **当前没有任何 CI / Action 在调用它**。具体证据:
-
-- `crowdin.yml` 内容是 EN→ja 的 4 行配置, 但仓库内根本没有 `i18n/ja/` 目录;
-- `.github/workflows/` 里没有任何 crowdin action;
-- `package.json` 里没有 `crowdin-cli` 依赖;
-- 中文(zh-CN)翻译实际是**纯手工**完成: 每个 PR 同时改 4–6 个位置。
- 典型 commit 长这样:
- ```
- docs/lakehouse/file-formats/lance.md | 98 +
- versioned_docs/version-4.x/lakehouse/file-formats/lance.md | 98 +
- i18n/zh-CN/docusaurus-plugin-content-docs/current/.../lance.md | 98 +
- i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/.../lance.md | 98 +
- ```
-- 日文翻译走的是另一条流程 —— `.github/workflows/manual-i18n-translate-workflow.yaml`(手动触发, Claude API 自动翻译, 输出 PR)。
-
-**结论**: 不需要修改 `crowdin.yml`, 不需要新增任何 CI。`docs-next` 的中文翻译就**沿用现有的"PR 内手工同步"模式**, 只是同步的目标目录换成 `docusaurus-plugin-content-docs-next`。
-
-需要落地的事项:
-
-1. **更新 PR 模板**(`.github/PULL_REQUEST_TEMPLATE.md` 或 issue template, 视项目使用的位置), 在 "Languages" 复选框旁说明 docs-next 中文同步的目标路径。
-2. **写到 `CONTRIBUTING.md`** 一段 "docs-next 翻译指南":
- ```
- When modifying docs-next:
- - English source: docs-next/<path> (current/dev)
- next_versioned_docs/version-4.x/<path> (4.x)
- - Chinese source: i18n/zh-CN/docusaurus-plugin-content-docs-next/current/<path>
- i18n/zh-CN/docusaurus-plugin-content-docs-next/version-4.x/<path>
- - Do NOT touch the legacy docs/ tree in the same PR unless explicitly backporting.
- ```
-3. **可选**: 评估是否给 docs-next 也接入 `manual-i18n-translate-workflow.yaml` 做 ZH 自动翻译初稿(目前该 workflow 只跑 EN→JA, 但脚本对 EN→ZH 也通用)。这是优化项, 不属于必需。
-
-### 10.3 决策点 6 详解: 防止 ja workflow 误扫 docs-next
-
-`.github/workflows/manual-i18n-translate-workflow.yaml` 的 `source_dir` 默认值是 `docs`, 是手动触发的(`workflow_dispatch`), 所以默认不会扫到 `docs-next/`。但为了防止人为传错参数:
-
-- 在该 workflow 的 `Prepare translation input` 步骤里加一行守卫:
- ```bash
- if [[ "${{ inputs.source_dir }}" == docs-next* ]]; then
- echo "❌ docs-next is out of scope for ja translation."
- exit 1
- fi
- ```
-- 或者直接在 workflow inputs 的 description 里加红字警告。
-
----
-
-## 十一、Checklist(落地用)
-
-### 阶段 1(搭框架)
-
-> **实施备注(2026-04-25)**: 第一阶段实施范围**缩减为仅 current 版本**, 4.x 不在 docs-next 中维护(暂等内容稳定后再决定是否补回)。因此 `next_versioned_docs/`、`next_versioned_sidebars/` 未创建, `next_versions.json` 为 `[]`。分支策略也调整为**直接在 app_me 分支提交**, 未单独开 `docs-next-bootstrap` 分支。
->
-> 落地 commit: `67c4c44563ef chore(docs): bootstrap docs-next plugin instance (current only, EN + zh-CN)`
-
-- [x] ~~评审本文档, 确认决策点 1–8~~ → 决策点 1/2/3/7 已隐式确认; 决策点 4/5/6/8 留到阶段 3/4 再处理
-- [x] ~~创建分支 `docs-next-bootstrap`~~ → 改为直接在 `app_me` 分支提交
-- [x] 拷源文件(4.1)— 仅 EN current + zh-CN current(4.x 已从范围中移除)
-- [x] 创建 `next_versions.json`(`[]`)、`sidebars-next.ts`(4.2 – 4.3)— `next_versioned_sidebars/` 因 4.x 移除而无需创建
-- [x] 改 `docusaurus.config.js` 加插件实例(4.5)— `onlyIncludeVersions: ['current']`, `lastVersion: 'current'`, current path=`dev`, banner=`none`
-- [x] 配 noindex(4.6)— 选用方式 B(robots.txt 兜底, 全部 User-agent 加 `Disallow: /docs-next/` 与 `/zh-CN/docs-next/`)。方式 A(文档级 `unlisted: true` frontmatter)暂未做, 待阶段 3 前如需精细控制再追加
-- [x] 配 search-local 排除(4.7)— 保持现有 `docsRouteBasePath`, 加注释指向阶段 4 切换的目标值
-- [x] 配 sitemap 排除(4.8)— `createSitemapItems` 中追加 `docs-next` / `zh-CN/docs-next` 过滤
-- [~] 本地 build 验证(4.9 – 4.10)— **EN-only / current-only / NODE_OPTIONS 1800MB heap** 通过: exit 0, 231s, 5969 docs-next HTML 文件, sitemap.xml 0 条 docs-next URL, robots.txt Disallow 已生效。**中文 locale 与全量版本未在本地构建**, 留 CI 验证
-- [~] DoD(4.11)— 已过: build 成功 / sitemap 不含 docs-next / 主导航仍指向 `/docs/...`. 待 CI 验证: zh-CN 构建 / 站内搜索不返回 docs-next / `/docs-next/dev/...` 与 `/docs/dev/...` 内容一致
-- [x] 加 CI job(5.4)— `.github/workflows/docs-next-build.yml`, 触发路径含 `docs-next/**` `sidebars-next.ts` `next_versions.json` `i18n/zh-CN/docusaurus-plugin-content-docs-next/**` `docusaurus.config.js`; 校验 `build/docs-next/dev` `build/zh-CN/docs-next/dev` 存在 + sitemap 不含 docs-next + robots.txt 含 Disallow
-- [x] **【新增】跳过 build-check.yml 中的 broken-link 检查对 docs-next 的扫描** — `scripts/check_move.js`、`check_move.py` 都加了 `isDocsNextPath` 守卫, 命中 `docs-next/` 或 `i18n/.../docusaurus-plugin-content-docs-next/` 的文件直接 skip。原因: docs-next 灰度期 IA 仍在重构, 大量内部相对链接会暂时断, 不应阻塞旧站 PR。`yarn docs:links:changed` (lint-links.js) 因 manifest CONTENT_ROOTS 不含 docs-next, 已天然跳过, 无需改
-- [ ] 合并到 master — 当前在 `app_me`, 待开 PR / 评审后再合
-
-### 阶段 2(内容重构, 增量 PR)
-
-> **实施备注(2026-04-25)**: 阶段 2 落地范围**仅 current**(与阶段 1 一致, 4.x 暂未纳入 docs-next, 故 `next_versioned_sidebars/version-4.x-sidebars.json` 未创建/未调整)。落地内容: 重写 `sidebars-next.ts` → 旧 8 个一级目录拆/合为新 18 个; 13 个新增占位文档(`docs-next/architecture-concepts/{overview,system-architecture,storage-compute-decoupled,mpp-execution-engine,storage-layer,metadata-management}.md`, `docs-next/use-cases/overview.md`, `docs-next/release-notes/overview.md`, `docs-next/hybrid-search/{overview,recipes,rag}.md`, `docs-next/ai [...]
->
-> 本地构建验证: `DOCS_VERSIONS=current yarn build` — 18 个一级目录全部产出 HTML; sitemap 不含 docs-next; robots.txt Disallow 生效。yarn 进程 exit 1 来自 HTML minifier 对 sql-manual 几个页面的"control character"诊断 + client-redirects 重名告警, **均为既有问题**, 与本次 IA 重构无关。
-
-- [x] 在 `sidebars-next.ts` 中按新 IA 调整 current 顶层结构(不改 docId)— 顶级从 8 项变 18 项: Getting Started / **Architecture & Concepts**(新)/ Installation & Deployment / Connect & Develop / Table Design / Data Operations / Querying / Lakehouse / **Hybrid Search**(新)/ **AI**(拆分后)/ Compute-Storage Decoupled / Performance & Tuning(含 Benchmark)/ Administration / Observability with Doris / Ecosystem & Integrations / Troubleshooting & FAQ / Reference / **Release Notes**(新)
-- [~] 在 `next_versioned_sidebars/version-4.x-sidebars.json` 同步调整 4.x sidebar — 4.x 未纳入 docs-next, 此项暂搁置
-- [x] 把 Lakehouse / Hybrid Search / AI / Compute-Storage Decoupled 提到一级
-- [x] 取消 Guides 包装层 — 12 个原 Guides 子项重新分发到 Installation / Connect & Develop / Table Design / Data Operations / Querying / Lakehouse / Hybrid Search / AI / Compute-Storage Decoupled / Observability with Doris / Administration(Security 移入)
-- [x] 拆分 AI 为 Hybrid Search + AI — Hybrid Search 收 `ai/text-search/{overview,search-operators,search-function,scoring}` + `ai/vector-search/{overview,practical-guide,performance,performance-large-scale}`; AI 收 `ai/{ai-overview,ai-function-overview,model-providers,end-to-end-examples}`; 索引 DDL(`ai/text-search/{custom-analyzer,custom-normalizer}` + `ai/vector-search/{hnsw,ivf,ivf-on-disk,index-management,quantization-survey,resource-estimation,behind-index}`)按 IA 归并到 Table Design → Indexes [...]
-- [x] 重组 Table Design 内部 8 个分组 — Overview / Table Models / Data Types / Partitioning & Bucketing / Indexes / Storage Layout / Schema Evolution / Special Tables / Best Practices
-- [x] 必要的少量文档新增(Architecture & Concepts、Use Cases、Release Notes 入口页)— 13 个占位 `.md` 文档(前文备注列出)
-- [x] 中文 sidebar 同步(current.json / version-4.x.json 中的标签翻译)— current.json 追加 38 个 sidebar category 标签翻译; version-4.x.json 因 4.x 未纳入而未动
-
-### 阶段 3(灰度)
-
-- [ ] 实现 `<DocPageBanner />` Swizzle 组件
-- [ ] 老站 / 新站双向 banner 上线
-- [ ] 加 Matomo 事件埋点
-- [ ] 灰度持续 1–3 个月
-
-### 阶段 4(切换)
-
-- [ ] 主导航 / 主页 docs 链接切到新版
-- [ ] kapa.ai disclaimer 链接更新(§10.1 第一项)
-- [ ] **联系 kapa.ai 后台 owner**, 把爬虫源切到 `/docs-next/`(§10.1 第二项, 仓库外动作)
-- [ ] 移除 noindex / unlisted
-- [ ] sitemap 与 search-local 接入新版
-- [ ] banner 反转
-
-### 配套(可任意阶段)
-
-- [ ] 更新 `CONTRIBUTING.md` 加 docs-next 翻译指南(§10.2)
-- [ ] 更新 PR 模板提示中文 4 路径同步(§10.2)
-- [ ] 在 `manual-i18n-translate-workflow.yaml` 加 `source_dir` 守卫防误扫(§10.3)
-
----
-
-## 十二、风险与缓解
-
-| 风险 | 概率 | 影响 | 缓解 |
-|------|------|------|------|
-| 第一次 build 因 docId 重复或 sidebar 不匹配失败 | 中 | 阶段 1 卡住 | 严格"先全拷再修", 不在阶段 1 改 docId |
-| 维护者在 docs-next PR 中漏改中文目录 | 高 | 中英文不同步 | CONTRIBUTING.md 明确 4 个同步路径(见 §10.2)+ PR 模板提示 + CI 加双语完整性检查(可选) |
-| ja 自动翻译 workflow 被误传 `docs-next` | 低 | 产生不期望的 ja 翻译 PR | workflow 里加 `source_dir` 守卫(见 §10.3) |
-| 老站和新站文档内容长期漂移 | 高 | 用户在两边看到不同内容 | 5.3 的同步策略 + 季度 rebase |
-| SEO 双倍权重稀释 | 中 | 搜索流量短期波动 | 灰度期 noindex;切换后单一 canonical |
-| banner 引导导致用户混淆 | 低 | 支持咨询增多 | banner 可关闭;FAQ 加专门条目 |
-| ja 用户期望也有新版 | 低 | 反馈面投诉 | 在新版页面顶部说明"中英文先行" |
-
----
-
-## 附录 A: 仓库引用映射
-
-旧文件 → 新文件(命名约定):
-
-| 旧 | 新 |
-|----|----|
-| `docs/` | `docs-next/` |
-| `versioned_docs/version-4.x/` | `next_versioned_docs/version-4.x/` |
-| `versions.json` | `next_versions.json` |
-| `sidebars.ts` | `sidebars-next.ts` |
-| `versioned_sidebars/version-4.x-sidebars.json` | `next_versioned_sidebars/version-4.x-sidebars.json` |
-| `i18n/zh-CN/docusaurus-plugin-content-docs/current/` | `i18n/zh-CN/docusaurus-plugin-content-docs-next/current/` |
-| `i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/` | `i18n/zh-CN/docusaurus-plugin-content-docs-next/version-4.x/` |
-
-> Docusaurus 多实例插件的目录命名是**约定**: 插件 id = `next` 时, 自动按 `next_versioned_*` / `docusaurus-plugin-content-docs-next` 寻找。无需额外配置。
-
-## 附录 B: 参考链接
-
-- Docusaurus 多实例 docs 插件: https://docusaurus.io/docs/docs-multi-instance
-- Docusaurus versioning: https://docusaurus.io/docs/versioning
-- `unlisted` frontmatter: https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs#unlisted
-- Swizzling 主题组件: https://docusaurus.io/docs/swizzling
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org