region_sharding: working resharding example

Signed-off-by: deepthi <deepthi@planetscale.com>
This commit is contained in:
deepthi 2020-07-20 11:54:16 -07:00
Родитель 2130a0e759
Коммит 1653579180
19 изменённых файлов: 302 добавлений и 73 удалений

2
.github/workflows/region_example.yml поставляемый
Просмотреть файл

@ -51,5 +51,5 @@ jobs:
fi fi
# Make sure that testing is entirely non-reliant on config # Make sure that testing is entirely non-reliant on config
mv config config-moved mv config config-moved
sed -i 's/user\/my-vitess/runner\/work\/vitess\/vitess/g' examples/region_sharding/main_vschema.json #set correct path to countries.json sed -i 's/user\/my-vitess/runner\/work\/vitess\/vitess/g' examples/region_sharding/main_vschema_sharded.json #set correct path to countries.json
eatmydata -- test/region_example.sh eatmydata -- test/region_example.sh

Просмотреть файл

@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# this script brings up zookeeper and all the vitess components # this script brings up topo server and all the vitess components
# required for a single shard deployment. # required for a single shard deployment.
source ./env.sh source ./env.sh
@ -31,27 +31,17 @@ fi
# start vtctld # start vtctld
CELL=zone1 ./scripts/vtctld-up.sh CELL=zone1 ./scripts/vtctld-up.sh
# start vttablets for main keyspace. we start only one tablet each (master) # start unsharded keyspace and tablet
CELL=zone1 TABLET_UID=100 ./scripts/mysqlctl-up.sh CELL=zone1 TABLET_UID=100 ./scripts/mysqlctl-up.sh
SHARD=-40 CELL=zone1 KEYSPACE=main TABLET_UID=100 ./scripts/vttablet-up.sh SHARD=0 CELL=zone1 KEYSPACE=main TABLET_UID=100 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=200 ./scripts/mysqlctl-up.sh
SHARD=40-80 CELL=zone1 KEYSPACE=main TABLET_UID=200 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=300 ./scripts/mysqlctl-up.sh
SHARD=80-c0 CELL=zone1 KEYSPACE=main TABLET_UID=300 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=400 ./scripts/mysqlctl-up.sh
SHARD=c0- CELL=zone1 KEYSPACE=main TABLET_UID=400 ./scripts/vttablet-up.sh
# set master vtctlclient InitShardMaster -force main/0 zone1-100
vtctlclient InitShardMaster -force main/-40 zone1-100
vtctlclient InitShardMaster -force main/40-80 zone1-200
vtctlclient InitShardMaster -force main/80-c0 zone1-300
vtctlclient InitShardMaster -force main/c0- zone1-400
# create the schema # create the schema
vtctlclient ApplySchema -sql-file create_main_schema.sql main vtctlclient ApplySchema -sql-file create_main_schema.sql main
# create the vschema # create the vschema
vtctlclient ApplyVSchema -vschema_file main_vschema.json main vtctlclient ApplyVSchema -vschema_file main_vschema_initial.json main
# start vtgate # start vtgate
CELL=zone1 ./scripts/vtgate-up.sh CELL=zone1 ./scripts/vtgate-up.sh

Просмотреть файл

@ -0,0 +1,33 @@
#!/bin/bash
# Copyright 2020 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
source ./env.sh
# apply sharding vschema
vtctlclient ApplyVSchema -vschema_file main_vschema_sharded.json main
# create the schema needed for lookup vindex
vtctlclient ApplySchema -sql-file create_lookup_schema.sql main
# create the lookup vindex
vtctlclient CreateLookupVindex -tablet_types=MASTER main "$(cat lookup_vindex.json)"
# we have to wait for replication to catch up
# Can see on vttablet status page Vreplication that copy is complete
sleep 5
#externalize vindex
vtctlclient ExternalizeVindex main.customer_region_lookup

Просмотреть файл

