ДЗ3 готово
parent
f1a25a6b3d
commit
c399664b4c
7
Makefile
7
Makefile
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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 строки.
|
||||||
|
|
||||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue