From 85c73162713ac164fa59036fc9c47d0425dc439f Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 17 Aug 2021 16:48:09 +0800 Subject: [PATCH 01/11] add dr auto sync --- TOC.md | 1 + ...e-data-centers-in-two-cities-deployment.md | 4 +- two-data-centers-in-one-city-deployment.md | 242 ++++++++++++++++++ 3 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 two-data-centers-in-one-city-deployment.md diff --git a/TOC.md b/TOC.md index c9e5dff2e0a37..c66b594d6e655 100644 --- a/TOC.md +++ b/TOC.md @@ -140,6 +140,7 @@ + Tutorials + [Multiple Data Centers in One City Deployment](/multi-data-centers-in-one-city-deployment.md) + [Three Data Centers in Two Cities Deployment](/three-data-centers-in-two-cities-deployment.md) + + [Two Data Centers in One City Deployment](/two-data-centers-in-one-city-deployment.md) + Read Historical Data + Use Stale Read (Recommended) + [Usage Scenarios of Stale Read](/stale-read.md) diff --git a/three-data-centers-in-two-cities-deployment.md b/three-data-centers-in-two-cities-deployment.md index 620496c7491b9..7211b1b681ff4 100644 --- a/three-data-centers-in-two-cities-deployment.md +++ b/three-data-centers-in-two-cities-deployment.md @@ -10,7 +10,7 @@ This document introduces the architecture and configuration of the three data ce ## Overview -The architecture of three DCs in two cities is a highly available and disaster tolerant deployment solution that provides a production data center, a disaster recovery center in the same city, and a disaster recovery centers in another city. In this mode, the three DCs in two cities are interconnected. If one DC fails or suffers from a disaster, other DCs can still operate well and take over the the key applications or all applications. Compared with the the multi-DC in one city deployment, this solution has the advantage of cross-city high availability and can survive city-level natural disasters. +The architecture of three DCs in two cities is a highly available and disaster tolerant deployment solution that provides a production data center, a disaster recovery center in the same city, and a disaster recovery center in another city. In this mode, the three DCs in two cities are interconnected. If one DC fails or suffers from a disaster, other DCs can still operate well and take over the the key applications or all applications. Compared with the the multi-DC in one city deployment, this solution has the advantage of cross-city high availability and can survive city-level natural disasters. The distributed database TiDB natively supports the three-DC-in-two-city architecture by using the Raft algorithm, and guarantees the consistency and high availability of data within a database cluster. Because the network latency across DCs in the same city is relatively low, the application traffic can be dispatched to two DCs in the same city, and the traffic load can be shared by these two DCs by controlling the distribution of TiKV Region leaders and PD leaders. @@ -72,7 +72,7 @@ server_configs: tikv: server.grpc-compression-type: gzip pd: - replication.location-labels: ["dc","rack","zone","host"] + replication.location-labels: ["dc","zone","rack","host"] schedule.tolerant-size-ratio: 20.0 pd_servers: diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md new file mode 100644 index 0000000000000..8ac2ccacd5489 --- /dev/null +++ b/two-data-centers-in-one-city-deployment.md @@ -0,0 +1,242 @@ +--- +title: Two Data Centers in One City Deployment +summary: Learn the deployment solution to two data centers in one city. +--- + +# Two Data Centers in One City Deployment with DR Auto-Sync Mode + +This document introduces the deployment mode, architecture, and configuration of the two data centers (DC) in one city, as well as how to enable this delpoyment mode and to use the replicas in this mode. + +In an on-premises environment, TiDB usually adopts the multi-data-center deployment mode to ensure high availability and disaster recovery capability. The multi-data-center deployment mode includes a variety of deployment modes, such as three data centers in two cities and three data centers in one city. This document introduces the deployment mode of two data centers in one city. With lower cost, TiDB can also meet the requirements of high availability and disaster recovery. The deployment mode adopts Data Replication Auto Synchronous mode, or DR Auto-Sync mode. + +Under the mode of two data centers in one city, the distance between the two data centers is within 50 kilometers. They are usually located in the same city or two adjacent cities (such as Beijing and Langfang in Hebei province). The network latency between the data centers is lower than 1.5 milliseconds and the bandwidth is higher than 10 Gbps. + +## Architecture + +This section takes the example of a city where two data centers IDC1 and IDC2 are located separately in the east and west. + +The architecture of the cluster deployment is as follows: + +- The TiDB cluster is deployed to two DCs in one city: the primary IDC1 in the east, and the DR IDC2 in the west. +- The cluster has 4 replicas, 2 Voter replicas in IDC1, 1 Voter replicas and 1 Learner replicas in IDC2. For the TiKV component, each rack has a proper label. +- The Raft protocol is adopted to ensure consistency and high availability of data, which is transparent to users. + +![2-DC-in-1-city architecture](/media/two-dc-replication-1.png) + +This deployment solution defines three status to control and label the replication status of the cluster, which restricts the replication mode of TiKV. The replication mode of the cluster can automatically and adaptively switch between the three status. For details, see [Status switch](#status-switch). + +- **sync**: Synchronous replication mode. In this mode, at least one replica in DR data center synchronizes with the replica in the primary data center. Raft algorithm ensures that each log is replicated to DR based on the label. +- **async**: Asynchronous replication mode. In this mode, DR data center is not fully synchronized with the primary data center. Raft algorithm follows the majority protocol to replicate logs. +- **sync-recover**: Synchronous recovery mode. In this mode, DR is not fully synchronized with the primary data center. Raft gradually switches to label replication mode and then reports the label information to PD. + +## Configuration + +### Example + +The following `tiup topology.yaml` yaml file example is a classic topology configuration for the two data centers in one city deployment mode: + +``` +# # Global variables are applied to all deployments and used as the default value of +# # the deployments if a specific deployment value is missing. +global: + user: "tidb" + ssh_port: 22 + deploy_dir: "/data/tidb_cluster/tidb-deploy" + data_dir: "/data/tidb_cluster/tidb-data" + +server_configs: + pd: + replication.location-labels: ["zone","rack","host"] + +pd_servers: + - host: 10.63.10.10 + name: "pd-10" + - host: 10.63.10.11 + name: "pd-11" + - host: 10.63.10.12 + name: "pd-12" + + +tidb_servers: + - host: 10.63.10.10 + - host: 10.63.10.11 + - host: 10.63.10.12 + + +tikv_servers: + - host: 10.63.10.30 + config: + server.labels: { zone: "east", rack: "east-1", host: "30" } + - host: 10.63.10.31 + config: + server.labels: { zone: "east", rack: "east-2", host: "31" } + - host: 10.63.10.32 + config: + server.labels: { zone: "west", rack: "west-1", host: "32" } + - host: 10.63.10.33 + config: + server.labels: { zone: "west", rack: "west-2", host: "33" } + + +monitoring_servers: + - host: 10.63.10.60 + +grafana_servers: + - host: 10.63.10.60 + +alertmanager_servers: + - host: 10.63.10.60 +``` + +### Placement Rules + +To deploy based on the planned cluster topology, you need to use [Placement Rules](/configure-placement-rules.md) to determine the locations of the cluster replicas. If 4 replica and 2 Voter replica is at the primary center and 1 Voter replica and 1 Learner replica is at the DR center, you can use the placement rules to configure the replicas as follows: + +``` +cat rule.json +[ + { + "group_id": "pd", + "id": "zone-east", + "start_key": "", + "end_key": "", + "role": "voter", + "count": 2, + "label_constraints": [ + { + "key": "zone", + "op": "in", + "values": [ + "east" + ] + } + ], + "location_labels": [ + "zone", + "rack", + "host", + ] + }, + { + "group_id": "pd", + "id": "zone-west", + "start_key": "", + "end_key": "", + "role": "voter", + "count": 1, + "label_constraints": [ + { + "key": "zone", + "op": "in", + "values": [ + "west" + ] + } + ], + "location_labels": [ + "zone", + "rack", + "host" + ] + }, + { + "group_id": "pd", + "id": "zone-west", + "start_key": "", + "end_key": "", + "role": "learner", + "count": 1, + "label_constraints": [ + { + "key": "zone", + "op": "in", + "values": [ + "west" + ] + } + ], + "location_labels": [ + "zone", + "rack", + "host" + ] + } +] +``` + +### Enable the DR Auto-Sync mode + +The replication mode of the replica is controlled by the PD node. If you want to enable the DR Auto-Sync mode, you need to create the PD configuration file before deploying the cluster as follows: + +{{< copyable "" >}} + +```toml +[replication-mode] +replication-mode = "dr-auto-sync" +[replication-mode.dr-auto-sync] +label-key = "zone" +primary = "east" +dr = "west" +primary-replicas = 2 +dr-replicas = 1 +wait-store-timeout = "1m" +wait-sync-timeout = "1m" +``` + +In the above configuration file: + ++ `replication-mode` is the replication mode to be enabled. In the above example, it is set to `dr-auto-sync`. By default, majority protocol is followed. ++ `label-key` is used to distinguish different data centers and needs to be matched with placement rules. In this example, the primary data center is "east" and the DR data center is "west". ++ `primary-replicas` ia the number of Voter replicas in the primary data center. ++ `dr-replicas` is the number of Voter replicas in the DR data center. ++ `wait-store-timeout` is the waiting time for switching to asynchronous replication mode when network isolation or failure occurs. If the time of network failure exceeds the waiting time, asynchronous replication mode is enabled. The default waiting time is 60 seconds. + +If you need to check the replication status of the current cluster, the following API can help you: + +{{< copyable "shell-regular" >}} + +```bash +curl http://pd_ip:pd_port/pd/api/v1/replication_mode/status +``` + +{{< copyable "shell-regular" >}} + +```bash +{ + "mode": "dr-auto-sync", + "dr-auto-sync": { + "label-key": "zone", + "state": "sync" + } +} +``` + +#### Status Switch + +The replication mode for clusters can automatically and adaptively switch between three status: + +- When the clusters are normal, the synchronous replication mode is enabled to maximize the data integrity of the disaster recovery data center. +- When network fails or the disaster recovery data center breaks down, after a pre-set protective interval, the cluster enables asynchronous replication mode to ensure the availability of transactions. +- When network reconnects or the disaster recovery data center restores, the TiKV node joins the cluster again and gradually replicates the data. Finally, the cluster switches to synchronous replication mode. + +The details for status switch is as follows: + +1. **Initialization**: When the cluster is in the initialization process, the synchronous replication mode is enabled. PD sends information to TiKV and all TiKV nodes strictly follow the requirements of the synchronous replication mode to work. + +2. **Switch from sync to async**: PD regularly check the heartbeat information of TiKV to judge if TiKV peers fail to work or disconnect. If the number of failed peers exceeds the number of replicas of the primary data center and the DR data center `primary-replicas` and `dr-replicas`, the synchronous replication mode fails to work and it is necessary to switch the status. When the failure or disconnect time exceeds the time set by `wait-store-timeout`, PD switches the status of the cluster to async mode. Then PD sends the status of async to all the TiKV nodes and the replication mode for TiKV switches from two-center replication to native Raft majority. + +3. **Switch from async to sync**: PD regularly check the heartbeat information of TiKV to judge if TiKV peers reconnect. If the number of failed peers is less than the number of replicas of the primary data center and the DR data center `primary-replicas` and `dr-replicas`, the synchronous replication mode can be enabled again. PD switches the status of the cluster to sync-recover and sends this status to all the TiKV nodes. All Regions of TiKV gradually switch to two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of Regions of TiKV and calculte the recovery progress. When all Regions of TiKV finish the switching, PD switches the replication mode to synchronous status. + +### Disaster recovery + +This section introduces the disaster recovery solution of the two data centers in one city deployment. + +When a disaster occurs to a cluster in the synchronous replication mode, you can perform data recovery with `RPO = 0`: + +- If the primary data center fails and most of the Voter replicas are lost, and complete data exists in the DR data center, the data can be recovered from the DR data center. At this time, manual intervention is required with professional tools (you can contact TiDB team for recovery). + +- If the DR center fails and a few Voter replicas are lost, the cluster can automatically switch to asynchronous replication mode. to solve the problem. + +When a disaster occurs to a cluster that is not in the synchronous replication mode and you cannot perform data recovery with `RPO = 0`: + +- If most of the Voter replicas are lost, manual intervention is required with professional tools (you can contact TiDB team for recovery). From 2552ec204a9da9faf59caa8ce834e9210a7fae54 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 17 Aug 2021 16:57:39 +0800 Subject: [PATCH 02/11] add picture to fix ci --- media/two-dc-replication-1.png | Bin 0 -> 123038 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/two-dc-replication-1.png diff --git a/media/two-dc-replication-1.png b/media/two-dc-replication-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e04dad91c9b3416db6d8ec0d4252c6bf458551e6 GIT binary patch literal 123038 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 YZ_(ws1I!l`a#hWrbbrh_aQys#0QAMNSpWb4 literal 0 HcmV?d00001 From cefc861a04d974194ae016b9bf0f124165217697 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Wed, 18 Aug 2021 16:44:52 +0800 Subject: [PATCH 03/11] delete synchronous-replication.md. --- synchronous-replication.md | 94 ---------------------- two-data-centers-in-one-city-deployment.md | 1 + 2 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 synchronous-replication.md diff --git a/synchronous-replication.md b/synchronous-replication.md deleted file mode 100644 index 16b51c2a31b3b..0000000000000 --- a/synchronous-replication.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Synchronous Replication for Dual Data Centers -summary: Learn how to configure synchronous replication for dual data centers. ---- - -# Synchronous Replication for Dual Data Centers - -This document introduces how to configure synchronous replication for dual data centers. - -> **Warning:** -> -> Synchronous replication is still an experimental feature. Do not use it in a production environment. - -In the scenario of dual data centers, one is the primary center and the other is the DR (data recovery) center. When a Region has an odd number of replicas, more replicas are placed in the primary center. When the DR center is down for more than a specified period of time, the asynchronous mode is used by default for the replication between two centers. - -To use the synchronous mode, you can configure it in the PD configuration file or change the replication mode manually using pd-ctl. - -## Enable synchronous replication in the PD configuration file - -The replication mode is controlled by PD. You can configure it in the PD configuration file when deploying a cluster. See the following example: - -{{< copyable "" >}} - -```toml -[replication-mode] -replication-mode = "dr-auto-sync" -[replication-mode.dr-auto-sync] -label-key = "zone" -primary = "z1" -dr = "z2" -primary-replicas = 2 -dr-replicas = 1 -wait-store-timeout = "1m" -wait-sync-timeout = "1m" -``` - -In the configuration above: - -+ `dr-auto-sync` is the mode to enable synchronous replication. -+ The label key `zone` is used to distinguish different data centers. -+ TiKV instances with the `"z1"` value are considered in the primary data center, and TiKV instances with `"z2"` are in the DR data center. -+ `primary-replicas` is the number of replicas that should be placed in the primary data center. -+ `dr-replicas` is the number of replicas that should be placed in the DR data center. -+ `wait-store-timeout` is the time to wait before falling back to asynchronous replication. - -To check the current replication state of the cluster, use the following URL: - -{{< copyable "shell-regular" >}} - -```bash -% curl http://pd_ip:pd_port/pd/api/v1/replication_mode/status -``` - -```bash -{ - "mode": "dr-auto-sync", - "dr-auto-sync": { - "label-key": "zone", - "state": "sync" - } -} -``` - -> **Note:** -> -> The replication state of the cluster indicates how all Regions are replicated, with the options of `async`, `sync-recover`, and `sync`. - -After the cluster state becomes `sync`, it will not become `async` unless the number of down instances is larger than the specified number of replicas in either data center. Once the cluster state becomes `async`, PD requests TiKV to change the replication mode to `asynchronous` and checks whether TiKV instances are recovered from time to time. When the number of down instances is smaller than the number of replicas in both data centers, the cluster enters the `sync-recover` state, and then requests TiKV to change the replication mode to `synchronous`. After all Regions become `synchronous`, the cluster becomes `sync` again. - -## Change the replication mode manually - -You can use [`pd-ctl`](/pd-control.md) to change a cluster from `asynchronous` to `synchronous`. - -{{< copyable "shell-regular" >}} - -```bash ->> config set replication-mode dr-auto-sync -``` - -Or change back to `asynchronous`: - -{{< copyable "shell-regular" >}} - -```bash ->> config set replication-mode majority -``` - -You can also update the label key: - -{{< copyable "shell-regular" >}} - -```bash ->> config set replication-mode dr-auto-sync label-key dc -``` diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index 8ac2ccacd5489..b8c5ab193b9a7 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -1,6 +1,7 @@ --- title: Two Data Centers in One City Deployment summary: Learn the deployment solution to two data centers in one city. +aliases: ['/docs/dev/synchronous-replication-for-dual-data-centers/'] --- # Two Data Centers in One City Deployment with DR Auto-Sync Mode From 394aed138b412a295a459c72ff2a0087d30e3ca5 Mon Sep 17 00:00:00 2001 From: Liuxiaozhen12 <82579298+Liuxiaozhen12@users.noreply.github.com> Date: Wed, 18 Aug 2021 17:44:42 +0800 Subject: [PATCH 04/11] Apply suggestions from code review --- two-data-centers-in-one-city-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index b8c5ab193b9a7..d5f544cb932d9 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -1,7 +1,7 @@ --- title: Two Data Centers in One City Deployment summary: Learn the deployment solution to two data centers in one city. -aliases: ['/docs/dev/synchronous-replication-for-dual-data-centers/'] +aliases: ['/tidb/dev/synchronous-replication'] --- # Two Data Centers in One City Deployment with DR Auto-Sync Mode From ca79813082e60710cd5bc9bbea0fa0c0ba69fd89 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Wed, 18 Aug 2021 18:21:36 +0800 Subject: [PATCH 05/11] fix ci --- pd-configuration-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pd-configuration-file.md b/pd-configuration-file.md index c3ddade22d85f..4dd67c23dbddf 100644 --- a/pd-configuration-file.md +++ b/pd-configuration-file.md @@ -359,4 +359,4 @@ Configuration items related to the [TiDB Dashboard](/dashboard/dashboard-intro.m ## `replication-mode` -Configuration items related to the replication mode of all Regions. See [Enable synchronous replication in PD configuration file](/synchronous-replication.md#enable-synchronous-replication-in-the-pd-configuration-file) for details. +Configuration items related to the replication mode of all Regions. See [Enable the DR Auto-Sync mode](/two-data-centers-in-one-city-deployment.md#enable-the-dr-auto-sync-mode) for details. From f1a4b037b1c33b45b871cffb41c7fc76e4b70141 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Thu, 19 Aug 2021 10:56:51 +0800 Subject: [PATCH 06/11] fix ci --- pd-control.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pd-control.md b/pd-control.md index fe003c7457ba6..806541d001f25 100644 --- a/pd-control.md +++ b/pd-control.md @@ -308,7 +308,7 @@ Usage: config set cluster-version 1.0.8 // Set the version of the cluster to 1.0.8 ``` -- `replication-mode` controls the replication mode of Regions in the dual data center scenario. See [Change replication mode manually](/synchronous-replication.md#change-the-replication-mode-manually) for details. +- `replication-mode` controls the replication mode of Regions in the dual data center scenario. See [Enable the DR Auto-Sync mode](/two-data-centers-in-one-city-deployment.md#enable-the-dr-auto-sync-mode) for details. - `leader-schedule-policy` is used to select the scheduling strategy for the leader. You can schedule the leader according to `size` or `count`. From 55e0b7a892ca3c9620728a8b20cc5bed5a9c0394 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Thu, 19 Aug 2021 12:34:50 +0800 Subject: [PATCH 07/11] Update two-data-centers-in-one-city-deployment.md --- two-data-centers-in-one-city-deployment.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index d5f544cb932d9..272f4cec70321 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -6,7 +6,7 @@ aliases: ['/tidb/dev/synchronous-replication'] # Two Data Centers in One City Deployment with DR Auto-Sync Mode -This document introduces the deployment mode, architecture, and configuration of the two data centers (DC) in one city, as well as how to enable this delpoyment mode and to use the replicas in this mode. +This document introduces the deployment mode for two data centers (DC) in one city, including the architecture, configuration, methods to enable this delpoyment mode, and ways to use the replicas in this mode. In an on-premises environment, TiDB usually adopts the multi-data-center deployment mode to ensure high availability and disaster recovery capability. The multi-data-center deployment mode includes a variety of deployment modes, such as three data centers in two cities and three data centers in one city. This document introduces the deployment mode of two data centers in one city. With lower cost, TiDB can also meet the requirements of high availability and disaster recovery. The deployment mode adopts Data Replication Auto Synchronous mode, or DR Auto-Sync mode. @@ -167,7 +167,7 @@ cat rule.json ### Enable the DR Auto-Sync mode -The replication mode of the replica is controlled by the PD node. If you want to enable the DR Auto-Sync mode, you need to create the PD configuration file before deploying the cluster as follows: +The replication mode is controlled by PD. You can configure it in the PD configuration file when deploying a cluster as follows: {{< copyable "" >}} @@ -184,7 +184,7 @@ wait-store-timeout = "1m" wait-sync-timeout = "1m" ``` -In the above configuration file: +In the configuration above: + `replication-mode` is the replication mode to be enabled. In the above example, it is set to `dr-auto-sync`. By default, majority protocol is followed. + `label-key` is used to distinguish different data centers and needs to be matched with placement rules. In this example, the primary data center is "east" and the DR data center is "west". @@ -192,7 +192,7 @@ In the above configuration file: + `dr-replicas` is the number of Voter replicas in the DR data center. + `wait-store-timeout` is the waiting time for switching to asynchronous replication mode when network isolation or failure occurs. If the time of network failure exceeds the waiting time, asynchronous replication mode is enabled. The default waiting time is 60 seconds. -If you need to check the replication status of the current cluster, the following API can help you: +To check the current replication state of the cluster, use the following API: {{< copyable "shell-regular" >}} From 3cf2e764bcb6387c36045167935b8ba21a23b44e Mon Sep 17 00:00:00 2001 From: Liuxiaozhen12 <82579298+Liuxiaozhen12@users.noreply.github.com> Date: Fri, 20 Aug 2021 11:31:39 +0800 Subject: [PATCH 08/11] Apply suggestions from code review Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- two-data-centers-in-one-city-deployment.md | 60 +++++++++++----------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index 272f4cec70321..2399c2e8fd19b 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -1,40 +1,40 @@ --- title: Two Data Centers in One City Deployment -summary: Learn the deployment solution to two data centers in one city. +summary: Learn the deployment solution of two data centers in one city. aliases: ['/tidb/dev/synchronous-replication'] --- -# Two Data Centers in One City Deployment with DR Auto-Sync Mode +# Two Data Centers in One City Deployment -This document introduces the deployment mode for two data centers (DC) in one city, including the architecture, configuration, methods to enable this delpoyment mode, and ways to use the replicas in this mode. +This document introduces the deployment mode of two data centers (DCs) in one city, including the architecture, configuration, how to enable this deployment mode, and how to use replicas in this mode. -In an on-premises environment, TiDB usually adopts the multi-data-center deployment mode to ensure high availability and disaster recovery capability. The multi-data-center deployment mode includes a variety of deployment modes, such as three data centers in two cities and three data centers in one city. This document introduces the deployment mode of two data centers in one city. With lower cost, TiDB can also meet the requirements of high availability and disaster recovery. The deployment mode adopts Data Replication Auto Synchronous mode, or DR Auto-Sync mode. +In an on-premises environment, TiDB usually adopts the multi-data-center deployment solution to ensure high availability and disaster recovery capability. The multi-data-center deployment solution includes multiple deployment modes, such as three data centers in two cities and three data centers in one city. This document introduces the deployment mode of two data centers in one city. Deployed in this mode, TiDB can also meet the requirements of high availability and disaster recovery, with a lower cost. This deployment solution adopts Data Replication Auto Synchronous mode, or the DR Auto-Sync mode. -Under the mode of two data centers in one city, the distance between the two data centers is within 50 kilometers. They are usually located in the same city or two adjacent cities (such as Beijing and Langfang in Hebei province). The network latency between the data centers is lower than 1.5 milliseconds and the bandwidth is higher than 10 Gbps. +Under the mode of two data centers in one city, the two data centers are less than 50 kilometers apart. They are usually located in the same city or in two adjacent cities. The network latency between the two data centers is lower than 1.5 milliseconds and the bandwidth is higher than 10 Gbps. -## Architecture +## Deployment architecture -This section takes the example of a city where two data centers IDC1 and IDC2 are located separately in the east and west. +This section takes the example of a city where two data centers IDC1 and IDC2 are located respectively in the east and west. The architecture of the cluster deployment is as follows: - The TiDB cluster is deployed to two DCs in one city: the primary IDC1 in the east, and the DR IDC2 in the west. -- The cluster has 4 replicas, 2 Voter replicas in IDC1, 1 Voter replicas and 1 Learner replicas in IDC2. For the TiKV component, each rack has a proper label. +- The cluster has 4 replicas: 2 Voter replicas in IDC1, 1 Voter replicas and 1 Learner replicas in IDC2. For the TiKV component, each rack has a proper label. - The Raft protocol is adopted to ensure consistency and high availability of data, which is transparent to users. ![2-DC-in-1-city architecture](/media/two-dc-replication-1.png) -This deployment solution defines three status to control and label the replication status of the cluster, which restricts the replication mode of TiKV. The replication mode of the cluster can automatically and adaptively switch between the three status. For details, see [Status switch](#status-switch). +This deployment solution defines three statuses to control and identify the replication status of the cluster, which restricts the replication mode of TiKV. The replication mode of the cluster can automatically and adaptively switch between the three statuses. For details, see the [Status switch](#status-switch) section. -- **sync**: Synchronous replication mode. In this mode, at least one replica in DR data center synchronizes with the replica in the primary data center. Raft algorithm ensures that each log is replicated to DR based on the label. -- **async**: Asynchronous replication mode. In this mode, DR data center is not fully synchronized with the primary data center. Raft algorithm follows the majority protocol to replicate logs. -- **sync-recover**: Synchronous recovery mode. In this mode, DR is not fully synchronized with the primary data center. Raft gradually switches to label replication mode and then reports the label information to PD. +- **sync**: Synchronous replication mode. In this mode, at least one replica in the disaster recovery (DR) data center synchronizes with the primary data center. The Raft algorithm ensures that each log is replicated to the DR based on the label. +- **async**: Asynchronous replication mode. In this mode, the DR data center is not fully synchronized with the primary data center. The Raft algorithm follows the majority protocol to replicate logs. +- **sync-recover**: Synchronous recovery mode. In this mode, the DR data center is not fully synchronized with the primary data center. Raft gradually switches to the label replication mode and then reports the label information to PD. ## Configuration ### Example -The following `tiup topology.yaml` yaml file example is a classic topology configuration for the two data centers in one city deployment mode: +The following `tiup topology.yaml` example file is a typical topology configuration for the two data centers in one city deployment mode: ``` # # Global variables are applied to all deployments and used as the default value of @@ -91,7 +91,7 @@ alertmanager_servers: ### Placement Rules -To deploy based on the planned cluster topology, you need to use [Placement Rules](/configure-placement-rules.md) to determine the locations of the cluster replicas. If 4 replica and 2 Voter replica is at the primary center and 1 Voter replica and 1 Learner replica is at the DR center, you can use the placement rules to configure the replicas as follows: +To deploy a cluster based on the planned topology, you need to use [placement rules](/configure-placement-rules.md) to determine the locations of the cluster replicas. If 4 replica and 2 Voter replica is at the primary center and 1 Voter replica and 1 Learner replica is at the DR center, you can use the placement rules to configure the replicas as follows: ``` cat rule.json @@ -167,7 +167,7 @@ cat rule.json ### Enable the DR Auto-Sync mode -The replication mode is controlled by PD. You can configure it in the PD configuration file when deploying a cluster as follows: +The replication mode is controlled by PD. When deploying a cluster, you can configure the replication mode in the PD configuration file. For example: {{< copyable "" >}} @@ -186,13 +186,13 @@ wait-sync-timeout = "1m" In the configuration above: -+ `replication-mode` is the replication mode to be enabled. In the above example, it is set to `dr-auto-sync`. By default, majority protocol is followed. -+ `label-key` is used to distinguish different data centers and needs to be matched with placement rules. In this example, the primary data center is "east" and the DR data center is "west". ++ `replication-mode` is the replication mode to be enabled. In the above example, it is set to `dr-auto-sync`. By default, the majority protocol is used. ++ `label-key` is used to distinguish different data centers and needs to match placement rules. In this example, the primary data center is "east" and the DR data center is "west". + `primary-replicas` ia the number of Voter replicas in the primary data center. + `dr-replicas` is the number of Voter replicas in the DR data center. + `wait-store-timeout` is the waiting time for switching to asynchronous replication mode when network isolation or failure occurs. If the time of network failure exceeds the waiting time, asynchronous replication mode is enabled. The default waiting time is 60 seconds. -To check the current replication state of the cluster, use the following API: +To check the current replication status of the cluster, use the following API: {{< copyable "shell-regular" >}} @@ -212,21 +212,21 @@ curl http://pd_ip:pd_port/pd/api/v1/replication_mode/status } ``` -#### Status Switch +#### Status switch -The replication mode for clusters can automatically and adaptively switch between three status: +The replication mode of a cluster can automatically and adaptively switch between three statuses: -- When the clusters are normal, the synchronous replication mode is enabled to maximize the data integrity of the disaster recovery data center. -- When network fails or the disaster recovery data center breaks down, after a pre-set protective interval, the cluster enables asynchronous replication mode to ensure the availability of transactions. -- When network reconnects or the disaster recovery data center restores, the TiKV node joins the cluster again and gradually replicates the data. Finally, the cluster switches to synchronous replication mode. +- When the cluster is normal, the synchronous replication mode is enabled to maximize the data integrity of the disaster recovery data center. +- When the network connection between the two data centers fails or the DR data center breaks down, after a pre-set protective interval, the cluster enables the asynchronous replication mode to ensure the availability of the application. +- When the network reconnects or the DR data center recovers, the TiKV node joins the cluster again and gradually replicates the data. Finally, the cluster switches to the synchronous replication mode. -The details for status switch is as follows: +The details for the status switch are as follows: -1. **Initialization**: When the cluster is in the initialization process, the synchronous replication mode is enabled. PD sends information to TiKV and all TiKV nodes strictly follow the requirements of the synchronous replication mode to work. +1. **Initialization**: At the initialization stage, the cluster is in the synchronous replication mode. PD sends information to TiKV, and all TiKV nodes strictly follow the synchronous replication mode to work. -2. **Switch from sync to async**: PD regularly check the heartbeat information of TiKV to judge if TiKV peers fail to work or disconnect. If the number of failed peers exceeds the number of replicas of the primary data center and the DR data center `primary-replicas` and `dr-replicas`, the synchronous replication mode fails to work and it is necessary to switch the status. When the failure or disconnect time exceeds the time set by `wait-store-timeout`, PD switches the status of the cluster to async mode. Then PD sends the status of async to all the TiKV nodes and the replication mode for TiKV switches from two-center replication to native Raft majority. +2. **Switch from sync to async**: PD regularly checks the heartbeat information of TiKV to judge whether the TiKV node fails or is disconnected. If the number of failed nodes exceeds the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can no longer serve the data replication and it is necessary to switch the status. When the failure or disconnect time exceeds the time set by `wait-store-timeout`, PD switches the status of the cluster to the async mode. Then PD sends the status of async to all TiKV nodes, and the replication mode for TiKV switches from two-center replication to the native Raft majority. -3. **Switch from async to sync**: PD regularly check the heartbeat information of TiKV to judge if TiKV peers reconnect. If the number of failed peers is less than the number of replicas of the primary data center and the DR data center `primary-replicas` and `dr-replicas`, the synchronous replication mode can be enabled again. PD switches the status of the cluster to sync-recover and sends this status to all the TiKV nodes. All Regions of TiKV gradually switch to two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of Regions of TiKV and calculte the recovery progress. When all Regions of TiKV finish the switching, PD switches the replication mode to synchronous status. +3. **Switch from async to sync**: PD regularly checks the heartbeat information of TiKV to judge whether TiKV nodes are reconnected. If the number of failed peers is less than the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can be enabled again. PD first switches the status of the cluster to sync-recover and sends the status information to all TiKV nodes. All Regions of TiKV gradually switch to the two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of TiKV Regions and calculates the recovery progress. When all TiKV Regions finish the switching, PD switches the replication mode to sync. ### Disaster recovery @@ -234,10 +234,10 @@ This section introduces the disaster recovery solution of the two data centers i When a disaster occurs to a cluster in the synchronous replication mode, you can perform data recovery with `RPO = 0`: -- If the primary data center fails and most of the Voter replicas are lost, and complete data exists in the DR data center, the data can be recovered from the DR data center. At this time, manual intervention is required with professional tools (you can contact TiDB team for recovery). +- If the primary data center fails and most of the Voter replicas are lost, but complete data exists in the DR data center, the lost data can be recovered from the DR data center. At this time, manual intervention is required with professional tools. You can contact the TiDB team for recovery. -- If the DR center fails and a few Voter replicas are lost, the cluster can automatically switch to asynchronous replication mode. to solve the problem. +- If the DR center fails and a few Voter replicas are lost, the cluster automatically switches to the asynchronous replication mode. When a disaster occurs to a cluster that is not in the synchronous replication mode and you cannot perform data recovery with `RPO = 0`: -- If most of the Voter replicas are lost, manual intervention is required with professional tools (you can contact TiDB team for recovery). +- If most of the Voter replicas are lost, manual intervention is required with professional tools. You can contact the TiDB team for recovery. From e9a2c7f8aefe98aeeb026674d71d1037ba386547 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Fri, 20 Aug 2021 11:37:02 +0800 Subject: [PATCH 09/11] make sure consistency --- three-data-centers-in-two-cities-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/three-data-centers-in-two-cities-deployment.md b/three-data-centers-in-two-cities-deployment.md index 7211b1b681ff4..1c08734dc5bd1 100644 --- a/three-data-centers-in-two-cities-deployment.md +++ b/three-data-centers-in-two-cities-deployment.md @@ -14,7 +14,7 @@ The architecture of three DCs in two cities is a highly available and disaster t The distributed database TiDB natively supports the three-DC-in-two-city architecture by using the Raft algorithm, and guarantees the consistency and high availability of data within a database cluster. Because the network latency across DCs in the same city is relatively low, the application traffic can be dispatched to two DCs in the same city, and the traffic load can be shared by these two DCs by controlling the distribution of TiKV Region leaders and PD leaders. -## Architecture +## Deployment architecture This section takes the example of Seattle and San Francisco to explain the deployment mode of three DCs in two cities for the distributed database of TiDB. From a5263a3c2e57db6f14b6aa547d4a2c055abb395e Mon Sep 17 00:00:00 2001 From: Liuxiaozhen12 <82579298+Liuxiaozhen12@users.noreply.github.com> Date: Fri, 20 Aug 2021 14:17:51 +0800 Subject: [PATCH 10/11] Apply suggestions from code review Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> Co-authored-by: ShuNing --- two-data-centers-in-one-city-deployment.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index 2399c2e8fd19b..0ee89b020e48e 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -18,8 +18,8 @@ This section takes the example of a city where two data centers IDC1 and IDC2 ar The architecture of the cluster deployment is as follows: -- The TiDB cluster is deployed to two DCs in one city: the primary IDC1 in the east, and the DR IDC2 in the west. -- The cluster has 4 replicas: 2 Voter replicas in IDC1, 1 Voter replicas and 1 Learner replicas in IDC2. For the TiKV component, each rack has a proper label. +- The TiDB cluster is deployed to two DCs in one city: the primary IDC1 in the east, and the disaster recovery (DR) IDC2 in the west. +- The cluster has 4 replicas: 2 Voter replicas in IDC1, 1 Voter replica and 1 Learner replica in IDC2. For the TiKV component, each rack has a proper label. - The Raft protocol is adopted to ensure consistency and high availability of data, which is transparent to users. ![2-DC-in-1-city architecture](/media/two-dc-replication-1.png) @@ -91,7 +91,7 @@ alertmanager_servers: ### Placement Rules -To deploy a cluster based on the planned topology, you need to use [placement rules](/configure-placement-rules.md) to determine the locations of the cluster replicas. If 4 replica and 2 Voter replica is at the primary center and 1 Voter replica and 1 Learner replica is at the DR center, you can use the placement rules to configure the replicas as follows: +To deploy a cluster based on the planned topology, you need to use [placement rules](/configure-placement-rules.md) to determine the locations of the cluster replicas. If 4 replicas and 2 Voter replicas are at the primary center and 1 Voter replica and 1 Learner replica are at the DR center, you can use the placement rules to configure the replicas as follows: ``` cat rule.json @@ -188,7 +188,7 @@ In the configuration above: + `replication-mode` is the replication mode to be enabled. In the above example, it is set to `dr-auto-sync`. By default, the majority protocol is used. + `label-key` is used to distinguish different data centers and needs to match placement rules. In this example, the primary data center is "east" and the DR data center is "west". -+ `primary-replicas` ia the number of Voter replicas in the primary data center. ++ `primary-replicas` is the number of Voter replicas in the primary data center. + `dr-replicas` is the number of Voter replicas in the DR data center. + `wait-store-timeout` is the waiting time for switching to asynchronous replication mode when network isolation or failure occurs. If the time of network failure exceeds the waiting time, asynchronous replication mode is enabled. The default waiting time is 60 seconds. @@ -222,11 +222,11 @@ The replication mode of a cluster can automatically and adaptively switch betwee The details for the status switch are as follows: -1. **Initialization**: At the initialization stage, the cluster is in the synchronous replication mode. PD sends information to TiKV, and all TiKV nodes strictly follow the synchronous replication mode to work. +1. **Initialization**: At the initialization stage, the cluster is in the synchronous replication mode. PD sends the status information to TiKV, and all TiKV nodes strictly follow the synchronous replication mode to work. 2. **Switch from sync to async**: PD regularly checks the heartbeat information of TiKV to judge whether the TiKV node fails or is disconnected. If the number of failed nodes exceeds the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can no longer serve the data replication and it is necessary to switch the status. When the failure or disconnect time exceeds the time set by `wait-store-timeout`, PD switches the status of the cluster to the async mode. Then PD sends the status of async to all TiKV nodes, and the replication mode for TiKV switches from two-center replication to the native Raft majority. -3. **Switch from async to sync**: PD regularly checks the heartbeat information of TiKV to judge whether TiKV nodes are reconnected. If the number of failed peers is less than the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can be enabled again. PD first switches the status of the cluster to sync-recover and sends the status information to all TiKV nodes. All Regions of TiKV gradually switch to the two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of TiKV Regions and calculates the recovery progress. When all TiKV Regions finish the switching, PD switches the replication mode to sync. +3. **Switch from async to sync**: PD regularly checks the heartbeat information of TiKV to judge whether TiKV nodes are reconnected. If the number of failed nodes is less than the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can be enabled again. PD first switches the status of the cluster to sync-recover and sends the status information to all TiKV nodes. All Regions of TiKV gradually switch to the two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of TiKV Regions and calculates the recovery progress. When all TiKV Regions finish the switching, PD switches the replication mode to sync. ### Disaster recovery @@ -234,10 +234,10 @@ This section introduces the disaster recovery solution of the two data centers i When a disaster occurs to a cluster in the synchronous replication mode, you can perform data recovery with `RPO = 0`: -- If the primary data center fails and most of the Voter replicas are lost, but complete data exists in the DR data center, the lost data can be recovered from the DR data center. At this time, manual intervention is required with professional tools. You can contact the TiDB team for recovery. +- If the primary data center fails and most of the Voter replicas are lost, but complete data exists in the DR data center, the lost data can be recovered from the DR data center. At this time, manual intervention is required with professional tools. You can contact the TiDB team for a recovery solution. - If the DR center fails and a few Voter replicas are lost, the cluster automatically switches to the asynchronous replication mode. When a disaster occurs to a cluster that is not in the synchronous replication mode and you cannot perform data recovery with `RPO = 0`: -- If most of the Voter replicas are lost, manual intervention is required with professional tools. You can contact the TiDB team for recovery. +- If most of the Voter replicas are lost, manual intervention is required with professional tools. You can contact the TiDB team for a recovery solution. From 313785d058007c93973d173fa58dfb4aeba15932 Mon Sep 17 00:00:00 2001 From: Liuxiaozhen12 <82579298+Liuxiaozhen12@users.noreply.github.com> Date: Fri, 20 Aug 2021 15:24:20 +0800 Subject: [PATCH 11/11] Update two-data-centers-in-one-city-deployment.md --- two-data-centers-in-one-city-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/two-data-centers-in-one-city-deployment.md b/two-data-centers-in-one-city-deployment.md index 0ee89b020e48e..93b182c647cc7 100644 --- a/two-data-centers-in-one-city-deployment.md +++ b/two-data-centers-in-one-city-deployment.md @@ -226,7 +226,7 @@ The details for the status switch are as follows: 2. **Switch from sync to async**: PD regularly checks the heartbeat information of TiKV to judge whether the TiKV node fails or is disconnected. If the number of failed nodes exceeds the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can no longer serve the data replication and it is necessary to switch the status. When the failure or disconnect time exceeds the time set by `wait-store-timeout`, PD switches the status of the cluster to the async mode. Then PD sends the status of async to all TiKV nodes, and the replication mode for TiKV switches from two-center replication to the native Raft majority. -3. **Switch from async to sync**: PD regularly checks the heartbeat information of TiKV to judge whether TiKV nodes are reconnected. If the number of failed nodes is less than the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can be enabled again. PD first switches the status of the cluster to sync-recover and sends the status information to all TiKV nodes. All Regions of TiKV gradually switch to the two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of TiKV Regions and calculates the recovery progress. When all TiKV Regions finish the switching, PD switches the replication mode to sync. +3. **Switch from async to sync**: PD regularly checks the heartbeat information of TiKV to judge whether the TiKV node is reconnected. If the number of failed nodes is less than the number of replicas of the primary data center (`primary-replicas`) and the DR data center (`dr-replicas`), the synchronous replication mode can be enabled again. PD first switches the status of the cluster to sync-recover and sends the status information to all TiKV nodes. All Regions of TiKV gradually switch to the two-data-center synchronous replication mode and then report the heartbeat information to PD. PD records the status of TiKV Regions and calculates the recovery progress. When all TiKV Regions finish the switching, PD switches the replication mode to sync. ### Disaster recovery