You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by li...@apache.org on 2022/08/19 03:17:06 UTC

[pulsar] branch master updated: [improve][doc] Add more concepts/tasks for bookie isolation (#16843)

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

liuyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new dcf3059a03d [improve][doc] Add more concepts/tasks for bookie isolation (#16843)
dcf3059a03d is described below

commit dcf3059a03d9e7d0bb3817e0c969a2b198e27803
Author: momo-jun <60...@users.noreply.github.com>
AuthorDate: Fri Aug 19 11:16:59 2022 +0800

    [improve][doc] Add more concepts/tasks for bookie isolation (#16843)
---
 site2/docs/administration-isolation-bookie.md      | 227 ++++++++++++++++++++-
 site2/docs/administration-isolation-broker.md      |  19 +-
 site2/docs/administration-isolation.md             |  19 +-
 site2/docs/assets/admin-isolation.svg              |   1 +
 .../docs/assets/rack-aware-placement-policy-1.svg  |   1 +
 .../docs/assets/rack-aware-placement-policy-2.svg  |   1 +
 .../docs/assets/rack-aware-placement-policy-3.svg  |   1 +
 .../assets/region-aware-placement-policy-1.svg     |   1 +
 .../assets/region-aware-placement-policy-2.svg     |   1 +
 site2/website/sidebars.json                        |   1 -
 10 files changed, 247 insertions(+), 25 deletions(-)

diff --git a/site2/docs/administration-isolation-bookie.md b/site2/docs/administration-isolation-bookie.md
index 20ca5a155c0..c8fbc9a058d 100644
--- a/site2/docs/administration-isolation-bookie.md
+++ b/site2/docs/administration-isolation-bookie.md
@@ -10,16 +10,221 @@ import TabItem from '@theme/TabItem';
 ````
 
 
-A namespace can be isolated into user-defined groups of bookies, which guarantees all the data that belongs to the namespace is stored in desired bookies. The bookie affinity group uses the BookKeeper [rack-aware placement policy](https://bookkeeper.apache.org/docs/latest/api/javadoc/org/apache/bookkeeper/client/EnsemblePlacementPolicy.html) and it is a way to feed rack information which is stored as JSON format in znode.
+Isolating bookies equals isolating message storage, which is a data storage mechanism that provides isolation and safety for specific topics. 
 
-You can set a bookie affinity group using one of the following methods.
+Bookie isolation is controlled by BookKeeper clients. For Pulsar, there are two kinds of BookKeeper clients to read and write data. 
+*  BookKeeper clients on the broker side: Pulsar brokers use these BookKeeper clients to read and write topic messages. 
+*  BookKeeper clients on the bookie auto-recovery side:
+   * The bookie auditor checks whether ledger replicas fulfill the configured isolation policy;
+   * The bookie replication worker writes ledger replicas to target bookies according to the configured isolation policy.
+
+To isolate bookies, you need to complete the following tasks.
+1. Select a [data isolation policy](#understand-bookie-data-isolation-policies) based on your requirements.
+2. [Enable the policy on BookKeeper clients](#enable-bookie-data-placement-policy).
+3. [Configure the policy on bookie instances](#configure-data-placement-policy-on-bookie-instances).
+
+
+## Understand bookie data isolation policy
+
+Bookie data isolation policy is built on top of the existing BookKeeper rack-aware placement policy. The “rack” concept can be anything, for example, racks, regions, availability zones. It writes the configured isolation policy into the metadata store. Both BookKeeper clients on the broker and bookie auto-recovery side read the configured isolation policy from the metadata store and apply it when choosing bookies to store messages.
+
+BookKeeper provides three kinds of data isolation policies for disaster tolerance.
+* Rack-aware placement policy (default)
+* Region-aware placement policy
+* Zone-aware placement policy
+
+:::tip
+
+* Both [rack-aware placement policy](#rack-aware-placement-policy) and [region-aware placement policy](#region-aware-placement-policy) can be used in all kinds of deployments where racks are a subset of a region. The major difference between the two policies is:
+  * With `RackawareEnsemblePlacementPolicy` configured, the BookKeeper client chooses bookies from different **racks** to reduce the single-point-of-failure. If there is only one rack available, the policy falls back on choosing a random bookie across available ones.
+  * With `RegionAwareEnsemblePlacementPolicy` configured, the BookKeeper client chooses bookies from different **regions**; for the selected region, it chooses bookies from different racks if more than one ensemble falls into the same region.
+
+* Zone-aware placement policy (`ZoneAwareEnsemblePlacementPolicy`) can be used in a public cloud infrastructure where Availability Zones (AZs) are isolated locations within the data center regions that public cloud services originate from and operate in.
+
+:::
+
+### Rack-aware placement policy
+
+Rack-aware placement policy enforces different data replicas to be placed in different racks to guarantee the rack-level disaster tolerance for your production environment. A data center usually has a lot of racks, and each rack has many storage nodes. You can use `RackAwareEnsemblePlacementPolicy` to configure the rack information for each bookie.
+
+#### Qualified rack size of bookies
+
+When the available rack size of bookies can meet the requirements configured on a topic, the rack-aware placement policy can work well and you don’t need any extra configurations.
+
+For example, the BookKeeper cluster has 4 racks and 13 bookie instances as shown in the following diagram. When a topic is configured with `EnsembleSize=3, WriteQuorum=3, AckQuorum=2`, the BookKeeper client chooses one bookie instance from three different racks to write data to, such as Bookie2, Bookie8, and Bookie12.
+
+
+![Rack-aware placement policy](/assets/rack-aware-placement-policy-1.svg)
+
+#### Enforced minimum rack size of bookies
+
+When the available rack size of bookies cannot meet the requirements configured on a topic, the strategy that the BookKeeper client chooses bookies to recover old ledgers and create new ledgers depends on whether the enforced minimum rack size of bookies is configured. 
+
+In this case, if you want to make the rack-aware placement policy work as usual, you need to configure an enforced minimum rack size of bookies (`MinNumRacksPerWriteQuorum`).
+
+For example, you have the same BookKeeper cluster with the same topic requirements `EnsembleSize=3, WriteQuorum=3, AckQuorum=2` as shown in the above diagram. When all the bookie instances in Rack3 and Rack4 fail, you only have 2 available racks and there are the following three possibilities.
+
+* If you have configured `EnforceMinNumRacksPerWriteQuorum=true` and `MinNumRacksPerWriteQuorum=3`, the BookKeeper client fails to choose bookies, which means new ledgers cannot be created and old ledgers cannot be recovered. Because the requirement of `MinNumRacksPerWriteQuorum=3` cannot be fulfilled.
+
+* If you have configured `EnforceMinNumRacksPerWriteQuorum=true` and `MinNumRacksPerWriteQuorum=2`, the BookKeeper client chooses one bookie from Rack1 and Rack2 to recover old ledgers, such as bookie1 and bookie5, to place 2 replicas for Bookie8 and Bookie12. For new ledger creation, it chooses one bookie from Rack1 and Rack2, such as Bookie4 and Bookie7, and a random bookie from either Rack1 or Rack2 to place the last replica.
+
+![Rack-aware placement policy with an enforced minimum rack size of bookies](/assets/rack-aware-placement-policy-2.svg)
+
+* If you have configured `EnforceMinNumRacksPerWriteQuorum=false`, the BookKeeper client tries its best-effort to apply the placement policy depending on the available number of racks and bookies. It may still work as the above diagram or the following diagram. 
+
+![Rack-aware placement policy without an enforced minimum rack size of bookies](/assets/rack-aware-placement-policy-3.svg)
+
+### Region-aware placement policy
+
+Region-aware placement policy enforces different data replicas to be placed in different regions and racks to guarantee the region-level disaster tolerance. To achieve datacenter level disaster tolerance, you need to write data replicas into different data centers. You can use `RegionAwareEnsemblePlacementPolicy` to configure region and rack information for each bookie node to ensure region-level disaster tolerance.
+
+For example, the BookKeeper cluster has 4 regions, and each region has several racks with their bookie instances, as shown in the following diagram. If a topic is configured with `EnsembleSize=3, WriteQuorum=3, and AckQuorum=2`, the BookKeeper client chooses three different regions, such as Region A, Region C and Region D. For each region, it chooses one bookie on a single rack, such as Bookie5 on Rack2, Bookie17 on Rack6, and Bookie21 on Rack8. 
+
+![Region-aware placement policy](/assets/region-aware-placement-policy-1.svg)
+
+When two regions fail, such as Region B and Region C, as shown in the following diagram, the BookKeeper client chooses one bookie from Region A or Region D to replace the failed Bookie17 for recovering old ledgers. And it also chooses Region A and Region D to write replicas for creating new ledgers. In Region A, it falls back to rack-aware placement policy and chooses one bookie from Rack1 and Rack2, such as Bookie4 and Bookie7. For Region D, it has to choose one bookie from Rack8, such  [...]
+
+![Region-aware placement policy for disaster tolerance](/assets/region-aware-placement-policy-2.svg)
+
+## Enable bookie data placement policy
+
+By default, the rack-aware placement policy is enabled on both broker and bookie sides. If you want to switch to the region-aware placement policy, you need to enable the region-aware placement policy on both broker and bookie sides. 
+
+### Enable region-aware placement policy on broker
+
+Configure the following field in the `conf/broker.conf` file.
+
+```conf
+bookkeeperClientRegionawarePolicyEnabled=true
+```
+
+To enforce the minimum rack size of bookies, configure the following fields:
+
+```conf
+bookkeeperClientEnforceMinNumRacksPerWriteQuorum=true
+bookkeeperClientMinNumRacksPerWriteQuorum=2
+```
+
+To balance the ledger disk usage of different bookies, you can enable the disk weight placement by configuring the following field:
+ 
+```conf
+bookkeeperDiskWeightBasedPlacementEnabled=true
+```
+### Enable region-aware placement policy on the auto-recovery instances (pods)
+
+Configure the following fields in the `conf/bookkeeper.conf` file.
+
+```conf
+ensemblePlacementPolicy=org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy
+reppDnsResolverClass=org.apache.pulsar.zookeeper.ZkBookieRackAffinityMapping
+```
+
+To enforce the minimum rack size of bookies, configure the following fields:
+
+```conf
+enforceMinNumRacksPerWriteQuorum=true
+minNumRacksPerWriteQuorum=2
+```
+
+To balance the ledger disk usage of different bookies, you can enable the disk weight placement by configuring the following field:
+
+```conf
+diskWeightBasedPlacementEnabled=true
+```
+
+## Configure data placement policy on bookie instances
+
+To configure a data placement policy on bookie instances, you can use one of the following methods.
 
 ````mdx-code-block
 <Tabs 
-  defaultValue="Admin CLI"
-  values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java admin API","value":"Java admin API"}]}>
+  defaultValue="Pulsar-admin CLI"
+  values={[{"label":"Pulsar-admin CLI","value":"Pulsar-admin CLI"},{"label":"REST API","value":"REST API"}]}>
+
+<TabItem value="Pulsar-admin CLI">
 
-<TabItem value="Admin CLI">
+
+Specify the rack name to represent which region or rack this bookie belongs to. 
+
+```bash
+bin/pulsar-admin bookies set-bookie-rack
+The following options are required: [-b | --bookie], [-r | --rack]
+
+Then we need to update the rack placement information for a specific bookie in the cluster. Note that the bookie address format is `address:port`.
+Usage: set-bookie-rack [options]
+  Options:
+  * -b, --bookie
+      Bookie address (format: `address:port`)
+    -g, --group
+      Bookie group name
+      Default: default
+    --hostname
+      Bookie host name
+  * -r, --rack
+      Bookie rack name
+```
+
+
+:::tip
+
+In addition, you can also group bookies across racks or regions to serve broker-level isolation by specifying a group name for each bookie and assigning the group name to a specific namespace. See [configure bookie affinity groups](#configure-bookie-affinity-groups) for more details.
+
+:::
+
+</TabItem>
+<TabItem value="REST API">
+
+{@inject: endpoint|POST|/admin/v2/bookies/racks-info/:bookie|operation/updateBookieRackInfo?version=@pulsar:version_number@}
+
+</TabItem>
+
+</Tabs>
+````
+
+
+#### Example of configuring rack-aware placement policy
+
+The following is an example of how to configure bookie instances with their rack properties.
+
+```bash
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie1:3181 --hostname bookie1.pulsar.com:3181 --group group1 --rack rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie2:3181 --hostname bookie2.pulsar.com:3181 --group group1 --rack rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie3:3181 --hostname bookie3.pulsar.com:3181 --group group1 --rack rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie4:3181 --hostname bookie4.pulsar.com:3181 --group group1 --rack rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie5:3181 --hostname bookie5.pulsar.com:3181 --group group1 --rack rack2
+...
+```
+
+#### Example of configuring region-aware placement policy
+
+The following is an example of how to configure bookie instances with their region/rack properties.
+
+```bash
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie1:3181 --hostname bookie1.pulsar.com:3181 --group group1 --rack RegionA/rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie2:3181 --hostname bookie2.pulsar.com:3181 --group group1 --rack RegionA/rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie3:3181 --hostname bookie3.pulsar.com:3181 --group group1 --rack RegionA/rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie4:3181 --hostname bookie4.pulsar.com:3181 --group group1 --rack RegionA/rack1
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie5:3181 --hostname bookie5.pulsar.com:3181 --group group1 --rack RegionA/rack2
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie6:3181 --hostname bookie6.pulsar.com:3181 --group group1 --rack RegionA/rack2
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie7:3181 --hostname bookie7.pulsar.com:3181 --group group1 --rack RegionA/rack2
+bin/pulsar-admin bookies set-bookie-rack --bookie bookie8:3181 --hostname bookie8.pulsar.com:3181 --group group1 --rack RegionB/rack3
+...
+```
+
+## Configure bookie affinity groups
+
+The data of a namespace can be isolated into user-defined groups of bookies, as known as bookie affinity groups, which guarantee all the data that belongs to the namespace is stored in desired bookies. 
+
+**Prerequisites:** Before configuring bookie affinity groups, you need to group bookies first. See [configure data placement policy on bookie instances](#configure-data-placement-policy-on-bookie-instances) for more details.
+
+To configure bookie affinity groups, you can use one of the following methods.
+
+````mdx-code-block
+<Tabs 
+  defaultValue="Pulsar-admin CLI"
+  values={[{"label":"Pulsar-admin CLI","value":"Pulsar-admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java admin API","value":"Java admin API"}]}>
+
+<TabItem value="Pulsar-admin CLI">
 
 ```
 
@@ -27,7 +232,7 @@ pulsar-admin namespaces set-bookie-affinity-group options
 
 ```
 
-For more information about the command `pulsar-admin namespaces set-bookie-affinity-group options`, see [Pulsar admin docs](https://pulsar.apache.org/tools/pulsar-admin/).
+For more information about the command `pulsar-admin namespaces set-bookie-affinity-group options`, see [Pulsar admin docs](/tools/pulsar-admin/).
 
 **Example**
 
@@ -47,16 +252,16 @@ bin/pulsar-admin namespaces set-bookie-affinity-group public/default \
 :::note
 
 - Do not set a bookie rack name to slash (`/`) or an empty string (`""`) if you use Pulsar earlier than 2.7.5, 2.8.3, and 2.9.2. If you use Pulsar 2.7.5, 2.8.3, 2.9.2 or later versions, it falls back to `/default-rack` or `/default-region/default-rack`.
-- When `RackawareEnsemblePlacementPolicy` is enabled, the rack name is not allowed to contain slash (`/`) except for the beginning and end of the rack name string. For example, rack name like `/rack0` is okay, but `/rack/0` is not allowed.
-- When `RegionawareEnsemblePlacementPolicy` is enabled, the rack name can only contain one slash (`/`) except for the beginning and end of the rack name string. For example, rack name like `/region0/rack0` is okay, but `/region0rack0` and `/region0/rack/0` are not allowed.
-For the bookie rack name restrictions, see [pulsar-admin bookies set-bookie-rack](https://pulsar.apache.org/tools/pulsar-admin/).
+- When `RackawareEnsemblePlacementPolicy` is enabled, the rack name is not allowed to contain one slash (`/`) except for the beginning and end of the rack name string. For example, a rack name like `/rack0` is allowed, but `/rack/0` is invalid.
+- When `RegionAwareEnsemblePlacementPolicy` is enabled, the rack name can only contain one slash (`/`) except for the beginning and end of the rack name string. For example, rack name like `/region0/rack0` is allowed, but `/region0rack0` and `/region0/rack/0` are invalid.
+For the bookie rack name restrictions, see [pulsar-admin bookies set-bookie-rack](/tools/pulsar-admin/).
 
 :::
 
 </TabItem>
 <TabItem value="REST API">
 
-[POST /admin/v2/namespaces/{tenant}/{namespace}/persistence/bookieAffinity](https://pulsar.apache.org/admin-rest-api/?version=master&apiversion=v2#operation/setBookieAffinityGroup)
+{@inject: endpoint|POST|/admin/v2/namespaces/:tenant/:namespace/persistence/bookieAffinity|operation/setBookieAffinityGroup?version=@pulsar:version_number@}
 
 </TabItem>
 <TabItem value="Java admin API">
@@ -66,4 +271,4 @@ For how to set bookie affinity group for a namespace using Java admin API, see [
 </TabItem>
 
 </Tabs>
-````
+````
\ No newline at end of file
diff --git a/site2/docs/administration-isolation-broker.md b/site2/docs/administration-isolation-broker.md
index 11a857eacf6..0b1f0c11d13 100644
--- a/site2/docs/administration-isolation-broker.md
+++ b/site2/docs/administration-isolation-broker.md
@@ -12,19 +12,17 @@ import TabItem from '@theme/TabItem';
 
 In Pulsar, when namespaces (more specifically, namespace bundles) are assigned dynamically to brokers, the namespace isolation policy limits the set of brokers that can be used for assignment. Before topics are assigned to brokers, you can set the namespace isolation policy with a primary or a secondary regex to select desired brokers.
 
-You can set a namespace isolation policy for a cluster using one of the following methods. 
+To set a namespace isolation policy for a broker cluster, you can use one of the following methods. 
 
 ````mdx-code-block
 <Tabs 
-  defaultValue="Admin CLI"
-  values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java admin API","value":"Java admin API"}]}>
+  defaultValue="Pulsar-admin CLI"
+  values={[{"label":"Pulsar-admin CLI","value":"Pulsar-admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java admin API","value":"Java admin API"}]}>
 
-<TabItem value="Admin CLI">
+<TabItem value="Pulsar-admin CLI">
 
 ```
-
 pulsar-admin ns-isolation-policy set options
-
 ```
 
 For more information about the command `pulsar-admin ns-isolation-policy set options`, see [Pulsar admin docs](https://pulsar.apache.org/tools/pulsar-admin/).
@@ -32,13 +30,11 @@ For more information about the command `pulsar-admin ns-isolation-policy set opt
 **Example**
 
 ```shell
-
 bin/pulsar-admin ns-isolation-policy set \
 --auto-failover-policy-type min_available \
 --auto-failover-policy-params min_limit=1,usage_threshold=80 \
 --namespaces my-tenant/my-namespace \
 --primary 10.193.216.*  my-cluster policy-name
-
 ```
 
 </TabItem>
@@ -55,3 +51,10 @@ For how to set namespace isolation policy using Java admin API, see [code](https
 
 </Tabs>
 ````
+
+
+:::tip
+
+To guarantee all the data that belongs to a namespace is stored in desired bookies, you can isolate the data of the namespace into user-defined groups of bookies. See [configure bookie affinity groups](#configure-bookie-affinity-groups) for more details.
+
+:::
\ No newline at end of file
diff --git a/site2/docs/administration-isolation.md b/site2/docs/administration-isolation.md
index 02a11a95ca7..c35f6cd5cbf 100644
--- a/site2/docs/administration-isolation.md
+++ b/site2/docs/administration-isolation.md
@@ -10,10 +10,19 @@ In an organization, a Pulsar instance provides services to multiple teams. When
 The multi-layer and segment-centric architecture and hierarchical resource management of Pulsar provide a solid foundation for isolation, which allows you to isolate resources in your desired manner, prevent resource competition, and attain stability.
 
 
-## Isolation methods
-To enforce resource isolation within Pulsar, you can use the following methods of isolating broker and bookie resources:
-* [Isolate brokers](administration-isolation-broker.md)
-* [Isolate bookies](administration-isolation-bookie.md)
+## Isolation levels
+
+Pulsar supports isolation at either of the following two levels or both. 
+* [Broker-level isolation](administration-isolation-broker.md) divides brokers into different groups and assigns broker groups to different namespaces. In this way, you can bind topics in a namespace to a set of brokers that belong to the specific groups.
+* [Bookie-level isolation](administration-isolation-bookie.md) divides bookies into different racks/regions and assigns data replicas to bookies based on a specified data placement policy for disaster tolerance.
+
+![Isolation levels](/assets/admin-isolation.svg)
+
+:::tip
+
+On top of [broker-level isolation](administration-isolation-broker.md) and [bookie-level isolation](administration-isolation-bookie.md), if you want to guarantee all the data that belongs to a namespace is stored in desired bookies, you can define and configure [bookie affinity groups](administration-isolation-bookie.md#configure-bookie-affinity-groups). See [shared BookKeeper cluster deployment](#shared-bookkeeper-cluster) for more details.
+
+:::
 
 
 ## Deployments to achieve isolation within Pulsar
@@ -48,7 +57,7 @@ Here are some key points for understanding how it works:
 - Each Pulsar cluster has one or multiple brokers.
 - Each Pulsar cluster has one metadata store. 
 
-As illustrated below, storage isolation is achieved by setting [bookie affinity groups](administration-isolation-bookie.md). All bookie groups use a shared BookKeeper cluster and a metadata store, and each bookie isolation group has one or several bookies. You can specify one or multiple primary/secondary groups for a namespace. Topics under the namespace are created on the bookies in the primary group firstly and then created on the bookies in the secondary group.
+As illustrated below, all bookie groups use a shared BookKeeper cluster and a metadata store, and each [bookie affinity group](administration-isolation-bookie.md#configure-bookie-affinity-groups) has one or several bookies. You can specify one or multiple primary/secondary groups for a namespace. Topics under the namespace are created on the bookies in the primary group firstly and then created on the bookies in the secondary group.
 
 ![Storage isolation achieved by bookie affinity groups](/assets/isolation-3.png)
 
diff --git a/site2/docs/assets/admin-isolation.svg b/site2/docs/assets/admin-isolation.svg
new file mode 100644
index 00000000000..0ea4616fe8a
--- /dev/null
+++ b/site2/docs/assets/admin-isolation.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="2011.23" height="1490.18"><g transform="translate(-54.71628007707676 2061.864527113124)" lucid:page-tab-id="0_0"><path d="M0-2517.67h3677.73V64H0z" fill="#fff"/><path d="M74.72-1307.4a6 6 0 0 1 6-6h1959.23a6 6 0 0 1 6 6v709.7a6 6 0 0 1-6 6H80.72a6 6 0 0 1-6-6z" fill="#fff"/><path d="M78.43-1312.92l.43-.18.92-.22h2m8.02 0h4m8.02 0h4m8.03 0h4m8.03 0h4m8.02 0h4m8.03 0h4m8.02 0h4m8.0 [...]
\ No newline at end of file
diff --git a/site2/docs/assets/rack-aware-placement-policy-1.svg b/site2/docs/assets/rack-aware-placement-policy-1.svg
new file mode 100644
index 00000000000..ecdc98af953
--- /dev/null
+++ b/site2/docs/assets/rack-aware-placement-policy-1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1577.97" height="277.64"><g transform="translate(-105.51790922985217 1212.829976518687)" lucid:page-tab-id="0_0"><path d="M0-1258.83h1870.87V64H0z" fill="#fff"/><path d="M125.52-1186.83a6 6 0 0 1 6-6h385.9a6 6 0 0 1 6 6v225.64a6 6 0 0 1-6 6H131.5a6 6 0 0 1-6-6z" stroke="#5e5e5e" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,130.51790922985217,-1187. [...]
\ No newline at end of file
diff --git a/site2/docs/assets/rack-aware-placement-policy-2.svg b/site2/docs/assets/rack-aware-placement-policy-2.svg
new file mode 100644
index 00000000000..ddff68b8212
--- /dev/null
+++ b/site2/docs/assets/rack-aware-placement-policy-2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1577.97" height="461.32"><g transform="translate(-98.78151260508704 302.9243828819459)" lucid:page-tab-id="0_0"><path d="M0-1258.83h1870.87v2581.66H0z" fill="#fff"/><path d="M118.78-209.2a6 6 0 0 1 6-6h385.9a6 6 0 0 1 6 6V73.35a6 6 0 0 1-6 6h-385.9a6 6 0 0 1-6-6z" stroke="#5e5e5e" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,123.78151260508704,-210 [...]
\ No newline at end of file
diff --git a/site2/docs/assets/rack-aware-placement-policy-3.svg b/site2/docs/assets/rack-aware-placement-policy-3.svg
new file mode 100644
index 00000000000..bce6d6f460d
--- /dev/null
+++ b/site2/docs/assets/rack-aware-placement-policy-3.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1577.97" height="524.64"><g transform="translate(-105.51790922985217 891.6270829614556)" lucid:page-tab-id="0_0"><path d="M0-1258.83h1870.87V64H0z" fill="#fff"/><path d="M125.52-770.7a6 6 0 0 1 6-6h385.9a6 6 0 0 1 6 6v299.88a6 6 0 0 1-6 6H131.5a6 6 0 0 1-6-6z" stroke="#5e5e5e" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,130.51790922985217,-771.704 [...]
\ No newline at end of file
diff --git a/site2/docs/assets/region-aware-placement-policy-1.svg b/site2/docs/assets/region-aware-placement-policy-1.svg
new file mode 100644
index 00000000000..c4afbc4199a
--- /dev/null
+++ b/site2/docs/assets/region-aware-placement-policy-1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1656.08" height="808.89"><g transform="translate(-82.25622034275307 1216.8823844406527)" lucid:page-tab-id="0_0"><path d="M0-1258.83h1870.87V64H0z" fill="#fff"/><path d="M1003.38-1190.88a6 6 0 0 1 6-6h702.96a6 6 0 0 1 6 6v345.66a6 6 0 0 1-6 6h-702.96a6 6 0 0 1-6-6z" fill="#fff"/><path d="M1037.77-1196.8l58.66-.02m14.66 0h29.32m14.67 0h58.65m14.66 0h29.34m14.66-.02h58.66m14.67 0h2 [...]
\ No newline at end of file
diff --git a/site2/docs/assets/region-aware-placement-policy-2.svg b/site2/docs/assets/region-aware-placement-policy-2.svg
new file mode 100644
index 00000000000..a595c9a884e
--- /dev/null
+++ b/site2/docs/assets/region-aware-placement-policy-2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1734" height="928"><g transform="translate(-1821 1225)" lucid:page-tab-id="0_0"><path d="M1806.87-1258.83h1870.86V64H1806.87z" fill="#fff"/><path d="M2798-1178.83a6 6 0 0 1 6-6h702.97a6 6 0 0 1 6 6v345.66a6 6 0 0 1-6 6H2804a6 6 0 0 1-6-6z" fill="#fff"/><path d="M2832.4-1184.76h58.66m14.66 0h29.33m14.67 0l58.65-.02m14.67 0h29.33m14.66 0h58.66m14.66 0l29.32-.02m14.67 0H3243m14.67 0 [...]
\ No newline at end of file
diff --git a/site2/website/sidebars.json b/site2/website/sidebars.json
index 5cf3e753e6a..36734399153 100644
--- a/site2/website/sidebars.json
+++ b/site2/website/sidebars.json
@@ -232,7 +232,6 @@
         "administration-stats",
         "administration-load-balance",
         "administration-proxy",
-        "administration-isolation",
         "administration-upgrade",
         {
           "type": "category",