Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add docs on VTGate buffering for MoveTables and Reshard traffic switching #1733

Merged
merged 2 commits into from
May 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion content/en/docs/20.0/concepts/move-tables.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: MoveTables
---

MoveTables is a new workflow based on VReplication. It enables you to relocate tables between keyspaces, and therefore physical MySQL instances, without downtime.
MoveTables is a workflow based on VReplication. It enables you to relocate tables between keyspaces, and therefore physical MySQL instances, without downtime.

## Identifying Candidate Tables

Expand Down
19 changes: 13 additions & 6 deletions content/en/docs/20.0/reference/features/vtgate-buffering.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ with the simplest case: that of buffering during a PRS (PlannedReparentShard)
operation. Examples of various edge cases can be found in
[Buffering Scenarios](../../../user-guides/configuration-advanced/buffering-scenarios/).

{{< warning >}}
The buffering feature is not guaranteed to eliminate errors sent to the application, but
rather reduce them or make them less frequent. The application should still endeavor to
handle errors appropriately if/when they occur (e.g. unplanned outages, planned failovers,
VReplication migrations, etc.)
{{< /warning >}}

## VTGate flags to enable buffering

First, let us cover the flags that need to be set in VTGate to enable
Expand Down Expand Up @@ -75,13 +82,13 @@ Fundamentally Vitess will:
* Drain the buffered queries to the new `PRIMARY` tablet.
* Begin the countdown timer for `buffer_max_failover_duration`.

{{< warning >}}
This process is not guaranteed to eliminate errors to the application, but
rather reduce them or make them less frequent. The application should still
endeavor to handle errors appropriately if/when they occur (e.g. unplanned
outages/fail overs, etc.)
{{< /warning >}}
## What happens during a MoveTables or Reshard SwitchTraffic or ReverseTraffic with Buffering

Fundamentally Vitess will:

* Hold up and buffer any queries sent to the tables (MoveTables) or shards (Reshard) for which traffic is being switched.
* Perform the traffic switching work so that application traffic against the tables (MoveTables) or shards (Reshard) are transparently switched to the new keyspace (MoveTables) or shards (Reshard).
* Drain the buffered queries to the new keyspace or shards — or if the switch failed then back to the original keyspace or shards.

## How does it work?

Expand Down
8 changes: 8 additions & 0 deletions content/en/docs/20.0/reference/vreplication/movetables.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,21 @@ It is too expensive to get real-time row counts of tables, using _count(*)_, say

[`switchtraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_switchtraffic/) switches traffic forward for the `tablet-types` specified. You can switch all traffic with just one command, and this is the default behavior. Note that you can now switch replica, rdonly, and primary traffic in any order.

{{< info >}}
Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when switching traffic which can virtually eliminate any visible impact on application users.
{{</ info >}}

</div>

#### ReverseTraffic
<div class="cmd">

[`reversetraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_reversetraffic/) switches traffic in the reverse direction for the `tablet-types` specified. The traffic should have been previously switched forward using `SwitchTraffic` for the `cells` and `tablet-types` specified.

{{< info >}}
Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when reversing traffic which can virtually eliminate any visible impact on application users.
{{</ info >}}

</div>

#### Cancel
Expand Down
8 changes: 8 additions & 0 deletions content/en/docs/20.0/reference/vreplication/reshard.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,21 @@ It is too expensive to get real-time row counts of tables, using _count(*)_, say

[`SwitchTraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_switchtraffic) switches traffic forward for the `tablet-types` specified. This replaces the previous `SwitchReads` and `SwitchWrites` commands with a single one. It is now possible to switch all traffic with just one command, and this is the default behavior. Also, you can now switch replica, rdonly and primary traffic in any order: earlier you needed to first `SwitchReads` (for replicas and rdonly tablets) first before `SwitchWrites`.

{{< info >}}
Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when switching traffic which can virtually eliminate any visible impact on application users.
{{</ info >}}

</div>

#### ReverseTraffic
<div class="cmd">

[`ReverseTraffic`](../../programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_reversetraffic/) switches traffic in the reverse direction for the `tablet-types` specified. The traffic should have been previously switched forward using `SwitchTraffic` for the `cells` and `tablet_types` specified.

{{< info >}}
Note that VTGate can [buffer queries](../../features/vtgate-buffering/) when reversing traffic which can virtually eliminate any visible impact on application users.
{{</ info >}}

</div>

#### Cancel
Expand Down