In this fourth section we are going to setup the Vitess cluster.
We are now going to do a few things. We will create a vitess
namespace in our kubernetes cluster. We create the CRDs and other kubernetes objects required in order to run the operator, taken from the official Vitess Operator GitHub repository. Finally, we will run the operator on kubernetes.
You need to have cloned the vitess-operator repository in the
./lib
folder. You can simply run the command:make clone_vitess_operator
.
The make command we will use is:
make setup_vitess_operator_kubernetes
After a moment, vitess-operator's pod should be up and running in kubernetes, which can be checked by running the following command.
kubectl get pods -n vitess
Now, we are going to setup a simple vitess cluster. We will create three keyspaces in our Vitess cluster. The three namespaces are:
config
articles
users
Each keyspace will be formed of 2 kubernetes pods. We will have 1 pod for the master
, and 1 other pod for the replica
vttablet. We are also going to create a ConfigMap
and a Secret
. Both are hosting config that will be used throughout this quick start. The command we will run is:
make setup_vitess_kubernetes
After a moment, two new deployments should show up. We have the vtgate
and vtctld
deployments:
kubectl get deployment -n vitess
Should output:
NAME READY UP-TO-DATE AVAILABLE AGE
vitess-operator 1/1 1 1 6m25s
vitess-zone1-vtctld-484cbf8c 1/1 1 1 2m39s
vitess-zone1-vtgate-1c6a88c4 1/1 1 1 2m39s
And we should also be able to see all our new vttablet
:
kubectl get pods --selector="planetscale.com/component=vttablet" -n vitess
Should output:
NAME READY STATUS RESTARTS AGE
vitess-vttablet-zone1-0136547469-ddf1c39f 3/3 Running 1 5m
vitess-vttablet-zone1-0808196278-480a1110 3/3 Running 2 7m
vitess-vttablet-zone1-0837820985-44599818 3/3 Running 1 5m
vitess-vttablet-zone1-1651728703-a7361ca4 3/3 Running 2 5m
vitess-vttablet-zone1-3133170080-c4ca8d9c 3/3 Running 1 7m
vitess-vttablet-zone1-3249758605-17aa0869 3/3 Running 2 5m
vitess-vttablet-zone1-3724453505-5a510085 3/3 Running 2 5m
vitess-vttablet-zone1-3774659171-51411321 3/3 Running 1 7m
vitess-vttablet-zone1-3890619061-d6d202c2 3/3 Running 1 5m
vitess-vttablet-zone1-4224402714-96c8f9a7 3/3 Running 2 5m
Now, we will create the ingress routes to access our Vitess cluster. We will create two HTTP routes, one for vttablet's metrics, and another one for vtctld. We will also create 2 TCP routes, one to access VTGate's mysql interface, and the other to use vtctlclient.
make setup_traefik_vitess
We can access the two new endpoints to the following URLs:
We can also connect to our Vitess cluster by using a MySQL client with the following command:
mysql -h tagenal -P 3000 -u user
We can use vtctlclient with this command:
vtctlclient -server=tagenal:8000
We can also setup aliases:
alias mysql="mysql -h tagenal -P 3000 -u user" alias vtctlclient="vtctlclient -server=tagenal:8000"
These aliases allow us to directly use
mysql
andvtctlclient
commands.
We are now going to do a few things. We will create the SQL tables, create the incrementation sequences that will allow us to auto increment our tables, and finally we will upload the Vindexes to Vitess. The Vindexes are defining the behaviors our the tables in Vitess. We are going to execute the following command:
make init_vitess_all
Now that we have setup our tables and Vindexes, we are going to create some VReplication stream. VReplication streams are being used to replicate data across the shards of Vitess.
We will create a stream from the shard -80
of the articles keyspace to shard 80-
of the same keyspace. This stream will replicate all the articles that have a science
category into the shard 80-
. We will also create a second stream for the be_read table. This second stream will populate the be_read
tables thanks to the user_read
records.
We run the commands:
make init_vreplication_articles
make init_vreplication_article_be_read
We are now going to create some kubernetes CronJobs. We need to add three jobs. The jobs created by the CronJobs object will come populate the popularity
table, given a certain cron schedule, the popularity
table will be updated with new records given the user_read
table. One CronJobs will handle the daily
records, another one will compute the weekly
records, and the last one will compute the monthly
ones.
To setup the CronJobs we use the following command:
make init_cronjobs_popularity
We are now going to insert some data into our newly created vitess cluster.
make insert_few_user_row
make insert_few_article_row
In this section we have setup our Vitess cluster. We can verify the status of our Vitess cluster by running the command:
make show_vitess_tablets
This command will display all the vttablets running in our cluster. It should output something like:
+-------+----------+-------+------------+---------+------------------+-------------+----------------------+
| Cell | Keyspace | Shard | TabletType | State | Alias | Hostname | MasterTermStartTime |
+-------+----------+-------+------------+---------+------------------+-------------+----------------------+
| zone1 | articles | -80 | MASTER | SERVING | zone1-3249758605 | 172.17.0.7 | 2020-12-18T16:46:41Z |
| zone1 | articles | -80 | REPLICA | SERVING | zone1-0837820985 | 172.17.0.18 | |
| zone1 | articles | 80- | MASTER | SERVING | zone1-3133170080 | 172.17.0.10 | 2020-12-18T16:46:33Z |
| zone1 | articles | 80- | REPLICA | SERVING | zone1-0136547469 | 172.17.0.16 | |
| zone1 | config | - | MASTER | SERVING | zone1-1651728703 | 172.17.0.13 | 2020-12-18T16:46:46Z |
| zone1 | config | - | REPLICA | SERVING | zone1-4224402714 | 172.17.0.11 | |
| zone1 | users | -80 | MASTER | SERVING | zone1-3774659171 | 172.17.0.9 | 2020-12-18T16:46:58Z |
| zone1 | users | -80 | REPLICA | SERVING | zone1-3724453505 | 172.17.0.5 | |
| zone1 | users | 80- | MASTER | SERVING | zone1-3890619061 | 172.17.0.12 | 2020-12-18T16:46:43Z |
| zone1 | users | 80- | REPLICA | SERVING | zone1-0808196278 | 172.17.0.8 | |
+-------+----------+-------+------------+---------+------------------+-------------+----------------------+
Thanks to the ingress routes we have created with Traefik Proxy earlier, we can access Vitess Vtctld web UI at http://vtctld.tagenal/app/dashboard.
Now, we will create a cache layer with Redis, which is explained here.