You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ji...@apache.org on 2022/04/15 08:31:30 UTC

[incubator-doris] branch master updated: [Refactor][doc] Write documents related to cluster management and external data import (#9045)

This is an automated email from the ASF dual-hosted git repository.

jiafengzheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 35a425e136 [Refactor][doc] Write documents related to cluster management and external data import (#9045)
35a425e136 is described below

commit 35a425e136ad7ba161ffc988b8885b10467f7fcc
Author: caoliang-web <71...@users.noreply.github.com>
AuthorDate: Fri Apr 15 16:31:25 2022 +0800

    [Refactor][doc] Write documents related to cluster management and external data import (#9045)
    
    * Write documents related to cluster management and external data import
---
 new-docs/.vuepress/sidebar/en.js                   |  11 +-
 new-docs/.vuepress/sidebar/zh-CN.js                |  11 +-
 new-docs/en/admin-manual/cluster-admin/doris-ha.md |  26 -
 .../cluster-management/elastic-expansion.md        | 149 +++++
 .../cluster-management/load-balancing.md           | 636 +++++++++++++++++++++
 .../{ => cluster-management}/upgrade.md            |   0
 new-docs/en/admin-manual/elastic-expansion.md      |  28 -
 new-docs/en/admin-manual/sql-interception.md       |  94 +++
 .../import/import-scenes/external-storage-load.md  | 155 ++++-
 .../zh-CN/admin-manual/cluster-admin/doris-ha.md   |  26 -
 .../cluster-management/elastic-expansion.md        | 141 +++++
 .../cluster-management/load-balancing.md           | 635 ++++++++++++++++++++
 .../admin-manual/cluster-management/upgrade.md     |  84 +++
 new-docs/zh-CN/admin-manual/elastic-expansion.md   |  26 -
 new-docs/zh-CN/admin-manual/sql-interception.md    |  93 +++
 new-docs/zh-CN/admin-manual/upgrade.md             |  27 -
 .../import/import-scenes/external-storage-load.md  | 157 ++++-
 17 files changed, 2152 insertions(+), 147 deletions(-)

diff --git a/new-docs/.vuepress/sidebar/en.js b/new-docs/.vuepress/sidebar/en.js
index 5168c3c7e9..b7ce458b43 100644
--- a/new-docs/.vuepress/sidebar/en.js
+++ b/new-docs/.vuepress/sidebar/en.js
@@ -755,14 +755,14 @@ module.exports = [
     directoryPath: "admin-manual/",
     initialOpenGroupIndex: -1,
     children: [
-      "upgrade",
-      "elastic-expansion",
       {
-        title: "High availability",
-        directoryPath: "cluster-admin/",
+        title: "cluster management",
+        directoryPath: "cluster-management/",
         initialOpenGroupIndex: -1,
         children: [
-          "doris-ha"
+          "upgrade",
+          "elastic-expansion",
+          "load-balancing"
         ],
       },
       {
@@ -775,6 +775,7 @@ module.exports = [
           "delete-recover"
         ],
       },
+      "sql-interception",
       "query-profile",
       "optimization",
       {
diff --git a/new-docs/.vuepress/sidebar/zh-CN.js b/new-docs/.vuepress/sidebar/zh-CN.js
index 844515615a..b349591c9a 100644
--- a/new-docs/.vuepress/sidebar/zh-CN.js
+++ b/new-docs/.vuepress/sidebar/zh-CN.js
@@ -755,14 +755,14 @@ module.exports = [
     directoryPath: "admin-manual/",
     initialOpenGroupIndex: -1,
     children: [
-      "upgrade",
-      "elastic-expansion",
       {
-        title: "集群高可用",
-        directoryPath: "cluster-admin/",
+        title: "集群管理",
+        directoryPath: "cluster-management/",
         initialOpenGroupIndex: -1,
         children: [
-          "doris-ha"
+           "upgrade",
+           "elastic-expansion",
+           "load-balancing"
         ],
       },
       {
@@ -775,6 +775,7 @@ module.exports = [
           "delete-recover"
         ],
       },
+      "sql-interception",
       "query-profile",
       "optimization",
       {
diff --git a/new-docs/en/admin-manual/cluster-admin/doris-ha.md b/new-docs/en/admin-manual/cluster-admin/doris-ha.md
deleted file mode 100644
index ff85f5bac2..0000000000
--- a/new-docs/en/admin-manual/cluster-admin/doris-ha.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-{
-    "title": "Doris High Availability",
-    "language": "en"
-}
-
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
diff --git a/new-docs/en/admin-manual/cluster-management/elastic-expansion.md b/new-docs/en/admin-manual/cluster-management/elastic-expansion.md
new file mode 100644
index 0000000000..fc3d69595e
--- /dev/null
+++ b/new-docs/en/admin-manual/cluster-management/elastic-expansion.md
@@ -0,0 +1,149 @@
+---
+{
+    "title": "Elastic scaling",
+    "language": "en"
+}
+
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Elastic scaling
+
+Doris can easily expand and shrink FE, BE, Broker instances.
+
+## FE Expansion and Compression
+
+High availability of FE can be achieved by expanding FE to three top-one nodes.
+
+Users can login to Master FE through MySQL client. By:
+
+`SHOW PROC '/frontends';`
+
+To view the current FE node situation.
+
+You can also view the FE node through the front-end page connection: ``http://fe_hostname:fe_http_port/frontend`` or ```http://fe_hostname:fe_http_port/system?Path=//frontends```.
+
+All of the above methods require Doris's root user rights.
+
+The process of FE node expansion and contraction does not affect the current system operation.
+
+### Adding FE nodes
+
+FE is divided into three roles: Leader, Follower and Observer. By default, a cluster can have only one Leader and multiple Followers and Observers. Leader and Follower form a Paxos selection group. If the Leader goes down, the remaining Followers will automatically select a new Leader to ensure high write availability. Observer synchronizes Leader data, but does not participate in the election. If only one FE is deployed, FE defaults to Leader.
+
+The first FE to start automatically becomes Leader. On this basis, several Followers and Observers can be added.
+
+Add Follower or Observer. Connect to the started FE using mysql-client and execute:
+
+`ALTER SYSTEM ADD FOLLOWER "follower_host:edit_log_port";`
+
+or
+
+`ALTER SYSTEM ADD OBSERVER "observer_host:edit_log_port";`
+
+The follower\_host and observer\_host is the node IP of Follower or Observer, and the edit\_log\_port in its configuration file fe.conf.
+
+Configure and start Follower or Observer. Follower and Observer are configured with Leader. The following commands need to be executed at the first startup:
+
+`bin/start_fe.sh --helper host:edit_log_port --daemon`
+
+The host is the node IP of Leader, and the edit\_log\_port in Lead's configuration file fe.conf. The --helper is only required when follower/observer is first startup.
+
+View the status of Follower or Observer. Connect to any booted FE using mysql-client and execute:
+
+```SHOW PROC '/frontends';```
+
+You can view the FE currently joined the cluster and its corresponding roles.
+
+> Notes for FE expansion:
+>
+> 1. The number of Follower FEs (including Leaders) must be odd. It is recommended that a maximum of three constituent high availability (HA) modes be deployed.
+> 2. When FE is in a highly available deployment (1 Leader, 2 Follower), we recommend that the reading service capability of FE be extended by adding Observer FE. Of course, you can continue to add Follower FE, but it's almost unnecessary.
+> 3. Usually a FE node can handle 10-20 BE nodes. It is suggested that the total number of FE nodes should be less than 10. Usually three can meet most of the needs.
+> 4. The helper cannot point to the FE itself, it must point to one or more existing running Master/Follower FEs.
+
+### Delete FE nodes
+
+Delete the corresponding FE node using the following command:
+
+```ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";```
+
+> Notes for FE contraction:
+>
+> 1. When deleting Follower FE, make sure that the remaining Follower (including Leader) nodes are odd.
+
+## BE Expansion and Compression
+
+Users can login to Leader FE through mysql-client. By:
+
+```SHOW PROC '/backends';```
+
+To see the current BE node situation.
+
+You can also view the BE node through the front-end page connection: ``http://fe_hostname:fe_http_port/backend`` or ``http://fe_hostname:fe_http_port/system?Path=//backends``.
+
+All of the above methods require Doris's root user rights.
+
+The expansion and scaling process of BE nodes does not affect the current system operation and the tasks being performed, and does not affect the performance of the current system. Data balancing is done automatically. Depending on the amount of data available in the cluster, the cluster will be restored to load balancing in a few hours to a day. For cluster load, see the [Tablet Load Balancing Document](../administrator-guide/operation/tablet-repair-and-balance.md).
+
+### Add BE nodes
+
+The BE node is added in the same way as in the **BE deployment** section. The BE node is added by the `ALTER SYSTEM ADD BACKEND` command.
+
+> Notes for BE expansion:
+>
+> 1. After BE expansion, Doris will automatically balance the data according to the load, without affecting the use during the period.
+
+### Delete BE nodes
+
+There are two ways to delete BE nodes: DROP and DECOMMISSION
+
+The DROP statement is as follows:
+
+```ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";```
+
+**Note: DROP BACKEND will delete the BE directly and the data on it will not be recovered!!! So we strongly do not recommend DROP BACKEND to delete BE nodes. When you use this statement, there will be corresponding error-proof operation hints.**
+
+DECOMMISSION clause:
+
+```ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";```
+
+> DECOMMISSION notes:
+>
+> 1. This command is used to safely delete BE nodes. After the command is issued, Doris attempts to migrate the data on the BE to other BE nodes, and when all data is migrated, Doris automatically deletes the node.
+> 2. The command is an asynchronous operation. After execution, you can see that the BE node's isDecommission status is true through ``SHOW PROC '/backends';` Indicates that the node is offline.
+> 3. The order **does not necessarily carry out successfully**. For example, when the remaining BE storage space is insufficient to accommodate the data on the offline BE, or when the number of remaining machines does not meet the minimum number of replicas, the command cannot be completed, and the BE will always be in the state of isDecommission as true.
+> 4. The progress of DECOMMISSION can be viewed through `SHOW PROC '/backends';` Tablet Num, and if it is in progress, Tablet Num will continue to decrease.
+> 5. The operation can be carried out by:
+     > 		```CANCEL ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";```
+     > 	The order was cancelled. When cancelled, the data on the BE will maintain the current amount of data remaining. Follow-up Doris re-load balancing
+
+**For expansion and scaling of BE nodes in multi-tenant deployment environments, please refer to the [Multi-tenant Design Document] (./administrator-guide/operation/multi-tenant.md).**
+
+## Broker Expansion and Shrinkage
+
+There is no rigid requirement for the number of Broker instances. Usually one physical machine is deployed. Broker addition and deletion can be accomplished by following commands:
+
+```ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";```
+```ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";```
+```ALTER SYSTEM DROP ALL BROKER broker_name;```
+
+Broker is a stateless process that can be started or stopped at will. Of course, when it stops, the job running on it will fail. Just try again.
\ No newline at end of file
diff --git a/new-docs/en/admin-manual/cluster-management/load-balancing.md b/new-docs/en/admin-manual/cluster-management/load-balancing.md
new file mode 100644
index 0000000000..e9d8b1980f
--- /dev/null
+++ b/new-docs/en/admin-manual/cluster-management/load-balancing.md
@@ -0,0 +1,636 @@
+---
+{
+    "title": "load balancing",
+    "language": "en"
+}
+
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# load balancing
+
+When deploying multiple FE nodes, users can deploy a load balancing layer on top of multiple FEs to achieve high availability of Doris.
+
+## Code method
+
+Retry and load balance yourself in the application layer code. For example, if a connection is found to be down, it will automatically retry on other connections. Application layer code retry requires the application to configure multiple doris front-end node addresses.
+
+## JDBC Connector
+
+If you use mysql jdbc connector to connect to Doris, you can use jdbc's automatic retry mechanism:
+
+```text
+jdbc:mysql:loadbalance://[host:port],[host:port].../[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue
+```
+
+For details, please refer to [Mysql official website document](https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-j2ee-concepts-managing-load-balanced-connections.html)
+
+## ProxySQL method
+
+ProxySQL is a flexible and powerful MySQL proxy layer. It is a MySQL middleware that can be actually used in a production environment. It can realize read-write separation, support Query routing function, support dynamic designation of a certain SQL for cache, support dynamic loading configuration, failure Switching and some SQL filtering functions.
+
+Doris's FE process is responsible for receiving user connections and query requests. It itself is horizontally scalable and highly available, but it requires users to set up a proxy on multiple FEs to achieve automatic connection load balancing.
+
+### Install ProxySQL (yum way)
+
+```shell
+ Configure yum source
+# vim /etc/yum.repos.d/proxysql.repo
+[proxysql_repo]
+name= ProxySQL YUM repository
+baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
+gpgcheck=1
+gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
+ 
+Perform installation
+# yum clean all
+# yum makecache
+# yum -y install proxysql
+View version  
+# proxysql --version
+ProxySQL version 1.4.13-15-g69d4207, codename Truls
+Set up auto start
+# systemctl enable proxysql
+# systemctl start proxysql      
+# systemctl status proxysql
+After startup, it will listen to two ports, the default is 6032 and 6033. Port 6032 is the management port of ProxySQL, and 6033 is the port for ProxySQL to provide external services (that is, the forwarding port connected to the real database of the forwarding backend).
+# netstat -tunlp
+Active Internet connections (only servers)
+Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
+tcp        0      0 0.0.0.0:6032            0.0.0.0:*               LISTEN      23940/proxysql    
+tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN
+```
+
+### ProxySQL Config
+
+ProxySQL has a configuration file `/etc/proxysql.cnf` and a configuration database file `/var/lib/proxysql/proxysql.db`. **Special attention is needed here**: If there is a `"proxysql.db"` file (under the `/var/lib/proxysql` directory), the ProxySQL service will only be read when it is started for the first time The `proxysql.cnf file` and parse it; after startup, the `proxysql.cnf` file will not be read! If you want the configuration in the proxysql.cnf file to take effect after restart [...]
+
+#### View and modify configuration files
+
+Here are mainly a few parameters, which have been commented out below, and you can modify them according to your needs
+
+```sql
+# egrep -v "^#|^$" /etc/proxysql.cnf
+datadir="/var/lib/proxysql"         #data dir
+admin_variables=
+{
+        admin_credentials="admin:admin"  #User name and password for connecting to the management terminal
+        mysql_ifaces="0.0.0.0:6032"    #Management port, used to connect to proxysql management database
+}
+mysql_variables=
+{
+        threads=4      #Specify the number of threads opened for the forwarding port
+        max_connections=2048
+        default_query_delay=0
+        default_query_timeout=36000000
+        have_compress=true
+        poll_timeout=2000
+        interfaces="0.0.0.0:6033"    #Specify the forwarding port, used to connect to the back-end mysql database, which is equivalent to acting as a proxy
+        default_schema="information_schema"
+        stacksize=1048576
+        server_version="5.5.30"        #Specify the version of the backend mysql
+        connect_timeout_server=3000
+        monitor_username="monitor"
+        monitor_password="monitor"
+        monitor_history=600000
+        monitor_connect_interval=60000
+        monitor_ping_interval=10000
+        monitor_read_only_interval=1500
+        monitor_read_only_timeout=500
+        ping_interval_server_msec=120000
+        ping_timeout_server=500
+        commands_stats=true
+        sessions_sort=true
+        connect_retries_on_failure=10
+}
+mysql_servers =
+(
+)
+mysql_users:
+(
+)
+mysql_query_rules:
+(
+)
+scheduler=
+(
+)
+mysql_replication_hostgroups=
+(
+)
+```
+
+#### Connect to the ProxySQL management port test
+
+```sql
+# mysql -uadmin -padmin -P6032 -hdoris01
+View the global_variables table information of the main library (it is in this library after login by default)
+MySQL [(none)]> show databases;
++-----+---------------+-------------------------------------+
+| seq | name          | file                                |
++-----+---------------+-------------------------------------+
+| 0   | main          |                                     |
+| 2   | disk          | /var/lib/proxysql/proxysql.db       |
+| 3   | stats         |                                     |
+| 4   | monitor       |                                     |
+| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
++-----+---------------+-------------------------------------+
+5 rows in set (0.000 sec)
+MySQL [(none)]> use main;
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+ 
+Database changed
+MySQL [main]> show tables;
++--------------------------------------------+
+| tables                                     |
++--------------------------------------------+
+| global_variables                           |
+| mysql_collations                           |
+| mysql_group_replication_hostgroups         |
+| mysql_query_rules                          |
+| mysql_query_rules_fast_routing             |
+| mysql_replication_hostgroups               |
+| mysql_servers                              |
+| mysql_users                                |
+| proxysql_servers                           |
+| runtime_checksums_values                   |
+| runtime_global_variables                   |
+| runtime_mysql_group_replication_hostgroups |
+| runtime_mysql_query_rules                  |
+| runtime_mysql_query_rules_fast_routing     |
+| runtime_mysql_replication_hostgroups       |
+| runtime_mysql_servers                      |
+| runtime_mysql_users                        |
+| runtime_proxysql_servers                   |
+| runtime_scheduler                          |
+| scheduler                                  |
++--------------------------------------------+
+20 rows in set (0.000 sec)
+```
+
+#### ProxySQL configuration backend Doris FE
+
+Use the insert statement to add the host to the mysql_servers table, where: hostgroup_id is 10 for the write group, and 20 for the read group. We don't need to read and write the license here, and it doesn't matter which one can be set randomly.
+
+```sql
+[root@mysql-proxy ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1
+............
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.211',9030);
+Query OK, 1 row affected (0.000 sec)
+  
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.212',9030);
+Query OK, 1 row affected (0.000 sec)
+  
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.213',9030);
+Query OK, 1 row affected (0.000 sec)
+ 
+If an error occurs during the insertion process:
+ERROR 1045 (#2800): UNIQUE constraint failed: mysql_servers.hostgroup_id, mysql_servers.hostname, mysql_servers.port
+ 
+It means that other configurations may have been defined before, you can clear this table or delete the configuration of the corresponding host
+MySQL [(none)]> select * from mysql_servers;
+MySQL [(none)]> delete from mysql_servers;
+Query OK, 6 rows affected (0.000 sec)
+
+Check whether these 3 nodes are inserted successfully and their status.
+MySQL [(none)]> select * from mysql_servers\G;
+*************************** 1. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.211
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+*************************** 2. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.212
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+*************************** 3. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.213
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+6 rows in set (0.000 sec)
+  
+ERROR: No query specified
+  
+After the above modification, load it to RUNTIME and save it to disk. The following two steps are very important, otherwise your configuration information will be gone after you exit and must be saved
+MySQL [(none)]> load mysql servers to runtime;
+Query OK, 0 rows affected (0.006 sec)
+  
+MySQL [(none)]> save mysql servers to disk;
+Query OK, 0 rows affected (0.348 sec)
+```
+
+#### Monitor Doris FE node configuration
+
+After adding doris fe nodes, you also need to monitor these back-end nodes. For multiple FE high-availability load balancing environments on the backend, this is necessary because ProxySQL needs to be automatically adjusted by the read_only value of each node
+
+Whether they belong to the read group or the write group.
+
+First create a user name for monitoring on the back-end master main data node
+
+```sql
+Execute on the node of the doris fe master master database:
+# mysql -P9030 -uroot -p 
+mysql> create user monitor@'192.168.9.%' identified by 'P@ssword1!';
+Query OK, 0 rows affected (0.03 sec)
+mysql> grant ADMIN_PRIV on *.* to monitor@'192.168.9.%';
+Query OK, 0 rows affected (0.02 sec)
+ 
+Then go back to the mysql-proxy proxy layer node to configure monitoring
+# mysql -uadmin -padmin -P6032 -h127.0.0.1
+MySQL [(none)]> set mysql-monitor_username='monitor';
+Query OK, 1 row affected (0.000 sec)
+ 
+MySQL [(none)]> set mysql-monitor_password='P@ssword1!';
+Query OK, 1 row affected (0.000 sec)
+ 
+After modification, load to RUNTIME and save to disk
+MySQL [(none)]> load mysql variables to runtime;
+Query OK, 0 rows affected (0.001 sec)
+ 
+MySQL [(none)]> save mysql variables to disk;
+Query OK, 94 rows affected (0.079 sec)
+ 
+Verify the monitoring results: The indicators of the ProxySQL monitoring module are stored in the log table of the monitor library.
+The following is the monitoring of whether the connection is normal (monitoring of connect indicators):
+Note: There may be many connect_errors, this is because there is an error when the monitoring information is not configured. After the configuration, if the result of connect_error is NULL, it means normal。
+MySQL [(none)]> select * from mysql_server_connect_log;
++---------------+------+------------------+-------------------------+---------------+
+| hostname      | port | time_start_us    | connect_success_time_us | connect_error |
++---------------+------+------------------+-------------------------+---------------+
+| 192.168.9.211 | 9030 | 1548665195883957 | 762                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665195894099 | 399                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665195904266 | 483                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665255883715 | 824                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665255893942 | 656                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665495884125 | 615                     | NULL          |
+| 192.168.9.212 | 9030  | 1548665495894254 | 441                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665495904479 | 638                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665512917846 | 487                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665512928071 | 994                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665512938268 | 613                     | NULL          |
++---------------+------+------------------+-------------------------+---------------+
+20 rows in set (0.000 sec)
+The following is the monitoring of heartbeat information (monitoring of ping indicators)
+MySQL [(none)]> select * from mysql_server_ping_log;
++---------------+------+------------------+----------------------+------------+
+| hostname      | port | time_start_us    | ping_success_time_us | ping_error |
++---------------+------+------------------+----------------------+------------+
+| 192.168.9.211 | 9030 | 1548665195883407 | 98                   | NULL       |
+| 192.168.9.212 | 9030 | 1548665195885128 | 119                  | NULL       |
+...........
+| 192.168.9.213 | 9030 | 1548665415889362 | 106                  | NULL       |
+| 192.168.9.213 | 9030 | 1548665562898295 | 97                   | NULL       |
++---------------+------+------------------+----------------------+------------+
+110 rows in set (0.001 sec)
+ 
+The read_only log is also empty at this time (normally, when the new environment is configured, this read-only log is empty)
+MySQL [(none)]> select * from mysql_server_read_only_log;
+Empty set (0.000 sec)
+
+All 3 nodes are in the group with hostgroup_id=10.
+Now, load the modification of the mysql_replication_hostgroups table just now to RUNTIME to take effect。
+MySQL [(none)]> load mysql servers to runtime;
+Query OK, 0 rows affected (0.003 sec)
+ 
+MySQL [(none)]> save mysql servers to disk;
+Query OK, 0 rows affected (0.361 sec)
+
+
+MySQL [(none)]> select hostgroup_id,hostname,port,status,weight from mysql_servers;
++--------------+---------------+------+--------+--------+
+| hostgroup_id | hostname      | port | status | weight |
++--------------+---------------+------+--------+--------+
+| 10           | 192.168.9.211 | 9030 | ONLINE | 1      |
+| 20           | 192.168.9.212 | 9030 | ONLINE | 1      |
+| 20           | 192.168.9.213 | 9030 | ONLINE | 1      |
++--------------+---------------+------+--------+--------+
+3 rows in set (0.000 sec)
+```
+
+#### Configure Doris users
+
+All the above configurations are about the back-end Doris FE node. Now you can configure the SQL statements, including: the user who sends the SQL statement, the routing rules of the SQL statement, the cache of the SQL query, the rewriting of the SQL statement, and so on.
+
+This section is the user configuration used by the SQL request, such as the root user. This requires that we need to add relevant users to the back-end Doris FE node first. Here are examples of two user names root and doris.
+
+```sql
+First, execute on the Doris FE master master database node:
+# mysql -P9030 -uroot -p
+.........
+
+mysql> create user doris@'%' identified by 'P@ssword1!';
+Query OK, 0 rows affected, 1 warning (0.04 sec)
+ 
+mysql> grant ADMIN_PRIV on *.* to doris@'%';
+Query OK, 0 rows affected, 1 warning (0.03 sec)
+ 
+ 
+Then go back to the mysql-proxy proxy layer node, configure the mysql_users table, and add the two users just now to the table.
+admin> insert into mysql_users(username,password,default_hostgroup) values('root','',10);
+Query OK, 1 row affected (0.001 sec)
+  
+admin> insert into mysql_users(username,password,default_hostgroup) values('doris','P@ssword1!',10);
+Query OK, 1 row affected (0.000 sec)
+  
+admin> load mysql users to runtime;
+Query OK, 0 rows affected (0.001 sec)
+  
+admin> save mysql users to disk;
+Query OK, 0 rows affected (0.108 sec)
+  
+The mysql_users table has many fields. The three main fields are username, password, and default_hostgroup:
+      -username: The username used by the front-end to connect to ProxySQL and ProxySQL to route SQL statements to MySQL.
+      -password: the password corresponding to the user name. It can be a plain text password or a hash password. If you want to use the hash password, you can execute it on a MySQL node first  select password(PASSWORD), and then copy the encryption result to this field.
+      -default_hostgroup: The default routing destination of the username. For example, when the field value of the specified root user is 10, the SQL statement sent by the root user is used by default
+    In this case, it will be routed to a node in the hostgroup_id=10 group.
+ 
+admin> select * from mysql_users\G
+*************************** 1. row ***************************
+              username: root
+              password: 
+                active: 1
+               use_ssl: 0
+     default_hostgroup: 10
+        default_schema: NULL
+         schema_locked: 0
+transaction_persistent: 1
+          fast_forward: 0
+               backend: 1
+              frontend: 1
+       max_connections: 10000
+*************************** 2. row ***************************
+              username: doris
+              password: P@ssword1!
+                active: 1
+               use_ssl: 0
+     default_hostgroup: 10
+        default_schema: NULL
+         schema_locked: 0
+transaction_persistent: 1
+          fast_forward: 0
+               backend: 1
+              frontend: 1
+       max_connections: 10000
+2 rows in set (0.000 sec)
+  
+Although the mysql_users table is not described in detail here, only users with active=1 are valid users, and the default active is 1.
+
+MySQL [(none)]> load mysql users to runtime;
+Query OK, 0 rows affected (0.001 sec)
+ 
+MySQL [(none)]> save mysql users to disk;
+Query OK, 0 rows affected (0.123 sec)
+
+In this way, you can use the doris username and password to connect to ProxySQL through the sql client
+```
+
+#### Connect to Doris through ProxySQL for testing
+
+Next, use the root user and doris user to test whether they can be routed to the default hostgroup_id=10 (it is a write group) to read data. The following is connected through the forwarding port 6033, the connection is forwarded to the real back-end database!
+
+```sql
+#mysql -uroot -p -P6033 -hdoris01 -e "show databases;"
+Enter password: 
+ERROR 9001 (HY000) at line 1: Max connect timeout reached while reaching hostgroup 10 after 10000ms
+At this time, an error was found, and it was not forwarded to the real doris fe on the backend.
+Through the log, you can see that there is set autocommit=0 to open the transaction
+Check the configuration found:
+
+mysql-forward_autocommit=false
+mysql-autocommit_false_is_transaction=false
+
+We don’t need to read and write separation here, just turn these two parameters into true directly through the following statement.
+mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-forward_autocommit';
+Query OK, 1 row affected (0.00 sec)
+
+mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-autocommit_false_is_transaction';
+Query OK, 1 row affected (0.01 sec)
+
+mysql>  LOAD MYSQL VARIABLES TO RUNTIME;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> SAVE MYSQL VARIABLES TO DISK;
+Query OK, 98 rows affected (0.12 sec)
+
+Then we try again and it shows success
+[root@doris01 ~]# mysql -udoris -pP@ssword1! -P6033 -h192.168.9.211  -e "show databases;"
+Warning: Using a password on the command line interface can be insecure.
++--------------------+
+| Database           |
++--------------------+
+| doris_audit_db     |
+| information_schema |
+| retail             |
++--------------------+
+```
+
+OK, that's the end, you can use Mysql client, JDBC, etc. to connect to ProxySQL to operate your doris.
+
+## Nginx TCP reverse proxy method
+
+### Overview
+
+Nginx can implement load balancing of HTTP and HTTPS protocols, as well as load balancing of TCP protocol. So, the question is, can the load balancing of the Apache Doris database be achieved through Nginx? The answer is: yes. Next, let's discuss how to use Nginx to achieve load balancing of Apache Doris.
+
+### Environmental preparation
+
+**Note: Using Nginx to achieve load balancing of Apache Doris database, the premise is to build an Apache Doris environment. The IP and port of Apache Doris FE are as follows. Here I use one FE to demonstrate, multiple FEs only You need to add multiple FE IP addresses and ports in the configuration**
+
+The Apache Doris and port to access MySQL through Nginx are shown below.
+
+```
+IP: 172.31.7.119 
+端口: 9030
+```
+
+### Install dependencies
+
+```bash
+sudo apt-get install build-essential
+sudo apt-get install libpcre3 libpcre3-dev 
+sudo apt-get install zlib1g-dev
+sudo apt-get install openssl libssl-dev
+```
+
+### Install Nginx
+
+```bash
+sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
+sudo tar zxvf nginx-1.18.0.tar.gz
+cd nginx-1.18.0
+sudo ./configure --prefix=/usr/local/nginx --with-stream --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
+sudo make && make install
+```
+
+### Configure reverse proxy
+
+Here is a new configuration file
+
+```bash
+vim /usr/local/nginx/conf/default.conf
+```
+
+Then add the following in it
+
+```bash
+events {
+worker_connections 1024;
+}
+stream {
+  upstream mysqld {
+      hash $remote_addr consistent;
+      server 172.31.7.119:9030 weight=1 max_fails=2 fail_timeout=60s;
+      ##注意这里如果是多个FE,加载这里就行了
+  }
+  ###这里是配置代理的端口,超时时间等
+  server {
+      listen 6030;
+      proxy_connect_timeout 30s;
+      proxy_timeout 30s;
+      proxy_pass mysqld;
+  }
+}
+```
+
+### Start Nginx
+
+Start the specified configuration file
+
+```bash
+cd /usr/local/nginx
+/usr/local/nginx/sbin/nginx -c conf.d/default.conf
+```
+
+### verify
+
+```
+mysql -uroot -P6030 -h172.31.7.119
+```
+
+Parameter explanation: -u specifies the Doris username -p specifies the Doris password, my password here is empty, so there is no -h specifies the Nginx proxy server IP-P specifies the port
+
+```sql
+mysql -uroot -P6030 -h172.31.7.119
+Welcome to the MySQL monitor.  Commands end with ; or \g.
+Your MySQL connection id is 13
+Server version: 5.1.0 Doris version 0.15.1-rc09-Unknown
+
+Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+Oracle is a registered trademark of Oracle Corporation and/or its
+affiliates. Other names may be trademarks of their respective
+owners.
+
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+mysql> show databases;
++--------------------+
+| Database           |
++--------------------+
+| information_schema |
+| test               |
++--------------------+
+2 rows in set (0.00 sec)
+
+mysql> use test;
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+
+Database changed
+mysql> show tables;
++------------------+
+| Tables_in_test   |
++------------------+
+| dwd_product_live |
++------------------+
+1 row in set (0.00 sec)
+mysql> desc dwd_product_live;
++-----------------+---------------+------+-------+---------+---------+
+| Field           | Type          | Null | Key   | Default | Extra   |
++-----------------+---------------+------+-------+---------+---------+
+| dt              | DATE          | Yes  | true  | NULL    |         |
+| proId           | BIGINT        | Yes  | true  | NULL    |         |
+| authorId        | BIGINT        | Yes  | true  | NULL    |         |
+| roomId          | BIGINT        | Yes  | true  | NULL    |         |
+| proTitle        | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| proLogo         | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| shopId          | BIGINT        | Yes  | false | NULL    | REPLACE |
+| shopTitle       | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| profrom         | INT           | Yes  | false | NULL    | REPLACE |
+| proCategory     | BIGINT        | Yes  | false | NULL    | REPLACE |
+| proPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| couponPrice     | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| livePrice       | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| volume          | BIGINT        | Yes  | false | NULL    | REPLACE |
+| addedTime       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| offTimeUnix     | BIGINT        | Yes  | false | NULL    | REPLACE |
+| offTime         | BIGINT        | Yes  | false | NULL    | REPLACE |
+| createTime      | BIGINT        | Yes  | false | NULL    | REPLACE |
+| createTimeUnix  | BIGINT        | Yes  | false | NULL    | REPLACE |
+| amount          | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| views           | BIGINT        | Yes  | false | NULL    | REPLACE |
+| commissionPrice | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| proCostPrice    | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| proCode         | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| proStatus       | INT           | Yes  | false | NULL    | REPLACE |
+| status          | INT           | Yes  | false | NULL    | REPLACE |
+| maxPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| liveView        | BIGINT        | Yes  | false | NULL    | REPLACE |
+| firstCategory   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| secondCategory  | BIGINT        | Yes  | false | NULL    | REPLACE |
+| thirdCategory   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| fourCategory    | BIGINT        | Yes  | false | NULL    | REPLACE |
+| minPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| liveVolume      | BIGINT        | Yes  | false | NULL    | REPLACE |
+| liveClick       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| extensionId     | VARCHAR(128)  | Yes  | false | NULL    | REPLACE |
+| beginTime       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| roomTitle       | TEXT          | Yes  | false | NULL    | REPLACE |
+| beginTimeUnix   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| nickname        | TEXT          | Yes  | false | NULL    | REPLACE |
++-----------------+---------------+------+-------+---------+---------+
+40 rows in set (0.06 sec)
+```
+
diff --git a/new-docs/en/admin-manual/upgrade.md b/new-docs/en/admin-manual/cluster-management/upgrade.md
similarity index 100%
rename from new-docs/en/admin-manual/upgrade.md
rename to new-docs/en/admin-manual/cluster-management/upgrade.md
diff --git a/new-docs/en/admin-manual/elastic-expansion.md b/new-docs/en/admin-manual/elastic-expansion.md
deleted file mode 100644
index 889addbe0e..0000000000
--- a/new-docs/en/admin-manual/elastic-expansion.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-{
-    "title": "Elastic scaling",
-    "language": "en"
-}
-
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Elastic scaling
diff --git a/new-docs/en/admin-manual/sql-interception.md b/new-docs/en/admin-manual/sql-interception.md
new file mode 100644
index 0000000000..e9772a94f4
--- /dev/null
+++ b/new-docs/en/admin-manual/sql-interception.md
@@ -0,0 +1,94 @@
+---
+{
+    "title": "Sql Interception",
+    "language": "en"
+}
+---
+
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# SQL Block Rule
+
+This function is only used to limit the query statement, and does not limit the execution of the explain statement.
+Support SQL block rule by user level:
+
+1. by regex way to deny specify SQL
+
+2. by setting partition_num, tablet_num, cardinality, check whether a sql reaches one of the limitations
+    - partition_num, tablet_num, cardinality could be set together, and once reach one of them, the sql will be blocked.
+
+## Rule
+
+SQL block rule CRUD
+- create SQL block rule,For more creation syntax see[CREATE SQL BLOCK RULE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Create/CREATE-SQL-BLOCK-RULE.html)
+    - sql:Regex pattern,Special characters need to be translated, "NULL" by default
+    - sqlHash: Sql hash value, Used to match exactly, We print it in fe.audit.log, This parameter is the only choice between sql and sql, "NULL" by default
+    - partition_num: Max number of partitions will be scanned by a scan node, 0L by default
+    - tablet_num: Max number of tablets will be scanned by a scan node, 0L by default
+    - cardinality: An inaccurate number of scan rows of a scan node, 0L by default
+    - global: Whether global(all users)is in effect, false by default
+    - enable:Whether to enable block rule,true by default
+```sql
+CREATE SQL_BLOCK_RULE test_rule 
+PROPERTIES(
+  "sql"="select * from order_analysis",
+  "global"="false",
+  "enable"="true",
+  "sqlHash"=""
+)
+```
+When we execute the sql that we defined in the rule just now, an exception error will be returned. An example is as follows:
+```sql
+mysql> select * from order_analysis;
+ERROR 1064 (HY000): errCode = 2, detailMessage = sql match regex sql block rule: order_analysis_rule
+```
+
+- create test_rule2, limits the maximum number of scanning partitions to 30 and the maximum scanning cardinality to 10 billion rows. As shown in the following example:
+```sql
+CREATE SQL_BLOCK_RULE test_rule2 PROPERTIES("partition_num" = "30", "cardinality"="10000000000","global"="false","enable"="true")
+```
+
+- show configured SQL block rules, or show all rules if you do not specify a rule name,Please see the specific grammar [SHOW SQL BLOCK RULE](../sql-manual/sql-reference-v2/Show-Statements/SHOW-SQL-BLOCK-RULE.html)
+
+```sql
+SHOW SQL_BLOCK_RULE [FOR RULE_NAME]
+```
+- alter SQL block rule,Allows changes sql/sqlHash/global/enable/partition_num/tablet_num/cardinality anyone,Please see the specific grammar[ALTER SQL BLOCK  RULE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Alter/ALTER-SQL-BLOCK-RULE.html)
+    - sql and sqlHash cannot be set both. It means if sql or sqlHash is set in a rule, another property will never be allowed to be altered
+    - sql/sqlHash and partition_num/tablet_num/cardinality cannot be set together. For example, partition_num is set in a rule, then sql or sqlHash will never be allowed to be altered.
+```sql
+ALTER SQL_BLOCK_RULE test_rule PROPERTIES("sql"="select \\* from test_table","enable"="true")
+```
+
+```
+ALTER SQL_BLOCK_RULE test_rule2 PROPERTIES("partition_num" = "10","tablet_num"="300","enable"="true")
+```
+
+- drop SQL block rule,Support multiple rules, separated by `,`,Please see the specific grammar[DROP SQL BLOCK RULR](../sql-manual/sql-reference-v2/Data-Definition-Statements/Drop/DROP-SQL-BLOCK-RULE.html)
+```sql
+DROP SQL_BLOCK_RULE test_rule1,test_rule2
+```
+
+## User bind rules
+If global=false is configured, the rules binding for the specified user needs to be configured, with multiple rules separated by ', '
+```sql
+SET PROPERTY [FOR 'jack'] 'sql_block_rules' = 'test_rule1,test_rule2'
+```
+
diff --git a/new-docs/en/data-operate/import/import-scenes/external-storage-load.md b/new-docs/en/data-operate/import/import-scenes/external-storage-load.md
index 989379f90a..e9d7dfd313 100644
--- a/new-docs/en/data-operate/import/import-scenes/external-storage-load.md
+++ b/new-docs/en/data-operate/import/import-scenes/external-storage-load.md
@@ -1,7 +1,7 @@
 ---
 {
-    "title": "外部存储数据导入",
-    "language": "zh-CN"
+    "title": "External storage data import",
+    "language": "en"
 }
 ---
 
@@ -24,4 +24,153 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# 外部存储数据导入
\ No newline at end of file
+# External storage data import
+
+The following mainly introduces how to import data stored in an external system. For example (HDFS, AWS S3, BOS of Baidu Cloud, OSS of Alibaba Cloud, COS of Tencent Cloud)
+## HDFS LOAD
+
+### Ready to work
+
+Upload the files to be imported to HDFS. For specific commands, please refer to [HDFS upload command](https://hadoop.apache.org/docs/r3.3.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#put )
+
+### start import
+
+Hdfs load creates an import statement. The import method is basically the same as [Broker Load](../../../data-operate/import/import-way/broker-load-manual.html), only need to `WITH BROKER broker_name () ` statement with the following
+
+```
+  LOAD LABEL db_name.label_name 
+  (data_desc, ...)
+  WITH HDFS
+  [PROPERTIES (key1=value1, ... )]
+```
+
+1. create a table
+
+   ```sql
+   CREATE TABLE IF NOT EXISTS load_hdfs_file_test
+   (
+       id INT,
+       age TINYINT,
+       name VARCHAR(50)
+   )
+   unique key(id)
+   DISTRIBUTED BY HASH(id) BUCKETS 3;
+   ```
+
+2. Import data Execute the following command to import HDFS files:
+
+   ```sql
+   LOAD LABEL demo.label_20220402
+       (
+       DATA INFILE("hdfs://host:port/tmp/test_hdfs.txt")
+       INTO TABLE `load_hdfs_file_test`
+       COLUMNS TERMINATED BY "\t"            
+       (id,age,name)
+       )
+       with HDFS (
+       "fs.defaultFS"="hdfs://testFs",
+       "hdfs_user"="user"
+       )
+       PROPERTIES
+       (
+       "timeout"="1200",
+       "max_filter_ratio"="0.1"
+       );
+   ```
+
+   For parameter introduction, please refer to [Broker Load](../../../data-operate/import/import-way/broker-load-manual.html), HA cluster creation syntax, view through `HELP BROKER LOAD`
+
+3. Check import status
+
+   Broker load is an asynchronous import method. The specific import results can be accessed through [SHOW LOAD](../../../sql-manual/sql-reference-v2/Show-Statements/SHOW-LOAD.html#show- load) command to view
+   
+   ```
+   mysql> show load order by createtime desc limit 1\G;
+   *************************** 1. row ***************************
+            JobId: 41326624
+            Label: broker_load_2022_04_15
+            State: FINISHED
+         Progress: ETL:100%; LOAD:100%
+             Type: BROKER
+          EtlInfo: unselected.rows=0; dpp.abnorm.ALL=0; dpp.norm.ALL=27
+         TaskInfo: cluster:N/A; timeout(s):1200; max_filter_ratio:0.1
+         ErrorMsg: NULL
+       CreateTime: 2022-04-01 18:59:06
+     EtlStartTime: 2022-04-01 18:59:11
+    EtlFinishTime: 2022-04-01 18:59:11
+    LoadStartTime: 2022-04-01 18:59:11
+   LoadFinishTime: 2022-04-01 18:59:11
+              URL: NULL
+       JobDetails: {"Unfinished backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[]},"ScannedRows":27,"TaskNumber":1,"All backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[36728051]},"FileNumber":1,"FileSize":5540}
+   1 row in set (0.01 sec)
+   ```
+   
+   
+
+## S3 LOAD
+
+Starting from version 0.14, Doris supports the direct import of data from online storage systems that support the S3 protocol through the S3 protocol.
+
+This document mainly introduces how to import data stored in AWS S3. It also supports the import of other object storage systems that support the S3 protocol, such as Baidu Cloud’s BOS, Alibaba Cloud’s OSS and Tencent Cloud’s COS, etc.
+### Applicable scenarios
+
+* Source data in S3 protocol accessible storage systems, such as S3, BOS.
+* Data volumes range from tens to hundreds of GB.
+
+### Preparing
+1. Standard AK and SK
+   First, you need to find or regenerate AWS `Access keys`, you can find the generation method in `My Security Credentials` of AWS console, as shown in the following figure:
+   [AK_SK](/images/aws_ak_sk.png)
+   Select `Create New Access Key` and pay attention to save and generate AK and SK.
+2. Prepare REGION and ENDPOINT
+   REGION can be selected when creating the bucket or can be viewed in the bucket list. ENDPOINT can be found through REGION on the following page [AWS Documentation](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region)
+
+Other cloud storage systems can find relevant information compatible with S3 in corresponding documents
+
+### Start Loading
+Like [Broker Load](../../../data-operate/import/import-way/broker-load-manual.html)  just replace `WITH BROKER broker_name ()` with
+```
+    WITH S3
+    (
+        "AWS_ENDPOINT" = "AWS_ENDPOINT",
+        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+        "AWS_REGION" = "AWS_REGION"
+    )
+```
+
+example:
+```
+    LOAD LABEL example_db.exmpale_label_1
+    (
+        DATA INFILE("s3://your_bucket_name/your_file.txt")
+        INTO TABLE load_test
+        COLUMNS TERMINATED BY ","
+    )
+    WITH S3
+    (
+        "AWS_ENDPOINT" = "AWS_ENDPOINT",
+        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+        "AWS_REGION" = "AWS_REGION"
+    )
+    PROPERTIES
+    (
+        "timeout" = "3600"
+    );
+```
+
+### FAQ
+
+S3 SDK uses virtual-hosted style by default. However, some object storage systems may not be enabled or support virtual-hosted style access. At this time, we can add the `use_path_style` parameter to force the use of path style:
+
+```
+   WITH S3
+   (
+         "AWS_ENDPOINT" = "AWS_ENDPOINT",
+         "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+         "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+         "AWS_REGION" = "AWS_REGION",
+         "use_path_style" = "true"
+   )
+```
diff --git a/new-docs/zh-CN/admin-manual/cluster-admin/doris-ha.md b/new-docs/zh-CN/admin-manual/cluster-admin/doris-ha.md
deleted file mode 100644
index 31d8f98841..0000000000
--- a/new-docs/zh-CN/admin-manual/cluster-admin/doris-ha.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-{
-    "title": "Doris高可用",
-    "language": "zh-CN"
-}
-
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
diff --git a/new-docs/zh-CN/admin-manual/cluster-management/elastic-expansion.md b/new-docs/zh-CN/admin-manual/cluster-management/elastic-expansion.md
new file mode 100644
index 0000000000..f927cf243b
--- /dev/null
+++ b/new-docs/zh-CN/admin-manual/cluster-management/elastic-expansion.md
@@ -0,0 +1,141 @@
+---
+{
+    "title": "弹性扩缩容",
+    "language": "zh-CN"
+}
+
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# 扩容缩容
+
+Doris 可以很方便的扩容和缩容 FE、BE、Broker 实例。
+
+## FE 扩容和缩容
+
+可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
+
+用户可以通过 mysql 客户端登陆 Master FE。通过:
+
+`SHOW PROC '/frontends';`
+
+来查看当前 FE 的节点情况。
+
+也可以通过前端页面连接:```http://fe_hostname:fe_http_port/frontend``` 或者 ```http://fe_hostname:fe_http_port/system?path=//frontends``` 来查看 FE 节点的情况。
+
+以上方式,都需要 Doris 的 root 用户权限。
+
+FE 节点的扩容和缩容过程,不影响当前系统运行。
+
+### 增加 FE 节点
+
+FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。
+
+第一个启动的 FE 自动成为 Leader。在此基础上,可以添加若干 Follower 和 Observer。
+
+添加 Follower 或 Observer。使用 mysql-client 连接到已启动的 FE,并执行:
+
+`ALTER SYSTEM ADD FOLLOWER "follower_host:edit_log_port";`
+
+或
+
+`ALTER SYSTEM ADD OBSERVER "observer_host:edit_log_port";`
+
+其中 follower\_host和observer\_host 为 Follower 或 Observer 所在节点 ip,edit\_log\_port 在其配置文件 fe.conf 中。
+
+配置及启动 Follower 或 Observer。Follower 和 Observer 的配置同 Leader 的配置。第一次启动时,需执行以下命令:
+
+`./bin/start_fe.sh --helper leader_fe_host:edit_log_port --daemon`
+
+其中 leader\_fe\_host 为 Leader 所在节点 ip, edit\_log\_port 在 Leader 的配置文件 fe.conf 中。--helper 参数仅在 follower 和 observer 第一次启动时才需要。
+
+查看 Follower 或 Observer 运行状态。使用 mysql-client 连接到任一已启动的 FE,并执行:SHOW PROC '/frontends'; 可以查看当前已加入集群的 FE 及其对应角色。
+
+> FE 扩容注意事项:
+> 1. Follower FE(包括 Leader)的数量必须为奇数,建议最多部署 3 个组成高可用(HA)模式即可。
+> 2. 当 FE 处于高可用部署时(1个 Leader,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
+> 3. 通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而通常 3 个即可满足绝大部分需求。
+> 4. helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。
+
+### 删除 FE 节点
+
+使用以下命令删除对应的 FE 节点:
+
+```ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";```
+
+> FE 缩容注意事项:
+> 1. 删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数。
+
+## BE 扩容和缩容
+
+用户可以通过 mysql-client 登陆 Leader FE。通过:
+
+```SHOW PROC '/backends';```
+
+来查看当前 BE 的节点情况。
+
+也可以通过前端页面连接:```http://fe_hostname:fe_http_port/backend``` 或者 ```http://fe_hostname:fe_http_port/system?path=//backends``` 来查看 BE 节点的情况。
+
+以上方式,都需要 Doris 的 root 用户权限。
+
+BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 [Tablet 负载均衡文档](../administrator-guide/operation/tablet-repair-and-balance.md)。
+
+### 增加 BE 节点
+
+BE 节点的增加方式同 **BE 部署** 一节中的方式,通过 `ALTER SYSTEM ADD BACKEND` 命令增加 BE 节点。
+
+> BE 扩容注意事项:
+> 1. BE 扩容后,Doris 会自动根据负载情况,进行数据均衡,期间不影响使用。
+
+### 删除 BE 节点
+
+删除 BE 节点有两种方式:DROP 和 DECOMMISSION
+
+DROP 语句如下:
+
+```ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";```
+
+**注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。**
+
+DECOMMISSION 语句如下:
+
+```ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";```
+
+> DECOMMISSION 命令说明:
+> 1. 该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
+> 2. 该命令是一个异步操作。执行后,可以通过 ```SHOW PROC '/backends';``` 看到该 BE 节点的 isDecommission 状态为 true。表示该节点正在进行下线。
+> 3. 该命令**不一定执行成功**。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且 BE 会一直处于 isDecommission 为 true 的状态。
+> 4. DECOMMISSION 的进度,可以通过 ```SHOW PROC '/backends';``` 中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。
+> 5. 该操作可以通过:  
+     > 		```CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";```  
+     > 	命令取消。取消后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡
+
+**对于多租户部署环境下,BE 节点的扩容和缩容,请参阅 [多租户设计文档](../administrator-guide/operation/multi-tenant.md)。**
+
+## Broker 扩容缩容
+
+Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
+
+```ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";```
+```ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";```
+```ALTER SYSTEM DROP ALL BROKER broker_name;```
+
+Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
\ No newline at end of file
diff --git a/new-docs/zh-CN/admin-manual/cluster-management/load-balancing.md b/new-docs/zh-CN/admin-manual/cluster-management/load-balancing.md
new file mode 100644
index 0000000000..2a8ae08c16
--- /dev/null
+++ b/new-docs/zh-CN/admin-manual/cluster-management/load-balancing.md
@@ -0,0 +1,635 @@
+---
+{
+    "title": "负载均衡",
+    "language": "zh-CN"
+}
+
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# 负载均衡
+
+当部署多个 FE 节点时,用户可以在多个 FE 之上部署负载均衡层来实现 Doris 的高可用。~~
+
+## 代码实现
+
+自己在应用层代码进行重试和负载均衡。比如发现一个连接挂掉,就自动在其他连接上进行重试。应用层代码重试需要应用自己配置多个 doris 前端节点地址。
+
+## JDBC Connector
+
+如果使用 mysql jdbc connector 来连接 Doris,可以使用 jdbc 的自动重试机制:
+
+```
+jdbc:mysql:loadbalance://[host:port],[host:port].../[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue
+```
+
+详细可以参考[Mysql官网文档](https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-j2ee-concepts-managing-load-balanced-connections.html)
+
+## ProxySQL 方式
+
+ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。
+
+Doris 的 FE 进程负责接收用户连接和查询请求,其本身是可以横向扩展且高可用的,但是需要用户在多个 FE 上架设一层 proxy,来实现自动的连接负载均衡。
+
+### 安装ProxySQL (yum方式)
+
+```bash
+配置yum源
+# vim /etc/yum.repos.d/proxysql.repo
+[proxysql_repo]
+name= ProxySQL YUM repository
+baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
+gpgcheck=1
+gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
+ 
+执行安装
+# yum clean all
+# yum makecache
+# yum -y install proxysql
+查看版本  
+# proxysql --version
+ProxySQL version 1.4.13-15-g69d4207, codename Truls
+设置开机自启动
+# systemctl enable proxysql
+# systemctl start proxysql      
+# systemctl status proxysql
+启动后会监听两个端口, 默认为6032和6033。6032端口是ProxySQL的管理端口,6033是ProxySQL对外提供服务的端口 (即连接到转发后端的真正数据库的转发端口)。
+# netstat -tunlp
+Active Internet connections (only servers)
+Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
+tcp        0      0 0.0.0.0:6032            0.0.0.0:*               LISTEN      23940/proxysql    
+tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN
+```
+
+### ProxySQL 配置
+
+ProxySQL 有配置文件 `/etc/proxysql.cnf` 和配置数据库文件`/var/lib/proxysql/proxysql.db`。**这里需要特别注意**:如果存在如果存在`"proxysql.db"`文件(在`/var/lib/proxysql`目录下),则 ProxySQL 服务只有在第一次启动时才会去读取`proxysql.cnf文件`并解析;后面启动会就不会读取`proxysql.cnf`文件了!如果想要让proxysql.cnf 文件里的配置在重启 proxysql 服务后生效(即想要让 proxysql 重启时读取并解析 proxysql.cnf配置文件),则需要先删除 `/var/lib/proxysql/proxysql.db`数据库文件,然后再重启 proxysql 服务。这样就相当于初始化启动 proxysql 服务了,会再次生产一个纯净的 proxysql.db 数据库文件(如果之前配置了 proxysql 相关路由规则等,则就会被抹掉)
+
+#### 查看及修改配置文件
+
+这里主要是是几个参数,在下面已经注释出来了,可以根据自己的需要进行修改
+
+```
+# egrep -v "^#|^$" /etc/proxysql.cnf
+datadir="/var/lib/proxysql"         #数据目录
+admin_variables=
+{
+        admin_credentials="admin:admin"  #连接管理端的用户名与密码
+        mysql_ifaces="0.0.0.0:6032"    #管理端口,用来连接proxysql的管理数据库
+}
+mysql_variables=
+{
+        threads=4                #指定转发端口开启的线程数量
+        max_connections=2048
+        default_query_delay=0
+        default_query_timeout=36000000
+        have_compress=true
+        poll_timeout=2000
+        interfaces="0.0.0.0:6033"    #指定转发端口,用于连接后端mysql数据库的,相当于代理作用
+        default_schema="information_schema"
+        stacksize=1048576
+        server_version="5.5.30"        #指定后端mysql的版本
+        connect_timeout_server=3000
+        monitor_username="monitor"
+        monitor_password="monitor"
+        monitor_history=600000
+        monitor_connect_interval=60000
+        monitor_ping_interval=10000
+        monitor_read_only_interval=1500
+        monitor_read_only_timeout=500
+        ping_interval_server_msec=120000
+        ping_timeout_server=500
+        commands_stats=true
+        sessions_sort=true
+        connect_retries_on_failure=10
+}
+mysql_servers =
+(
+)
+mysql_users:
+(
+)
+mysql_query_rules:
+(
+)
+scheduler=
+(
+)
+mysql_replication_hostgroups=
+(
+)
+```
+
+#### 连接 ProxySQL 管理端口测试
+
+```sql
+# mysql -uadmin -padmin -P6032 -hdoris01
+查看main库(默认登陆后即在此库)的global_variables表信息
+MySQL [(none)]> show databases;
++-----+---------------+-------------------------------------+
+| seq | name          | file                                |
++-----+---------------+-------------------------------------+
+| 0   | main          |                                     |
+| 2   | disk          | /var/lib/proxysql/proxysql.db       |
+| 3   | stats         |                                     |
+| 4   | monitor       |                                     |
+| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
++-----+---------------+-------------------------------------+
+5 rows in set (0.000 sec)
+MySQL [(none)]> use main;
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+ 
+Database changed
+MySQL [main]> show tables;
++--------------------------------------------+
+| tables                                     |
++--------------------------------------------+
+| global_variables                           |
+| mysql_collations                           |
+| mysql_group_replication_hostgroups         |
+| mysql_query_rules                          |
+| mysql_query_rules_fast_routing             |
+| mysql_replication_hostgroups               |
+| mysql_servers                              |
+| mysql_users                                |
+| proxysql_servers                           |
+| runtime_checksums_values                   |
+| runtime_global_variables                   |
+| runtime_mysql_group_replication_hostgroups |
+| runtime_mysql_query_rules                  |
+| runtime_mysql_query_rules_fast_routing     |
+| runtime_mysql_replication_hostgroups       |
+| runtime_mysql_servers                      |
+| runtime_mysql_users                        |
+| runtime_proxysql_servers                   |
+| runtime_scheduler                          |
+| scheduler                                  |
++--------------------------------------------+
+20 rows in set (0.000 sec)
+
+```
+
+#### ProxySQL 配置后端 Doris FE
+
+使用 insert 语句添加主机到 mysql_servers 表中,其中:hostgroup_id 为10表示写组,为20表示读组,我们这里不需要读写分离,无所谓随便设置哪一个都可以。
+
+```sql
+[root@mysql-proxy ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1
+............
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.211',9030);
+Query OK, 1 row affected (0.000 sec)
+  
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.212',9030);
+Query OK, 1 row affected (0.000 sec)
+  
+MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.9.213',9030);
+Query OK, 1 row affected (0.000 sec)
+ 
+如果在插入过程中,出现报错:
+ERROR 1045 (#2800): UNIQUE constraint failed: mysql_servers.hostgroup_id, mysql_servers.hostname, mysql_servers.port
+ 
+说明可能之前就已经定义了其他配置,可以清空这张表 或者 删除对应host的配置
+MySQL [(none)]> select * from mysql_servers;
+MySQL [(none)]> delete from mysql_servers;
+Query OK, 6 rows affected (0.000 sec)
+
+查看这3个节点是否插入成功,以及它们的状态。
+MySQL [(none)]> select * from mysql_servers\G;
+*************************** 1. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.211
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+*************************** 2. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.212
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+*************************** 3. row ***************************
+       hostgroup_id: 10
+           hostname: 192.168.9.213
+               port: 9030
+             status: ONLINE
+             weight: 1
+        compression: 0
+    max_connections: 1000
+max_replication_lag: 0
+            use_ssl: 0
+     max_latency_ms: 0
+            comment:
+6 rows in set (0.000 sec)
+  
+ERROR: No query specified
+  
+如上修改后,加载到RUNTIME,并保存到disk,下面两步非常重要,不然退出以后你的配置信息就没了,必须保存
+MySQL [(none)]> load mysql servers to runtime;
+Query OK, 0 rows affected (0.006 sec)
+  
+MySQL [(none)]> save mysql servers to disk;
+Query OK, 0 rows affected (0.348 sec)
+```
+
+#### 监控Doris FE节点配置
+
+添 doris fe 节点之后,还需要监控这些后端节点。对于后端多个FE高可用负载均衡环境来说,这是必须的,因为 ProxySQL 需要通过每个节点的 read_only 值来自动调整
+
+它们是属于读组还是写组。
+
+首先在后端master主数据节点上创建一个用于监控的用户名
+
+```sql
+在doris fe master主数据库节点行执行:
+# mysql -P9030 -uroot -p 
+mysql> create user monitor@'192.168.9.%' identified by 'P@ssword1!';
+Query OK, 0 rows affected (0.03 sec)
+mysql> grant ADMIN_PRIV on *.* to monitor@'192.168.9.%';
+Query OK, 0 rows affected (0.02 sec)
+ 
+然后回到mysql-proxy代理层节点上配置监控
+# mysql -uadmin -padmin -P6032 -h127.0.0.1
+MySQL [(none)]> set mysql-monitor_username='monitor';
+Query OK, 1 row affected (0.000 sec)
+ 
+MySQL [(none)]> set mysql-monitor_password='P@ssword1!';
+Query OK, 1 row affected (0.000 sec)
+ 
+修改后,加载到RUNTIME,并保存到disk
+MySQL [(none)]> load mysql variables to runtime;
+Query OK, 0 rows affected (0.001 sec)
+ 
+MySQL [(none)]> save mysql variables to disk;
+Query OK, 94 rows affected (0.079 sec)
+ 
+验证监控结果:ProxySQL监控模块的指标都保存在monitor库的log表中。
+以下是连接是否正常的监控(对connect指标的监控):
+注意:可能会有很多connect_error,这是因为没有配置监控信息时的错误,配置后如果connect_error的结果为NULL则表示正常。
+MySQL [(none)]> select * from mysql_server_connect_log;
++---------------+------+------------------+-------------------------+---------------+
+| hostname      | port | time_start_us    | connect_success_time_us | connect_error |
++---------------+------+------------------+-------------------------+---------------+
+| 192.168.9.211 | 9030 | 1548665195883957 | 762                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665195894099 | 399                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665195904266 | 483                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665255883715 | 824                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665255893942 | 656                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665495884125 | 615                     | NULL          |
+| 192.168.9.212 | 9030  | 1548665495894254 | 441                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665495904479 | 638                     | NULL          |
+| 192.168.9.211 | 9030 | 1548665512917846 | 487                     | NULL          |
+| 192.168.9.212 | 9030 | 1548665512928071 | 994                     | NULL          |
+| 192.168.9.213 | 9030 | 1548665512938268 | 613                     | NULL          |
++---------------+------+------------------+-------------------------+---------------+
+20 rows in set (0.000 sec)
+以下是对心跳信息的监控(对ping指标的监控)
+MySQL [(none)]> select * from mysql_server_ping_log;
++---------------+------+------------------+----------------------+------------+
+| hostname      | port | time_start_us    | ping_success_time_us | ping_error |
++---------------+------+------------------+----------------------+------------+
+| 192.168.9.211 | 9030 | 1548665195883407 | 98                   | NULL       |
+| 192.168.9.212 | 9030 | 1548665195885128 | 119                  | NULL       |
+...........
+| 192.168.9.213 | 9030 | 1548665415889362 | 106                  | NULL       |
+| 192.168.9.213 | 9030 | 1548665562898295 | 97                   | NULL       |
++---------------+------+------------------+----------------------+------------+
+110 rows in set (0.001 sec)
+ 
+read_only日志此时也为空(正常来说,新环境配置时,这个只读日志是为空的)
+MySQL [(none)]> select * from mysql_server_read_only_log;
+Empty set (0.000 sec)
+
+3个节点都在hostgroup_id=10的组中。
+现在,将刚才mysql_replication_hostgroups表的修改加载到RUNTIME生效。
+MySQL [(none)]> load mysql servers to runtime;
+Query OK, 0 rows affected (0.003 sec)
+ 
+MySQL [(none)]> save mysql servers to disk;
+Query OK, 0 rows affected (0.361 sec)
+
+现在看结果
+MySQL [(none)]> select hostgroup_id,hostname,port,status,weight from mysql_servers;
++--------------+---------------+------+--------+--------+
+| hostgroup_id | hostname      | port | status | weight |
++--------------+---------------+------+--------+--------+
+| 10           | 192.168.9.211 | 9030 | ONLINE | 1      |
+| 20           | 192.168.9.212 | 9030 | ONLINE | 1      |
+| 20           | 192.168.9.213 | 9030 | ONLINE | 1      |
++--------------+---------------+------+--------+--------+
+3 rows in set (0.000 sec)
+```
+
+#### 配置Doris用户
+
+上面的所有配置都是关于后端 Doris FE 节点的,现在可以配置关于 SQL 语句的,包括:发送 SQL 语句的用户、SQL 语句的路由规则、SQL 查询的缓存、SQL 语句的重写等等。
+
+本小节是 SQL 请求所使用的用户配置,例如 root 用户。这要求我们需要先在后端 Doris FE 节点添加好相关用户。这里以 root 和 doris 两个用户名为例.
+
+```sql
+首先,在Doris FE master主数据库节点上执行:
+# mysql -P9030 -uroot -p
+.........
+mysql> create user doris@'%' identified by 'P@ssword1!';
+Query OK, 0 rows affected, 1 warning (0.04 sec)
+ 
+mysql> grant ADMIN_PRIV on *.* to doris@'%';
+Query OK, 0 rows affected, 1 warning (0.03 sec)
+ 
+ 
+然后回到mysql-proxy代理层节点,配置mysql_users表,将刚才的两个用户添加到该表中。
+admin> insert into mysql_users(username,password,default_hostgroup) values('root','',10);
+Query OK, 1 row affected (0.001 sec)
+  
+admin> insert into mysql_users(username,password,default_hostgroup) values('doris','P@ssword1!',10);
+Query OK, 1 row affected (0.000 sec)
+
+加载用户到运行环境中,并将用户信息保存到磁盘
+admin> load mysql users to runtime;
+Query OK, 0 rows affected (0.001 sec)
+  
+admin> save mysql users to disk;
+Query OK, 0 rows affected (0.108 sec)
+  
+mysql_users表有不少字段,最主要的三个字段为username、password和default_hostgroup:
+-  username:前端连接ProxySQL,以及ProxySQL将SQL语句路由给MySQL所使用的用户名。
+-  password:用户名对应的密码。可以是明文密码,也可以是hash密码。如果想使用hash密码,可以先在某个MySQL节点上执行
+   select password(PASSWORD),然后将加密结果复制到该字段。
+-  default_hostgroup:该用户名默认的路由目标。例如,指定root用户的该字段值为10时,则使用root用户发送的SQL语句默认
+   情况下将路由到hostgroup_id=10组中的某个节点。
+ 
+admin> select * from mysql_users\G
+*************************** 1. row ***************************
+              username: root
+              password: 
+                active: 1
+               use_ssl: 0
+     default_hostgroup: 10
+        default_schema: NULL
+         schema_locked: 0
+transaction_persistent: 1
+          fast_forward: 0
+               backend: 1
+              frontend: 1
+       max_connections: 10000
+*************************** 2. row ***************************
+              username: doris
+              password: P@ssword1!
+                active: 1
+               use_ssl: 0
+     default_hostgroup: 10
+        default_schema: NULL
+         schema_locked: 0
+transaction_persistent: 1
+          fast_forward: 0
+               backend: 1
+              frontend: 1
+       max_connections: 10000
+2 rows in set (0.000 sec)
+  
+虽然这里没有详细介绍mysql_users表,但只有active=1的用户才是有效的用户。
+
+MySQL [(none)]> load mysql users to runtime;
+Query OK, 0 rows affected (0.001 sec)
+ 
+MySQL [(none)]> save mysql users to disk;
+Query OK, 0 rows affected (0.123 sec)
+
+这样就可以通过sql客户端,使用doris的用户名密码去连接了ProxySQL了
+```
+
+####  通过 ProxySQL 连接 Doris 进行测试
+
+下面,分别使用 root 用户和 doris 用户测试下它们是否能路由到默认的 hostgroup_id=10 (它是一个写组)读数据。下面是通过转发端口 6033 连接的,连接的是转发到后端真正的数据库!
+
+```sql
+#mysql -uroot -p -P6033 -hdoris01 -e "show databases;"
+Enter password: 
+ERROR 9001 (HY000) at line 1: Max connect timeout reached while reaching hostgroup 10 after 10000ms
+这个时候发现出错,并没有转发到后端真正的doris fe上
+通过日志看到有set autocommit=0 这样开启事务
+检查配置发现:
+mysql-forward_autocommit=false
+mysql-autocommit_false_is_transaction=false
+我们这里不需要读写分离,只需要将这两个参数通过下面语句直接搞成true就可以了
+mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-forward_autocommit';
+Query OK, 1 row affected (0.00 sec)
+
+mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-autocommit_false_is_transaction';
+Query OK, 1 row affected (0.01 sec)
+
+mysql>  LOAD MYSQL VARIABLES TO RUNTIME;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> SAVE MYSQL VARIABLES TO DISK;
+Query OK, 98 rows affected (0.12 sec)
+
+然后我们在重新试一下,显示成功
+[root@doris01 ~]# mysql -udoris -pP@ssword1! -P6033 -h192.168.9.211  -e "show databases;"
+Warning: Using a password on the command line interface can be insecure.
++--------------------+
+| Database           |
++--------------------+
+| doris_audit_db     |
+| information_schema |
+| retail             |
++--------------------+
+```
+
+OK,到此就结束了,你就可以用 Mysql 客户端,JDBC 等任何连接 mysql 的方式连接 ProxySQL 去操作你的 doris 了
+
+## Nginx TCP反向代理方式
+
+### 概述
+
+Nginx能够实现HTTP、HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡。那么,问题来了,可不可以通过Nginx实现Apache Doris数据库的负载均衡呢?答案是:可以。接下来,就让我们一起探讨下如何使用Nginx实现Apache Doris的负载均衡。
+
+### 环境准备
+
+**注意:使用Nginx实现Apache Doris数据库的负载均衡,前提是要搭建Apache Doris的环境,Apache Doris FE的IP和端口分别如下所示, 这里我是用一个FE来做演示的,多个FE只需要在配置里添加多个FE的IP地址和端口即可**
+
+通过Nginx访问MySQL的Apache Doris和端口如下所示。
+
+```
+IP: 172.31.7.119 
+端口: 9030
+```
+
+### 安装依赖
+
+```bash
+sudo apt-get install build-essential
+sudo apt-get install libpcre3 libpcre3-dev 
+sudo apt-get install zlib1g-dev
+sudo apt-get install openssl libssl-dev
+```
+
+### 安装Nginx
+
+```bash
+sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
+sudo tar zxvf nginx-1.18.0.tar.gz
+cd nginx-1.18.0
+sudo ./configure --prefix=/usr/local/nginx --with-stream --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
+sudo make && make install
+```
+
+### 配置反向代理
+
+这里是新建了一个配置文件
+
+```bash
+vim /usr/local/nginx/conf/default.conf
+```
+
+然后在里面加上下面的内容
+
+```bash
+events {
+worker_connections 1024;
+}
+stream {
+  upstream mysqld {
+      hash $remote_addr consistent;
+      server 172.31.7.119:9030 weight=1 max_fails=2 fail_timeout=60s;
+      ##注意这里如果是多个FE,加载这里就行了
+  }
+  ###这里是配置代理的端口,超时时间等
+  server {
+      listen 6030;
+      proxy_connect_timeout 30s;
+      proxy_timeout 30s;
+      proxy_pass mysqld;
+  }
+}
+```
+
+### 启动Nginx
+
+指定配置文件启动
+
+```
+cd /usr/local/nginx
+/usr/local/nginx/sbin/nginx -c conf.d/default.conf
+```
+
+### 验证
+
+```
+mysql -uroot -P6030 -h172.31.7.119
+```
+
+参数解释:-u   指定Doris用户名-p   指定Doris密码,我这里密码是空,所以没有-h   指定Nginx代理服务器IP-P   指定端口
+
+```sql
+mysql -uroot -P6030 -h172.31.7.119
+Welcome to the MySQL monitor.  Commands end with ; or \g.
+Your MySQL connection id is 13
+Server version: 5.1.0 Doris version 0.15.1-rc09-Unknown
+
+Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+Oracle is a registered trademark of Oracle Corporation and/or its
+affiliates. Other names may be trademarks of their respective
+owners.
+
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+mysql> show databases;
++--------------------+
+| Database           |
++--------------------+
+| information_schema |
+| test               |
++--------------------+
+2 rows in set (0.00 sec)
+
+mysql> use test;
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+
+Database changed
+mysql> show tables;
++------------------+
+| Tables_in_test   |
++------------------+
+| dwd_product_live |
++------------------+
+1 row in set (0.00 sec)
+mysql> desc dwd_product_live;
++-----------------+---------------+------+-------+---------+---------+
+| Field           | Type          | Null | Key   | Default | Extra   |
++-----------------+---------------+------+-------+---------+---------+
+| dt              | DATE          | Yes  | true  | NULL    |         |
+| proId           | BIGINT        | Yes  | true  | NULL    |         |
+| authorId        | BIGINT        | Yes  | true  | NULL    |         |
+| roomId          | BIGINT        | Yes  | true  | NULL    |         |
+| proTitle        | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| proLogo         | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| shopId          | BIGINT        | Yes  | false | NULL    | REPLACE |
+| shopTitle       | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| profrom         | INT           | Yes  | false | NULL    | REPLACE |
+| proCategory     | BIGINT        | Yes  | false | NULL    | REPLACE |
+| proPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| couponPrice     | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| livePrice       | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| volume          | BIGINT        | Yes  | false | NULL    | REPLACE |
+| addedTime       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| offTimeUnix     | BIGINT        | Yes  | false | NULL    | REPLACE |
+| offTime         | BIGINT        | Yes  | false | NULL    | REPLACE |
+| createTime      | BIGINT        | Yes  | false | NULL    | REPLACE |
+| createTimeUnix  | BIGINT        | Yes  | false | NULL    | REPLACE |
+| amount          | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| views           | BIGINT        | Yes  | false | NULL    | REPLACE |
+| commissionPrice | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| proCostPrice    | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| proCode         | VARCHAR(1024) | Yes  | false | NULL    | REPLACE |
+| proStatus       | INT           | Yes  | false | NULL    | REPLACE |
+| status          | INT           | Yes  | false | NULL    | REPLACE |
+| maxPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| liveView        | BIGINT        | Yes  | false | NULL    | REPLACE |
+| firstCategory   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| secondCategory  | BIGINT        | Yes  | false | NULL    | REPLACE |
+| thirdCategory   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| fourCategory    | BIGINT        | Yes  | false | NULL    | REPLACE |
+| minPrice        | DECIMAL(18,2) | Yes  | false | NULL    | REPLACE |
+| liveVolume      | BIGINT        | Yes  | false | NULL    | REPLACE |
+| liveClick       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| extensionId     | VARCHAR(128)  | Yes  | false | NULL    | REPLACE |
+| beginTime       | BIGINT        | Yes  | false | NULL    | REPLACE |
+| roomTitle       | TEXT          | Yes  | false | NULL    | REPLACE |
+| beginTimeUnix   | BIGINT        | Yes  | false | NULL    | REPLACE |
+| nickname        | TEXT          | Yes  | false | NULL    | REPLACE |
++-----------------+---------------+------+-------+---------+---------+
+40 rows in set (0.06 sec)
+```
diff --git a/new-docs/zh-CN/admin-manual/cluster-management/upgrade.md b/new-docs/zh-CN/admin-manual/cluster-management/upgrade.md
new file mode 100644
index 0000000000..d9c4fb251b
--- /dev/null
+++ b/new-docs/zh-CN/admin-manual/cluster-management/upgrade.md
@@ -0,0 +1,84 @@
+---
+{
+    "title": "集群升级",
+    "language": "zh-CN"
+}
+---
+
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# 集群升级
+
+Doris 可以通过滚动升级的方式,平滑进行升级。建议按照以下步骤进行安全升级。
+
+> **注:**
+>
+> 1. Doris不支持跨两位版本号进行升级,例如:不能从0.13直接升级到0.15,只能通过0.13.x -> 0.14.x -> 0.15.x,三位版本号可以跨版本升级,比如从0.13.15可以直接升级到0.14.13.1,不必一定要升级0.14.7 或者 0.14.12.1这种版本
+> 1. 以下方式均建立在高可用部署的情况下。即数据 3 副本,FE 高可用情况下。
+
+## 前置工作
+
+1. 关闭集群副本修复和均衡功能
+
+   升级过程中会有节点重启,所以可能会触发不必要的集群均衡和副本修复逻辑。可以先通过以下命令关闭:
+
+   ```
+   # 关闭副本均衡逻辑。关闭后,不会再触发普通表副本的均衡操作。
+   $ mysql-client > admin set frontend config("disable_balance" = "true");
+   
+   # 关闭 colocation 表的副本均衡逻辑。关闭后,不会再触发 colocation 表的副本重分布操作。
+   $ mysql-client > admin set frontend config("disable_colocate_balance" = "true");
+   
+   # 关闭副本调度逻辑。关闭后,所有已产生的副本修复和均衡任务不会再被调度。
+   $ mysql-client > admin set frontend config("disable_tablet_scheduler" = "true");
+   ```
+
+   当集群升级完毕后,在通过以上命令将对应配置设为原值即可。
+
+## 测试 BE 升级正确性
+
+1. 任意选择一个 BE 节点,部署最新的 palo_be 二进制文件。
+2. 重启 BE 节点,通过 BE 日志 be.INFO,查看是否启动成功。
+3. 如果启动失败,可以先排查原因。如果错误不可恢复,可以直接通过 DROP BACKEND 删除该 BE、清理数据后,使用上一个版本的 palo_be 重新启动 BE。然后重新 ADD BACKEND。(**该方法会导致丢失一个数据副本,请务必确保3副本完整的情况下,执行这个操作!!!**)
+
+## 测试 FE 元数据兼容性
+
+0. **重要!!元数据兼容性异常很可能导致数据无法恢复!!**
+1. 单独使用新版本部署一个测试用的 FE 进程(比如自己本地的开发机)。
+2. 修改测试用的 FE 的配置文件 fe.conf,将所有端口设置为**与线上不同**。
+3. 在 fe.conf 添加配置:cluster_id=123456
+4. 在 fe.conf 添加配置:metadata\_failure_recovery=true
+5. 拷贝线上环境 Master FE 的元数据目录 doris-meta 到测试环境
+6. 将拷贝到测试环境中的 doris-meta/image/VERSION 文件中的 cluster_id 修改为 123456(即与第3步中相同)
+7. 在测试环境中,运行 sh bin/start_fe.sh 启动 FE
+8. 通过 FE 日志 fe.log 观察是否启动成功。
+9. 如果启动成功,运行 sh bin/stop_fe.sh 停止测试环境的 FE 进程。
+10. **以上 2-6 步的目的是防止测试环境的FE启动后,错误连接到线上环境中。**
+
+## 升级准备
+
+1. 在完成数据正确性验证后,将 BE 和 FE 新版本的二进制文件分发到各自目录下。
+2. 通常小版本升级,BE 只需升级 palo_be;而 FE 只需升级 palo-fe.jar。如果是大版本升级,则可能需要升级其他文件(包括但不限于 bin/ lib/ 等等)如果你不清楚是否需要替换其他文件,建议全部替换。
+
+## 滚动升级
+
+1. 确认新版本的文件部署完成后。逐台重启 FE 和 BE 实例即可。
+2. 建议逐台重启 BE 后,再逐台重启 FE。因为通常 Doris 保证 FE 到 BE 的向后兼容性,即老版本的 FE 可以访问新版本的 BE。但可能不支持老版本的 BE 访问新版本的 FE。
+3. 建议确认前一个实例启动成功后,再重启下一个实例。实例启动成功的标识,请参阅安装部署文档。
diff --git a/new-docs/zh-CN/admin-manual/elastic-expansion.md b/new-docs/zh-CN/admin-manual/elastic-expansion.md
deleted file mode 100644
index 1711e1a276..0000000000
--- a/new-docs/zh-CN/admin-manual/elastic-expansion.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-{
-    "title": "弹性扩缩容",
-    "language": "zh-CN"
-}
-
----
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
diff --git a/new-docs/zh-CN/admin-manual/sql-interception.md b/new-docs/zh-CN/admin-manual/sql-interception.md
new file mode 100644
index 0000000000..f9b5b788c9
--- /dev/null
+++ b/new-docs/zh-CN/admin-manual/sql-interception.md
@@ -0,0 +1,93 @@
+---
+{
+    "title": "SQL拦截",
+    "language": "zh-CN"
+}
+---
+
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# SQL黑名单
+
+该功能仅用于限制查询语句,并且不会限制 explain 语句的执行。
+支持按用户配置SQL黑名单:
+
+1. 通过正则匹配的方式拒绝指定SQL
+
+2. 通过设置partition_num, tablet_num, cardinality, 检查一个查询是否达到其中一个限制
+- partition_num, tablet_num, cardinality 可以一起设置,一旦一个查询达到其中一个限制,查询将会被拦截
+
+## 规则
+
+对SQL规则增删改查
+- 创建SQL阻止规则,更多创建语法请参阅[CREATE SQL BLOCK RULE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Create/CREATE-SQL-BLOCK-RULE.html)
+    - sql:匹配规则(基于正则匹配,特殊字符需要转译),可选,默认值为 "NULL"
+    - sqlHash: sql hash值,用于完全匹配,我们会在`fe.audit.log`打印这个值,可选,这个参数和sql只能二选一,默认值为 "NULL"
+    - partition_num: 一个扫描节点会扫描的最大partition数量,默认值为0L
+    - tablet_num: 一个扫描节点会扫描的最大tablet数量,默认值为0L
+    - cardinality: 一个扫描节点粗略的扫描行数,默认值为0L
+    - global:是否全局(所有用户)生效,默认为false
+    - enable:是否开启阻止规则,默认为true
+```sql
+CREATE SQL_BLOCK_RULE test_rule 
+PROPERTIES(
+  "sql"="select * from order_analysis",
+  "global"="false",
+  "enable"="true",
+  "sqlHash"=""
+)
+```
+当我们去执行刚才我们定义在规则里的sql时就会返回异常错误,示例如下:
+```sql
+mysql> select * from order_analysis;
+ERROR 1064 (HY000): errCode = 2, detailMessage = sql match regex sql block rule: order_analysis_rule
+```
+
+- 创建 test_rule2,将最大扫描的分区数量限制在30个,最大扫描基数限制在100亿行,示例如下:
+```sql
+CREATE SQL_BLOCK_RULE test_rule2 PROPERTIES("partition_num" = "30", "cardinality"="10000000000","global"="false","enable"="true")
+```
+
+- 查看已配置的SQL阻止规则,不指定规则名则为查看所有规则,具体语法请参阅 [SHOW SQL BLOCK RULE](../sql-manual/sql-reference-v2/Show-Statements/SHOW-SQL-BLOCK-RULE.html)
+
+```sql
+SHOW SQL_BLOCK_RULE [FOR RULE_NAME]
+```
+- 修改SQL阻止规则,允许对sql/sqlHash/partition_num/tablet_num/cardinality/global/enable等每一项进行修改,具体语法请参阅[ALTER SQL BLOCK  RULE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Alter/ALTER-SQL-BLOCK-RULE.html)
+    - sql 和 sqlHash 不能同时被设置。这意味着,如果一个rule设置了sql或者sqlHash,则另一个属性将无法被修改
+    - sql/sqlHash 和 partition_num/tablet_num/cardinality 不能同时被设置。举个例子,如果一个rule设置了partition_num,那么sql或者sqlHash将无法被修改
+```sql
+ALTER SQL_BLOCK_RULE test_rule PROPERTIES("sql"="select \\* from test_table","enable"="true")
+```
+
+```
+ALTER SQL_BLOCK_RULE test_rule2 PROPERTIES("partition_num" = "10","tablet_num"="300","enable"="true")
+```
+
+- 删除SQL阻止规则,支持多规则,以`,`隔开,具体语法请参阅 [DROP SQL BLOCK RULR](../sql-manual/sql-reference-v2/Data-Definition-Statements/Drop/DROP-SQL-BLOCK-RULE.html)
+```
+DROP SQL_BLOCK_RULE test_rule1,test_rule2
+```
+
+## 用户规则绑定
+如果配置global=false,则需要配置指定用户的规则绑定,多个规则使用`,`分隔
+```sql
+SET PROPERTY [FOR 'jack'] 'sql_block_rules' = 'test_rule1,test_rule2'
+```
diff --git a/new-docs/zh-CN/admin-manual/upgrade.md b/new-docs/zh-CN/admin-manual/upgrade.md
deleted file mode 100644
index 92653437e1..0000000000
--- a/new-docs/zh-CN/admin-manual/upgrade.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-{
-    "title": "集群升级",
-    "language": "zh-CN"
-}
----
-
-<!-- 
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# 集群升级
\ No newline at end of file
diff --git a/new-docs/zh-CN/data-operate/import/import-scenes/external-storage-load.md b/new-docs/zh-CN/data-operate/import/import-scenes/external-storage-load.md
index 989379f90a..ef2401614f 100644
--- a/new-docs/zh-CN/data-operate/import/import-scenes/external-storage-load.md
+++ b/new-docs/zh-CN/data-operate/import/import-scenes/external-storage-load.md
@@ -24,4 +24,159 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# 外部存储数据导入
\ No newline at end of file
+# 外部存储数据导入
+
+本文档主要介绍如何导入外部系统中存储的数据。例如(HDFS,AWS S3,百度云的BOS,阿里云的OSS和腾讯云的COS)
+
+## HDFS LOAD
+
+### 准备工作
+
+上传需要导入的文件到HDFS上,具体命令可参阅[HDFS上传命令](https://hadoop.apache.org/docs/r3.3.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#put)
+
+### 开始导入
+
+Hdfs load 创建导入语句,导入方式和[Broker Load](../../../data-operate/import/import-way/broker-load-manual.html) 基本相同,只需要将 `WITH BROKER broker_name ()` 语句替换成如下部分
+
+```
+  LOAD LABEL db_name.label_name 
+  (data_desc, ...)
+  WITH HDFS
+  [PROPERTIES (key1=value1, ... )]
+```
+
+
+
+1. 创建一张表
+
+   通过 `CREATE TABLE` 命令在`demo`创建一张表用于存储待导入的数据。具体的导入方式请查阅 [CREATE TABLE](../../../sql-manual/sql-reference-v2/Data-Definition-Statements/Create/CREATE-TABLE.html) 命令手册。示例如下:
+
+   ```sql
+   CREATE TABLE IF NOT EXISTS load_hdfs_file_test
+   (
+       id INT,
+       age TINYINT,
+       name VARCHAR(50)
+   )
+   unique key(id)
+   DISTRIBUTED BY HASH(id) BUCKETS 3;
+   ```
+   
+2. 导入数据执行以下命令导入HDFS文件:
+
+   ```sql
+   LOAD LABEL demo.label_20220402
+       (
+       DATA INFILE("hdfs://host:port/tmp/test_hdfs.txt")
+       INTO TABLE `load_hdfs_file_test`
+       COLUMNS TERMINATED BY "\t"            
+       (id,age,name)
+       )
+       with HDFS (
+       "fs.defaultFS"="hdfs://testFs",
+       "hdfs_user"="user"
+       )
+       PROPERTIES
+       (
+       "timeout"="1200",
+       "max_filter_ratio"="0.1"
+       );
+   ```
+    关于参数介绍,请参阅[Broker Load](../../../data-operate/import/import-way/broker-load-manual.html),HA集群的创建语法,通过`HELP BROKER LOAD`查看
+  
+3. 查看导入状态
+   
+   Broker load 是一个异步的导入方式,具体导入结果可以通过[SHOW LOAD](../../../sql-manual/sql-reference-v2/Show-Statements/SHOW-LOAD.html#show-load)命令查看
+   
+   ```
+   mysql> show load order by createtime desc limit 1\G;
+   *************************** 1. row ***************************
+            JobId: 41326624
+            Label: broker_load_2022_04_15
+            State: FINISHED
+         Progress: ETL:100%; LOAD:100%
+             Type: BROKER
+          EtlInfo: unselected.rows=0; dpp.abnorm.ALL=0; dpp.norm.ALL=27
+         TaskInfo: cluster:N/A; timeout(s):1200; max_filter_ratio:0.1
+         ErrorMsg: NULL
+       CreateTime: 2022-04-01 18:59:06
+     EtlStartTime: 2022-04-01 18:59:11
+    EtlFinishTime: 2022-04-01 18:59:11
+    LoadStartTime: 2022-04-01 18:59:11
+   LoadFinishTime: 2022-04-01 18:59:11
+              URL: NULL
+       JobDetails: {"Unfinished backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[]},"ScannedRows":27,"TaskNumber":1,"All backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[36728051]},"FileNumber":1,"FileSize":5540}
+   1 row in set (0.01 sec)
+   ```
+   
+   
+
+
+## S3 LOAD
+
+从0.14 版本开始,Doris 支持通过S3协议直接从支持S3协议的在线存储系统导入数据。
+
+下面主要介绍如何导入 AWS S3 中存储的数据。也支持导入其他支持S3协议的对象存储系统导入,如果百度云的BOS,阿里云的OSS和腾讯云的COS等、
+
+### 适用场景
+
+* 源数据在 支持S3协议的存储系统中,如 S3,BOS 等。
+* 数据量在 几十到百GB 级别。
+
+### 准备工作
+1. 准本AK 和 SK
+   首先需要找到或者重新生成 AWS `Access keys`,可以在AWS console 的 `My Security Credentials` 找到生成方式, 如下图所示:
+   [AK_SK](/images/aws_ak_sk.png)
+   选择 `Create New Access Key` 注意保存生成 AK和SK.
+2. 准备 REGION 和 ENDPOINT
+   REGION 可以在创建桶的时候选择也可以在桶列表中查看到。ENDPOINT 可以通过如下页面通过REGION查到 [AWS 文档](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region)
+
+其他云存储系统可以相应的文档找到与S3兼容的相关信息
+
+### 开始导入
+导入方式和[Broker Load](../../../data-operate/import/import-way/broker-load-manual.html) 基本相同,只需要将 `WITH BROKER broker_name ()` 语句替换成如下部分
+```
+    WITH S3
+    (
+        "AWS_ENDPOINT" = "AWS_ENDPOINT",
+        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+        "AWS_REGION" = "AWS_REGION"
+    )
+```
+
+完整示例如下
+```
+    LOAD LABEL example_db.exmpale_label_1
+    (
+        DATA INFILE("s3://your_bucket_name/your_file.txt")
+        INTO TABLE load_test
+        COLUMNS TERMINATED BY ","
+    )
+    WITH S3
+    (
+        "AWS_ENDPOINT" = "AWS_ENDPOINT",
+        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+        "AWS_REGION" = "AWS_REGION"
+    )
+    PROPERTIES
+    (
+        "timeout" = "3600"
+    );
+```
+
+### 常见问题
+
+S3 SDK 默认使用 virtual-hosted style 方式。但某些对象存储系统可能没开启或没支持 virtual-hosted style 方式的访问,此时我们可以添加 `use_path_style` 参数来强制使用 path style 方式:
+
+```
+  WITH S3
+  (
+        "AWS_ENDPOINT" = "AWS_ENDPOINT",
+        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
+        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
+        "AWS_REGION" = "AWS_REGION",
+        "use_path_style" = "true"
+  )
+```


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org