@ -0,0 +1,33 @@
#!/bin/bash
# Copyright 2020 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
source ./env.sh
# start vttablets for new shards. we start only one tablet each (master)
CELL=zone1 TABLET_UID=200 ./scripts/mysqlctl-up.sh
SHARD=-40 CELL=zone1 KEYSPACE=main TABLET_UID=200 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=300 ./scripts/mysqlctl-up.sh
SHARD=40-80 CELL=zone1 KEYSPACE=main TABLET_UID=300 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=400 ./scripts/mysqlctl-up.sh
SHARD=80-c0 CELL=zone1 KEYSPACE=main TABLET_UID=400 ./scripts/vttablet-up.sh
CELL=zone1 TABLET_UID=500 ./scripts/mysqlctl-up.sh
SHARD=c0- CELL=zone1 KEYSPACE=main TABLET_UID=500 ./scripts/vttablet-up.sh
# set master
vtctlclient InitShardMaster -force main/-40 zone1-200
vtctlclient InitShardMaster -force main/40-80 zone1-300
vtctlclient InitShardMaster -force main/80-c0 zone1-400
vtctlclient InitShardMaster -force main/c0- zone1-500

Просмотреть файл

@ -0,0 +1,19 @@
#!/bin/bash
# Copyright 2020 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
source ./env.sh
vtctlclient Reshard -tablet_types=MASTER main.main2regions '0' '-40,40-80,80-c0,c0-'

Просмотреть файл

@ -0,0 +1,22 @@
#!/bin/bash
# Copyright 2020 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# this script migrates traffic for the rdonly and replica tablets
source ./env.sh
vtctlclient SwitchReads -tablet_type=rdonly main.main2regions
vtctlclient SwitchReads -tablet_type=replica main.main2regions

Просмотреть файл

@ -0,0 +1,29 @@
#!/bin/bash
# Copyright 2020 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# this script migrates traffic for the master tablet
source ./env.sh
vtctlclient SwitchWrites main.main2regions
# to go back to unsharded
# call SwitchReads and SwitchWrites with workflow main.main2regions_reverse
# delete vreplication rows from sharded tablets
# drop all the tables
# change vschema back to unsharded
# drop lookup table

Просмотреть файл

@ -0,0 +1,21 @@
#!/bin/bash
# Copyright 2019 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# this script brings down the tablets for main/0 keyspace/shard
source ./env.sh
CELL=zone1 TABLET_UID=100 ./scripts/vttablet-down.sh
CELL=zone1 TABLET_UID=100 ./scripts/mysqlctl-down.sh

Просмотреть файл

@ -0,0 +1,21 @@
#!/bin/bash
# Copyright 2019 The Vitess Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# this script deletes the old shard 0 which has been replaced by 4 shards
source ./env.sh
vtctlclient DeleteShard -recursive main/0

Просмотреть файл

@ -21,7 +21,7 @@ source ./env.sh
./scripts/vtgate-down.sh ./scripts/vtgate-down.sh
for tablet in 100 200 300 400; do for tablet in 200 300 400 500; do
if vtctlclient -server localhost:15999 GetTablet zone1-$tablet >/dev/null 2>&1; then if vtctlclient -server localhost:15999 GetTablet zone1-$tablet >/dev/null 2>&1; then
echo "Shutting down tablet zone1-$tablet" echo "Shutting down tablet zone1-$tablet"
CELL=zone1 TABLET_UID=$tablet ./scripts/vttablet-down.sh CELL=zone1 TABLET_UID=$tablet ./scripts/vttablet-down.sh
@ -45,7 +45,7 @@ fi
if [ ! -z "$VTDATAROOT" ]; then if [ ! -z "$VTDATAROOT" ]; then
if pgrep -f -l "$VTDATAROOT" >/dev/null; then if pgrep -f -l "$VTDATAROOT" >/dev/null; then
echo "ERROR: Stale processes detected! It is recommended to manuallly kill them:" echo "ERROR: Stale processes detected! It is recommended to manually kill them:"
pgrep -f -l "$VTDATAROOT" pgrep -f -l "$VTDATAROOT"
else else
echo "All good! It looks like every process has shut down" echo "All good! It looks like every process has shut down"

Просмотреть файл

