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 <[email protected]>
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.
+
+
+
+
+#### 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.
+
+
+
+* 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.
+
+
+
+### 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.
+
+
+
+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 [...]
+
+
+
+## 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.
+
+
+
+:::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.

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",