diff --git a/docs/img/kubeblocks-architecture-ha.png b/docs/img/kubeblocks-architecture-ha.png
new file mode 100644
index 00000000000..c63e839d291
Binary files /dev/null and b/docs/img/kubeblocks-architecture-ha.png differ
diff --git a/docs/user_docs/create_database/overview-of-create-database.md b/docs/user_docs/create_database/overview-of-create-database.md
index b01e8483a1f..56c519b47aa 100644
--- a/docs/user_docs/create_database/overview-of-create-database.md
+++ b/docs/user_docs/create_database/overview-of-create-database.md
@@ -17,7 +17,7 @@ After deploying KubeBlocks, you can use it to create various databases such as M
- [MongoDB](./../kubeblocks-for-mongodb/cluster-management/create-and-connect-to-a-mongodb-cluster.md)
- [Kafka](./../kubeblocks-for-kafka/cluster-management/create-a-kafka-cluster.md)
- [Pulsar](./../kubeblocks-for-pulsar/cluster-management/create-pulsar-cluster-on-kubeblocks.md)
-- RabbitMQ
+- [RabbitMQ](./../kubeblocks-for-rabbitmq/manage-rabbitmq.md)
- [Elasticsearch](./../kubeblocks-for-elasticsearch/manage-elasticsearch.md)
- [StarRocks](./../kubeblocks-for-starrocks/manage-starrocks.md)
- [Milvus](./../kubeblocks-for-milvus/manage-milvus.md)
diff --git a/docs/user_docs/installation/install-with-kbcli/install-addons.md b/docs/user_docs/installation/install-with-kbcli/install-addons.md
new file mode 100644
index 00000000000..5770735cc21
--- /dev/null
+++ b/docs/user_docs/installation/install-with-kbcli/install-addons.md
@@ -0,0 +1,85 @@
+---
+title: Install Addons
+description: Install KubeBlocks Addons
+keywords: [kbcli, kubeblocks, addons, install]
+sidebar_position: 3
+sidebar_label: Install Addons
+---
+
+# Install Addons
+
+## Use the index to install an addon
+
+With the release of KubeBlocks v0.8.0, addons are decoupled from KubeBlocks and some addons are not installed by default. If you want to use these addons, add addons first by index.
+
+The official index repo is [KubeBlocks index](https://github.com/apecloud/block-index). The code of all addons is maintained in the [KubeBlocks addon repo](https://github.com/apecloud/kubeblocks-addons).
+
+1. View the index.
+
+ kbcli creates an index named `kubeblocks` by default and you can check whether this index is created by running `kbcli addon index list`.
+
+ ```bash
+ kbcli addon index list
+ >
+ INDEX URL
+ kubeblocks https://github.com/apecloud/block-index.git
+ ```
+
+ If the list is empty or you want to add your index, you can add the index manually by using `kbcli addon index add
- `Halt` deletes workload resources such as statefulset and deployment workloads but keep PVCs.
- `Delete` is based on Halt and deletes PVCs.
- `WipeOut` is based on Delete and wipe out all volume snapshots and snapshot data from a backup storage location. |
+| `spec.affinity` | It defines a set of node affinity scheduling rules for the cluster's Pods. This field helps control the placement of Pods on nodes within the cluster. |
+| `spec.affinity.podAntiAffinity` | It specifies the anti-affinity level of Pods within a component. It determines how pods should spread across nodes to improve availability and performance. |
+| `spec.affinity.topologyKeys` | It represents the key of node labels used to define the topology domain for Pod anti-affinity and Pod spread constraints. |
+| `spec.componentSpecs` | It is the list of components that define the cluster components. This field allows customized configuration of each component within a cluster. |
+| `spec.componentSpecs.componentDefRef` | It is the name of the component definition that is defined in the cluster definition and you can get the component definition names with `kubectl get clusterdefinition qdrant -o json \| jq '.spec.componentDefs[].name'`. |
+| `spec.componentSpecs.name` | It specifies the name of the component. |
+| `spec.componentSpecs.disableExporter` | It defines whether the monitoring function is enabled. |
+| `spec.componentSpecs.replicas` | It specifies the number of replicas of the component. |
+| `spec.componentSpecs.resources` | It specifies the resource requirements of the component. |
+
+KubeBlocks operator watches for the `Cluster` CRD and creates the cluster and all dependent resources. You can get all the resources created by the cluster with `kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo`.
+
+```bash
+kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo
+```
+
+Run the following command to see the created RabbitMQ cluster object:
+
+```bash
+kubectl get cluster mycluster -n demo -o yaml
+```
+
+## Connect to the cluster
+
+Use the [RabbitMQ tools](https://www.rabbitmq.com/docs/cli) to connect to and manage the RabbitMQ cluster.
+
+## Scale
+
+### Scale vertically
+
+Before you start, check whether the cluster status is `Running`. Otherwise, the following operations may fail.
+
+```bash
+kubectl get cluster mycluster -n demo
+>
+NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
+mycluster Delete Running 47m
+```
+
+#### Option 1. Apply an OpsRequest
+
+1. Apply an OpsRequest to the specified cluster. Configure the parameters according to your needs.
+
+ ```bash
+ kubectl apply -f - <
+ NAME TYPE CLUSTER STATUS PROGRESS AGE
+ ops-vertical-scaling VerticalScaling mycluster Succeed 3/3 6m
+ ```
+
+ If an error occurs, you can troubleshoot it with `kubectl describe ops -n demo` command to view the events of this operation.
+
+3. Check whether the corresponding resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+#### Option 2. Edit the cluster YAML file
+
+1. Change the configuration of `spec.componentSpecs.resources` in the YAML file. `spec.componentSpecs.resources` controls the requirement and limit of resources and changing them triggers a vertical scaling.
+
+ ```yaml
+ apiVersion: apps.kubeblocks.io/v1alpha1
+ kind: Cluster
+ metadata:
+ name: mycluster
+ namespace: demo
+ spec:
+ componentSpecs:
+ - name: rabbitmq
+ componentDefRef: rabbitmq
+ replicas: 3
+ resources: # Change the values of resources.
+ requests:
+ memory: "2Gi"
+ cpu: "1"
+ limits:
+ memory: "4Gi"
+ cpu: "2"
+ volumeClaimTemplates:
+ - name: data
+ spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+ terminationPolicy: Delete
+ ```
+
+2. Check whether the corresponding resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+### Scale horizontally
+
+Horizontal scaling changes the amount of pods. For example, you can scale out replicas from three to five.
+
+From v0.9.0, besides replicas, KubeBlocks also supports scaling in and out instances, refer to [Horizontal Scale](./../../api_docs/maintenance/scale/horizontal-scale.md) in API docs for more details and examples.
+
+Before you start, check whether the cluster status is `Running`. Otherwise, the following operations may fail.
+
+```bash
+kubectl get cluster mycluster -n demo
+>
+NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
+mycluster Delete Running 47m
+```
+
+#### Option 1. Apply an OpsRequest
+
+1. Apply an OpsRequest to a specified cluster. Configure the parameters according to your needs.
+
+ The example below means deleting two replicas.
+
+ ```bash
+ kubectl apply -f - <
+ NAME TYPE CLUSTER STATUS PROGRESS AGE
+ ops-horizontal-scaling HorizontalScaling mycluster Succeed 2/2 6m
+ ```
+
+ If an error occurs, you can troubleshoot it with `kubectl describe ops -n demo` command to view the events of this operation.
+
+3. Check whether the corresponding resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+#### Option 2. Edit the cluster YAML file
+
+1. Change the configuration of `spec.componentSpecs.replicas` in the YAML file. `spec.componentSpecs.replicas` stands for the pod amount and changing this value triggers a horizontal scaling of a cluster.
+
+ ```bash
+ kubectl edit cluster mycluster -n demo
+ apiVersion: apps.kubeblocks.io/v1alpha1
+ kind: Cluster
+ metadata:
+ name: mycluster
+ namespace: demo
+ spec:
+ componentSpecs:
+ - name: rabbitmq
+ componentDefRef: rabbitmq
+ replicas: 1 # Change the amount
+ volumeClaimTemplates:
+ - name: data
+ spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi
+ terminationPolicy: Delete
+ ```
+
+2. Check whether the corresponding resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+## Volume expansion
+
+Before you start, check whether the cluster status is `Running`. Otherwise, the following operations may fail.
+
+```bash
+kubectl get cluster mycluster -n demo
+>
+NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
+mycluster Delete Running 47m
+```
+
+### Option 1. Apply an OpsRequest
+
+1. Change the value of storage according to your need and run the command below to expand the volume of a cluster.
+
+ ```bash
+ kubectl apply -f - <
+ NAME TYPE CLUSTER STATUS PROGRESS AGE
+ ops-volume-expansion VolumeExpansion mycluster Succeed 1/1 6m
+ ```
+
+ If an error occurs, you can troubleshoot it with `kubectl describe ops -n demo` command to view the events of this operation.
+
+3. Check whether the corresponding cluster resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+### Option 2. Edit the cluster YAML file
+
+1. Change the value of `spec.componentSpecs.volumeClaimTemplates.spec.resources` in the cluster YAML file.
+
+ `spec.componentSpecs.volumeClaimTemplates.spec.resources` is the storage resource information of the pod and changing this value triggers the volume expansion of a cluster.
+
+ ```bash
+ kubectl edit cluster mycluster -n demo
+ apiVersion: apps.kubeblocks.io/v1alpha1
+ kind: Cluster
+ metadata:
+ name: mycluster
+ namespace: demo
+ spec:
+ componentSpecs:
+ - name: rabbitmq
+ componentDefRef: rabbitmq
+ replicas: 2
+ volumeClaimTemplates:
+ - name: data
+ spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 40Gi # Change the volume storage size.
+ terminationPolicy: Delete
+ ```
+
+2. Check whether the corresponding cluster resources change.
+
+ ```bash
+ kubectl describe cluster mycluster -n demo
+ ```
+
+## Restart
+
+1. Restart a cluster.
+
+ ```bash
+ kubectl apply -f - <apecloud-mysql-8.0.30
| ✔️ | N/A | N/A | ✔️ | ✔️ | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| yashan | personal-23.1.1.100 | ✔️ | ✔️ (Standalone) | ✔️ | ✔️ | ✔️ | N/A | N/A | ✔️ | ✔️ | N/A | N/A | N/A | N/A | N/A |
-| zookeeper | 3.7.1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | N/A | N/A | ✔️ | ✔️ | N/A | N/A | N/A | N/A | N/A |
-
-:::note
-
-The upgrade feature means that KubeBlocks supports minor version upgrades for a database engine. For example, you can upgrade PostgreSQL from v12.14 to v12.15.
-
-:::
-
-## Use addons
-
-### Use the index to install an addon
-
-With the release of KubeBlocks v0.8.0, addons are decoupled from KubeBlocks and some addons are not installed by default. If you want to use these addons, add addons first by index.
-
-The official index repo is [KubeBlocks index](https://github.com/apecloud/block-index). The code of all addons is maintained in the [KubeBlocks addon repo](https://github.com/apecloud/kubeblocks-addons).
-
-1. View the index.
-
- kbcli creates an index named `kubeblocks` by default and you can check whether this index is created by running `kbcli addon index list`.
-
- ```bash
- kbcli addon index list
- >
- INDEX URL
- kubeblocks https://github.com/apecloud/block-index.git
- ```
-
- If the list is empty or you want to add your index, you can add the index manually by using `kbcli addon index add