Database/Maria,Mysql

인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL 실습 : Insert (3)

bluebamus 2022. 1. 12.

2022.01.09 - [Database/Maria,Mysql] - 인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용한 Proxy Layer 구축 (1)

 

인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용한 Proxy Layer 구축 (1)

* 참고하면 좋은 자료를 먼저 첨부함 https://www.youtube.com/watch?v=Mzks0isSqMM 1. MySQL Load Balancers가 필요한 이유 1) MySQL Load Balancers의 정의 - 종류 : MaxScale, ProxySQL, HAProxy, MySQL Router..

devspoon.tistory.com

 

2022.01.11 - [Database/Maria,Mysql] - 인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL 실습 (2)

 

인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL 실습 (2)

2022.01.09 - [Database/Maria,Mysql] - 인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용한 Proxy Layer 구축 (1) 인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용..

devspoon.tistory.com

 

 

1. Insert Default Test 

    1) 시나리오

        - 테스트 테이블에 ProxySQL을 통해 데이터를 입력시 어떤 호스트를 통해 쓰기를 시도하는지 확인한다.          

 

    2) 테스트

        - db001에 테스트용 insert_test 테이블을 생성

sudo docker exec -it -uroot db001 bash

mysql -uroot -p

mysql> use testdb;

mysql> create table insert_test(hostname varchar(5) not null, insert_time datetime not null);

테이블 정보

        - 테스트 스크립트 작성(insert 테스트)

vi app_test_insert.sh

#!/bin/bash

while true;
do

	mysql -uappuser -papppass -h127.0.0.1 -P16033 -N -e "insert into testdb.insert_test select @@hostname,now()" 2>&1| grep -v "Warning"
    
    sleep 1
    
done

 

        - 테스트 수행

chmod 777 app_test_insert.sh

./app_test_insert.sh

sudo docker exec -it -uroot db001 bash

mysql -uroot -p

mysql> select * from testdb.insert_test;

테스트 결과

 

2. Insert 장애 테스트 Test 

    1) 시나리오

        - insert 스크립트가 동작 중 db001 컨테이너를 중지하고 db002 컨테이너에서 testdb의 insert_test 테이블 확인

 

    2) 테스트

        - insert_test 테이블 초기화

sudo docker exec -it db001 bash

mysql -uroot -p

mysql> truncate table testdb.insert_test;

테이블 내 데이터 초기화

 

        - 테스트 스크립트 실행

./app_test_insert.sh

 

        - db001 컨테이너 중지

sudo docker stop db001

 

 

        - db002 컨테이너에서 testdb.insert_test 내용 확인

sudo docker exec -it -uroot db002 bash

mysql -uroot -p

mysql> select * from testdb.insert_test;

테스트 결과

        * db001을 중지하면 app_test_insert.sh 스크립트가 실행되는 세션에서 다음과 같은 에러가 발생함

          하지만 에러 출력 이후에도 insert는 문제없이 계속 수행됨

 

        - Orchestrator Web Site의 Dashboard의 내용 확인

db002를 master로 변경된 클러스트 구조

 

3. 원래 상태로 복구(Failback)

    1) db001을 slave로 복구

        - db001 복구 방법

sudo docker start db001

sudo docker exec -it -uroot db001 bash

mysql -uroot -p

mysql> set global read_only=1;

mysql> CHANGE MASTER TO MASTER_HOST='db002', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1;

mysql> start slave;

db001 복구

    2) db001을 master로 복구

        - 사전 작업으로 Audit의 Recovery에서 모든 Acknowledge의 처리를 수행함

recovery 내 모든 acknowledge 처리

        - db002를 종료시키면 db001이 자동으로 master가 됨

        - 이후 db002에 접속해 slave 설정을 함

sudo docker stop db002

sudo docker start db002

sudo docker exec -it -uroot db002 bash

mysql -uroot -p

mysql> set global read_only=1;

mysql> CHANGE MASTER TO MASTER_HOST='db001', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1;

mysql> start slave;

db001이 master가 된 클러스트

 

댓글