ДЗ3 готово

main
Andrey Ivanov 2021-02-21 11:58:00 -05:00 committed by Andrey Ivanov
parent f1a25a6b3d
commit c399664b4c
4 changed files with 82 additions and 1 deletions

View File

@ -9,6 +9,7 @@ app-down:
app-reload: app-down app-up app-reload: app-down app-up
db-up: db-up:
rm -rf /opt/mysql_master/* ; \
rm -rf /opt/mysql_slave1/* ; \ rm -rf /opt/mysql_slave1/* ; \
rm -rf /opt/mysql_slave2/* ; \ rm -rf /opt/mysql_slave2/* ; \
docker-compose -f ./cicd/dc_db.yml up -d --build ; \ docker-compose -f ./cicd/dc_db.yml up -d --build ; \
@ -17,6 +18,12 @@ db-up:
db-down: db-down:
docker-compose -f ./cicd/dc_db.yml down docker-compose -f ./cicd/dc_db.yml down
client-up:
docker-compose -f ./cicd/dc_client.yml up -d --build
client-down:
docker-compose -f ./cicd/dc_client.yml down
prom-up: prom-up:
docker-compose -f ./test/monitor/docker-compose.yml up -d --build docker-compose -f ./test/monitor/docker-compose.yml up -d --build

13
cicd/dc_client.yml Normal file
View File

@ -0,0 +1,13 @@
version: '3'
services:
mysql_client:
image: mysql:5.7
hostname: "mysql_client"
container_name: mysql_client
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_PORT: 3306
volumes:
- ./../test/dz003/scripts:/scripts

View File

@ -174,7 +174,53 @@ binlog_do_db = app
sudo make app-up sudo make app-up
``` ```
### 9. Создать нагрузку на запись в любую тестовую таблицу. На стороне, которой нагружаем считать, сколько строк мы успешно записали. ### 9. Создать нагрузку на запись в любую тестовую таблицу. На стороне, которой нагружаем считать, сколько строк мы успешно записали.
- #### Запускаем кластер:
```
sudo make db-up
```
- #### Запускаем контейнер с mysql-client:
```
sudo make client-up
```
- #### Заходим внутрь контейнера и запускаем скрипт:
```
/scripts/dz003_2.sh
```
### 10. С помощью kill -9 убиваем мастер MySQL. ### 10. С помощью kill -9 убиваем мастер MySQL.
- #### Т.к. образ mysql:5.7 не содержит команды ps, не мудрим и грохаем контейнер с мастером:
```
sudo docker kill mysql_master
```
### 11. Заканчиваем нагрузку на запись. ### 11. Заканчиваем нагрузку на запись.
- #### Возвращаемся в контейнер клиента и запоминаем, знаение счетчика строк успешно записанных в таблицу мастера
В нашем случае, скрипт тормазнул после добавления 10233 строк
### 12. Выбираем самый свежий слейв. Промоутим его до мастера. Переключаем на него второй слейв. ### 12. Выбираем самый свежий слейв. Промоутим его до мастера. Переключаем на него второй слейв.
### 13. Проверяем, есть ли потери транзакций. - #### Определяем свежайшую реплику:
```
sudo docker exec mysql_slave1 sh -c "export MYSQL_PWD=root; mysql -u root -e 'SHOW SLAVE STATUS\G' | grep Master_Log_File"
sudo docker exec mysql_slave2 sh -c "export MYSQL_PWD=root; mysql -u root -e 'SHOW SLAVE STATUS\G' | grep Master_Log_File"
```
В нашем случае оба слейва остановились на mysql-bin.000003, поэтому мастером будем промоутить mysql_slave1
З.Ы. Еще можно было бы поиграть с [отложенной репликацией](https://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html), но не в рамках данного эксперимента
- #### Останавливаем на всех слейвах потоки получения обновлений бинарного лога:
```
sudo docker exec mysql_slave1 sh -c "export MYSQL_PWD=root; mysql -u root -e 'STOP SLAVE IO_THREAD; SHOW PROCESSLIST;'"
sudo docker exec mysql_slave2 sh -c "export MYSQL_PWD=root; mysql -u root -e 'STOP SLAVE IO_THREAD; SHOW PROCESSLIST;'"
```
- #### Полностью останавливаем слэйв который будем промоутить до мастера и сбрасываем его бинлог:
```
sudo docker exec mysql_slave1 sh -c "export MYSQL_PWD=root; mysql -u root -e 'STOP SLAVE; RESET MASTER;'"
```
- #### Оставшийся слэйв переключаем на новый мастер:
```
sudo docker exec {slave_to_promote} sh -c "export MYSQL_PWD=root; mysql -u root -e 'STOP SLAVE; CHANGE MASTER TO MASTER_HOST='{slave_to_promote}'; START SLAVE;'"
```
### 13. Проверяем, есть ли потери транзакций:
- #### Проверяем количество строк в тестовой таблице на новом мастере:
```
sudo docker exec {slave_to_promote} sh -c "export MYSQL_PWD=root; mysql -u root -e 'USE app; SELECT count(*) from test;'"
```
В нашем случае, потерь транзакций не наблюдается. В таблице нового мастера те же 10233 строки.

15
test/dz003/scripts/dz003_2.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
mysql -uroot -proot -h mysql_master -t app -e 'CREATE TABLE IF NOT EXISTS test (`id` INT(11), `name` VARCHAR(255));'
let i=1
let noerr=0
while [ $noerr = 0 ]
do
mysql -uroot -proot -h mysql_master -t app -e 'INSERT INTO test (`id`,`name`) VALUES ('$i',"string_value_'$1'")' || ((noerr=1 ))
echo $i
((i++))
done
echo "Err"