Teste de escalonamento

Mais slaves podem ser adicionados ao MySQL Cluster para aumentar a capacidade de leitura. Isso pode ser feito seguindo o comando.

kubectl scale statefulset mysql --replicas=5

Você pode ver a mensagem que statefulset ‘mysql’ escalou.

statefulset "mysql" scaled

Veja o progresso da escala ordenada e graciosa.

kubectl get pods -l app=mysql -w
NAME      READY     STATUS     RESTARTS   AGE
mysql-0   2/2       Running    0          1d
mysql-1   2/2       Running    0          1d
mysql-2   2/2       Running    0          24m
mysql-3   0/2       Init:0/2   0          8s
mysql-3   0/2       Init:1/2   0         9s
mysql-3   0/2       PodInitializing   0         11s
mysql-3   1/2       Running   0         12s
mysql-3   2/2       Running   0         16s
mysql-4   0/2       Pending   0         0s
mysql-4   0/2       Pending   0         0s
mysql-4   0/2       Init:0/2   0         0s
mysql-4   0/2       Init:1/2   0         10s
mysql-4   0/2       PodInitializing   0         11s
mysql-4   1/2       Running   0         12s
mysql-4   2/2       Running   0         17s

Pode demorar alguns minutos para iniciar todos os pods.

Pressione Ctrl C para parar de acompanhar. Abra outro terminal para Verificar se você fechou o loop .

kubectl run mysql-client-loop --image=mysql:5.7 -i -t --rm --restart=Never --\
   bash -ic "while sleep 1; do mysql -h mysql-read -e 'SELECT @@server_id,NOW()'; done"

You will see 5 servers are running.

+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         101 | 2018-11-14 13:56:42 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         102 | 2018-11-14 13:56:43 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         104 | 2018-11-14 13:56:44 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         100 | 2018-11-14 13:56:45 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         104 | 2018-11-14 13:56:46 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         101 | 2018-11-14 13:56:47 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         100 | 2018-11-14 13:56:48 |
+-------------+---------------------+
+-------------+---------------------+
| @@server_id | NOW()               |
+-------------+---------------------+
|         103 | 2018-11-14 13:56:49 |
+-------------+---------------------+

Verifique se o slave recém-implementado (mysql-3) possui o mesmo conjunto de dados pelo comando a seguir.

kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=Never --\
 mysql -h mysql-3.mysql -e "SELECT * FROM test.messages"

Ele mostrará os mesmos dados que o master possui.

+--------------------------+
| message                  |
+--------------------------+
| hello, from mysql-client |
+--------------------------+

Reduza as réplicas para 3 executando o comando.

kubectl scale statefulset mysql --replicas=3

Você pode ver o ‘mysql’ statefulset escalonado

statefulset "mysql" scaled

Observe que a escala não exclui os dados ou PVCs anexados aos pods. Você tem que excluí-los manualmente. Verifique se a escala é finalizada pelo seguinte comando.

kubectl get pods -l app=mysql
NAME      READY     STATUS    RESTARTS   AGE
mysql-0   2/2       Running   0          1d
mysql-1   2/2       Running   0          1d
mysql-2   2/2       Running   0          35m

Verifique 2 PVCs (data-mysql-3, data-mysql-4) ainda existem executando o comando.

kubectl get pvc -l app=mysql
NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-mysql-0   Bound     pvc-83e9dfeb-e721-11e8-86c5-069628ef0c9c   10Gi       RWO            mysql-gp2            1d
data-mysql-1   Bound     pvc-977e7806-e721-11e8-86c5-069628ef0c9c   10Gi       RWO            mysql-gp2            1d
data-mysql-2   Bound     pvc-b3009b02-e721-11e8-86c5-069628ef0c9c   10Gi       RWO            mysql-gp2            1d
data-mysql-3   Bound     pvc-de14acd8-e811-11e8-86c5-069628ef0c9c   10Gi       RWO            mysql-gp2            34m
data-mysql-4   Bound     pvc-e916c3ec-e812-11e8-86c5-069628ef0c9c   10Gi       RWO            mysql-gp2            26m

Desafio:

Por padrão, a exclusão de um PersistentVolumeClaim excluirá seu volume persistente associado. E se você quisesse manter o volume? Alterar a política de recuperação do PersistentVolume associado ao PVC “data-mysql-3” para “Retain”. Por favor, veja Documentação do kubernetes para ajudá-lo

Expand here to see the solution

Delete data-mysql-3, data-mysql-4 by following command.

kubectl delete pvc data-mysql-3
kubectl delete pvc data-mysql-4
persistentvolumeclaim "data-mysql-3" deleted
persistentvolumeclaim "data-mysql-4" deleted