From 453f1058ff7066d320207bb4064b1d0b41efd0ab Mon Sep 17 00:00:00 2001 From: Rich Loveland Date: Wed, 22 Jan 2025 11:50:12 -0500 Subject: [PATCH] WIP++ --- .../zone-configs/avoid-manual-zone-configs.md | 2 +- .../v24.3/troubleshoot-replication-zones.png | Bin 0 -> 85418 bytes .../v24.3/troubleshoot-replication-zones.md | 148 +++--------------- 3 files changed, 27 insertions(+), 123 deletions(-) create mode 100644 src/current/images/v24.3/troubleshoot-replication-zones.png diff --git a/src/current/_includes/v24.3/zone-configs/avoid-manual-zone-configs.md b/src/current/_includes/v24.3/zone-configs/avoid-manual-zone-configs.md index e5f57dd1d25..9de5e1854a3 100644 --- a/src/current/_includes/v24.3/zone-configs/avoid-manual-zone-configs.md +++ b/src/current/_includes/v24.3/zone-configs/avoid-manual-zone-configs.md @@ -4,4 +4,4 @@ Cockroach Labs does not recommend adding zone configurations manually, for the f - It is not easy to do proper change management and auditing of manually altered zone configurations. - Manual zone config modifications are managed by the user with no help from the system and must be fully overwritten on each configuration change in order to take effect; this introduces another avenue for error. -For these reasons, most users should use [Multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}) instead; if additional control is needed, [Zone config extensions]({% link {{ page.version.version }}/zone-config-extensions.md %}) can be used to augment the multi-region SQL statements. +Most users should use [Multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}) instead; if additional control is needed, [Zone config extensions]({% link {{ page.version.version }}/zone-config-extensions.md %}) can be used to augment the multi-region SQL statements. diff --git a/src/current/images/v24.3/troubleshoot-replication-zones.png b/src/current/images/v24.3/troubleshoot-replication-zones.png new file mode 100644 index 0000000000000000000000000000000000000000..8126714b54133d4c3d877ecbaaa8308157662405 GIT binary patch literal 85418 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 Mq@kF6+T@S_0)*!gaR2}S literal 0 HcmV?d00001 diff --git a/src/current/v24.3/troubleshoot-replication-zones.md b/src/current/v24.3/troubleshoot-replication-zones.md index 1b5dc7d01f9..62cf3fdafd5 100644 --- a/src/current/v24.3/troubleshoot-replication-zones.md +++ b/src/current/v24.3/troubleshoot-replication-zones.md @@ -22,43 +22,35 @@ This page assumes you have read and understood the following: ## Types of problems -There are several types of problems you may encounter when [manually configuring replication zones]({% link {{ page.version.version }}/configure-replication-zones.md %}#manage-replication-zones). +The most common types of problems you may encounter when [manually configuring replication zones]({% link {{ page.version.version }}/configure-replication-zones.md %}#manage-replication-zones) are: + +1. The _replica location_ problem, a.k.a., "The replicas are not _where_ they should be". For replica location problems, the following zone config variables may be involved: + - [`constraints`]({% link {{ page.version.version }}/configure-replication-zones.md %}#constraints) + - [`lease_preferences`]({% link {{ page.version.version }}/configure-replication-zones.md %}#lease_preferences) + - [`voter_constraints`]({% link {{ page.version.version }}/configure-replication-zones.md %}#voter_constraints) + - [`global_reads`]({% link {{ page.version.version }}/configure-replication-zones.md %}#global_reads) +1. The _replica state_ problem_, a.k.a., "The replicas are not _how_ they should be". For replica state problems, the following zone config variables may be involved: + - [`range_min_bytes`]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-min-bytes) + - [`range_max_bytes`]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) + - [`gc.ttlseconds`]({% link {{ page.version.version }}/configure-replication-zones.md %}#gc-ttlseconds) + - [`num_replicas`]({% link {{ page.version.version }}/configure-replication-zones.md %}#num_replicas) + - [`num_voters`]({% link {{ page.version.version }}/configure-replication-zones.md %}#num_voters) + +This document focuses mostly on the replica location problem. **The replica location problem is the most common reason for a troubleshooting session.** It is most often caused by misconfiguration introduced by manually configuring replication zones, which is why we recommend sticking to abstractions like the [Multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}). -The most common types of problems are: - -1. "The replicas are not _where_ they should be" (replica location). -1. "The replicas are not _how_ they should be" (replica state). - -**The replica location problem is the most common reason for a troubleshooting session.** - -It is most often caused by misconfiguration introduced by manually configuring replication zones, which is why we recommend sticking to abstractions like the [Multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}). - -Finally, if you just did a [cluster restore]({% link {{ page.version.version }}/restore.md %}#full-cluster), it's possible that the problem you're seeing is because [your zone configs were overwritten by the restore](#zone-configs-are-overwritten-during-a-cluster-restore). - -### Zone config settings for each problem type - -For replica location problems, the following zone config variables may be involved: - -- [`constraints`]({% link {{ page.version.version }}/configure-replication-zones.md %}#constraints) -- [`lease_preferences`]({% link {{ page.version.version }}/configure-replication-zones.md %}#lease_preferences) -- [`voter_constraints`]({% link {{ page.version.version }}/configure-replication-zones.md %}#voter_constraints) -- [`global_reads`]({% link {{ page.version.version }}/configure-replication-zones.md %}#global_reads) - -For replica state problems, the following zone config variables may be involved: - -- [`range_min_bytes`]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-min-bytes) -- [`range_max_bytes`]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) -- [`gc.ttlseconds`]({% link {{ page.version.version }}/configure-replication-zones.md %}#gc-ttlseconds) -- [`num_replicas`]({% link {{ page.version.version }}/configure-replication-zones.md %}#num_replicas) -- [`num_voters`]({% link {{ page.version.version }}/configure-replication-zones.md %}#num_voters) +{{site.data.alerts.callout_info}} +If you just did a [cluster restore]({% link {{ page.version.version }}/restore.md %}#full-cluster), it's possible that any problems you're seeing are because [your zone configs were overwritten by the restore](#zone-configs-are-overwritten-during-a-cluster-restore). +{{site.data.alerts.end}} -## How the zone config inheritance hierarchy works +## How zone config inheritance works The most common path by which misconfigurations occur is because of the way inheritance works for zone configurations. -As discussed in [Replication Controls > Level priorities]({% link {{ page.version.version }}/configure-replication-zones.md %}#level-priorities), CockroachDB always uses the most granular replication zone available for each schema object (database, table, etc.). In other words, more-specific settings applied to schema objects at lower levels of the inheritance tree will always override the settings of objects above them in the tree. All configurations will therefore be modified versions of the [`default` range](#view-the-default-replication-zone), which acts as the root of the tree (see diagrams below). This means that any changes to a specific zone configuration's initial values are by definition user-initiated, either via [Multi-region SQL abstractions](XXX) or manual changes using [`CONFIGURE ZONE`](XXX). +As discussed in [Replication Controls > Level priorities]({% link {{ page.version.version }}/configure-replication-zones.md %}#level-priorities), CockroachDB always uses the most granular replication zone available for each schema object (database, table, etc.). More-specific settings applied to schema objects at lower levels of the inheritance tree will always override the settings of objects above them in the tree. All configurations will therefore be modified versions of the [`default` range](#view-the-default-replication-zone), which acts as the root of the tree (see diagrams below). -Each zone config inherits all of its initial values from its parent object. A zone config only stores the values that differ from its parent. CockroachDB looks up the values for any unset fields in the parent object’s zone configuration. This continues recursively up the inheritance tree all the way to the `default` zone config. In practice, most values are cached to avoid performance impacts. +This means that any changes to a specific zone configuration's initial values are by definition user-initiated, either via [Multi-region SQL abstractions]({% link {{ page.version.version }}/multiregion-overview.md %}) or manual changes using [`CONFIGURE ZONE`]({% link {{ page.version.version }}/alter-database.md %}#configure-zone). + +Because each zone config inherits all of its initial values from its parent object, it only stores the values that differ from its parent. Any fields that are unset will be looked up in the parent object’s zone configuration. This continues recursively up the inheritance tree all the way to the `default` zone config. (To avoid performance impacts, most values are cached.) The hierarchy of inheritance for zone configs can be visualized using the following outline-style diagram, in which increased levels of indentation denote inheritance relationships. @@ -79,91 +71,7 @@ The hierarchy of inheritance for zone configs can be visualized using the follow The following diagram presents the same zone configurations as the previous diagram, but using boxes and lines. Each box represents a schema object's zone configuration, and each line connects a parent object to its child objects, which will inherit its values (unless those values are changed). The dotted lines between (sub)partitions represents the fact that sub-partitions do not inherit their values from their parent partitions (rows). Instead, they inherit their fields from the parent table. For more information, see [cockroachdb/cockroach#75862](https://github.com/cockroachdb/cockroach/issues/75862). -[XXX](): REPLACE BELOW WITH PNG IMAGE - -``` - ┌───────────────────────────────┐ - │ │ - │ Default │ - │ │ - └───────────────────────────────┘ - │ - │ - ┌───────────────────────────┐ │ ┌───────────────────────────────┐ - │ │ ┌───────────────────────────┐ │ │ - │ │ │ │ │ │ - ┌───────────────────────────┐ └────────────│ Database │─────────────────┘ ┌───────────────────────────┐ - │ │ │ │ │ │ - │ Table │ └───────────────────────────┘ │ Table │ - │ │ │ │ - └───────────────────────────┘ └───────────────────────────┘ - │ │ - │ │ - │ │ - ┌───────────────────────────┐ │ ┌───────────────────────────┐ │ - │ │ │ │ │ │ - │ Index │────┤ │ Index │◀──────────┤ - │ │ │ │ │ │ - └───────────────────────────┘ │ └───────────────────────────┘ │ - ┌────────────────────┤ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ ├────────────────────────────┐ │ - │ │ │ ┌───────────────────────────┐ │ - │ │ │ │ │ │ - │ │ │ │ Index │◀──────────┘ - │ │ │ │ │ - ┌───────────────────────────┐ │ │ └───────────────────────────┘ - │ │ ├────────────────────────────┼──────────────────────────────┐ - │ Partition (row) A │─ ─ ─ ┼ ─ ┐ │ │ - │ │ │ │ │ - └───────────────────────────┘ │ │ │ │ - │ │ │ │ - │ │ │ │ - └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ─ ─ │ - │ │ │ │ │ - │ ┌───────────────────────────┐ │ - │ │ │ │ │ │ - │ │ (Sub)Partition A.1 │ ─ │ - ┌────────────┘ │ │ │ │ - │ └───────────────────────────┘ │ - │ │ │ │ - │ │ - │ │ │ │ - │ │ - │ │ │ │ - │ │ - │ │ │ │ - │ │ - │ │ │ ┌───────────────────────────┐ - │ │ │ - │ │ └ ─ ─ ─ ─ ─ ─ ─ ─│ (Sub)Partition A.1.1 │ - │ │ │ - │ │ └───────────────────────────┘ - │ - │ │ - │ - │ │ - │ - │ │ - │ - │ │ - │ - │ │ - │ - │ │ - │ - │ │ - │ - │ │ - ┌───────────────────────────┐ - │ │ │ - │ (Sub)Partition A.2 │◀─ - │ │ - └───────────────────────────┘ -``` +Replication zone config inheritance diagram [XXX](): REVISE / REORDER THE FOLLOWING? HOW DOES IT FIT WITH THE DIAGRAMS? @@ -346,7 +254,7 @@ As you can see from this example, this is how we get into a state where manual " ### Step 2. Move upward in the inheritance hierarchy as needed -### Step 1. (Optional) Confirm invalid replication behavior +### Step 3. Confirm invalid replication behavior using critical nodes endpoint Monitor the output of the [critical nodes endpoint]({% link {{ page.version.version }}/monitoring-and-alerting.md %}#critical-nodes-endpoint) to see if you have ranges that are under-replicated or violating constraints. @@ -425,7 +333,7 @@ ORDER BY movr_tables.range_id If the critical nodes endpoint said the constraint violation was for range ID 103 (say), we would know to look at the zone configuration for the `rides` table and the `rides_pkey` primary index. -### Step 2. Start with Look at schema object's zone config +### Step 4. Start with Look at schema object's zone config ([XXX](): REWRITE ME) To look at the zone configurations for the `rides` table and the `rides@rides_pkey` index, run the following statements: @@ -465,10 +373,6 @@ SHOW ZONE CONFIGURATION FROM INDEX rides@rides_pkey; (1 row) ~~~ -### Step 3. Think hard (???) about whether the behavior you're seeing is what you specified but not what you meant - -[XXX](): WRITE MEEEE - ## Considerations ### Replication system priorities: data placement vs data durability