@ -10,13 +10,45 @@ This document contains the summary of the commands to be run.
"region_map": "/home/user/vitess/examples/region_sharding/countries.json", "region_map": "/home/user/vitess/examples/region_sharding/countries.json",
# Bring up initial cluster and main keyspace # Bring up initial cluster and main keyspace (unsharded)
./101_initial_cluster.sh ./101_initial_cluster.sh
# setup aliases
alias mysql="command mysql -h 127.0.0.1 -P 15306"
alias vtctlclient="command vtctlclient -server localhost:15999 -log_dir ${VTDATAROOT}/tmp -alsologtostderr"
# Insert and verify data # Insert and verify data
mysql < insert_customers.sql mysql < insert_customers.sql
mysql --table < show_initial_data.sql
# create schema and vschema for sharding (+lookup vindex)
./201_main_sharded.sh
# bring up shards and tablets
./202_new_tablets.sh
# reshard
./203_reshard.sh
# SwitchReads
./204_switch_reads.sh
# run script to create traffic before switching writes
#./client.sh
# SwitchWrites
./205_switch_writes.sh
# show no / minimal write errors during switch
# verify sharded data
mysql --table < show_data.sql mysql --table < show_data.sql
# down shard
./206_down_shard_0.sh
# delete shard 0
./207_delete_shard_0.sh
# Down cluster # Down cluster
./201_teardown.sh ./301_teardown.sh
``` ```

Просмотреть файл

@ -0,0 +1,5 @@
CREATE TABLE customer_lookup (
id int NOT NULL,
keyspace_id varbinary(256),
primary key(id)
);

Просмотреть файл

@ -5,8 +5,3 @@ CREATE TABLE customer (
country varbinary(256), country varbinary(256),
primary key(id) primary key(id)
); );
CREATE TABLE customer_lookup (
id int NOT NULL,
keyspace_id varbinary(256),
primary key(id)
);

Просмотреть файл

@ -0,0 +1,24 @@
{
"sharded": true,
"vindexes": {
"customer_region_lookup": {
"type": "consistent_lookup_unique",
"params": {
"table": "main.customer_lookup",
"from": "id",
"to": "keyspace_id"
},
"owner": "customer"
}
},
"tables": {
"customer": {
"column_vindexes": [
{
"column": "id",
"name": "customer_region_lookup"
}
]
}
}
}

Просмотреть файл

@ -1,46 +0,0 @@
{
"sharded": true,
"vindexes": {
"region_vdx": {
"type": "region_json",
"params": {
"region_map": "/home/user/my-vitess/examples/region_sharding/countries.json",
"region_bytes": "1"
}
},
"customer_region_lookup": {
"type": "consistent_lookup_unique",
"params": {
"table": "customer_lookup",
"from": "id",
"to": "keyspace_id"
},
"owner": "customer"
},
"identity": {
"type": "binary"
}
},
"tables": {
"customer_lookup": {
"column_vindexes": [
{
"column": "keyspace_id",
"name": "identity"
}
]
},
"customer": {
"column_vindexes": [
{
"columns": ["id", "country"],
"name": "region_vdx"
},
{
"column": "id",
"name": "customer_region_lookup"
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,5 @@
{
"tables": {
"customer": {}
}
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"sharded": true,
"vindexes": {
"region_vdx": {
"type": "region_json",
"params": {
"region_map": "/home/user/my-vitess/examples/region_sharding/countries.json",
"region_bytes": "1"
}
}
},
"tables": {
"customer": {
"column_vindexes": [
{
"columns": ["id", "country"],
"name": "region_vdx"
}
]
}
}
}

Просмотреть файл

@ -0,0 +1,2 @@
use main;
select * from customer;

Просмотреть файл

@ -32,6 +32,28 @@ source ./env.sh # Required so that "mysql" works from alias
sleep 5 # Give vtgate time to really start. sleep 5 # Give vtgate time to really start.
mysql < insert_customers.sql mysql < insert_customers.sql
mysql --table < show_data.sql mysql --table < show_initial_data.sql
./201_teardown.sh # create schema and vschema for sharding (+lookup vindex)
./201_main_sharded.sh
# bring up shards and tablets
./202_new_tablets.sh
# reshard
./203_reshard.sh
# SwitchReads
./204_switch_reads.sh
# SwitchWrites
./205_switch_writes.sh
# down shard
./206_down_shard_0.sh
# delete shard 0
./207_delete_shard_0.sh
# Down cluster
./301_teardown.sh