1. 고가용성이란?
- 가용성 = Uptime / (uptime + downtime)
- 고가용성 = 바람직한 정도로 긴 시간 동안 지속적인 운영이 가능한 시스템 또는 컴포넌트
- 고가용성의 시스템을 구축한다는 건 = 서비스가 다운되는 타임을 최소화하는 시스템을 구축한다는 것
2. HA 수동 설정
[1] Orchestra를 Docker로 생성하기
- Orchestra는 MySQL용 복제 토폴로지 관리자로서, 고가용성 및 복제 관리 툴을 말한다.
- GUI/CLI/API를 통해서 상태를 확인하고 작업을 수행할 수 있다.
docker run -it --name orchestrator -h orchestrator \
--net mybridge --net-alias=orchestrator \
-p 3000:3000 -d openarkcode/orchestrator:latest
[2] 도커 컨테이너의 ip 주소 찾기
docker inspect --format '{{.NetworkSettings.Networks.mybridge.IPAddress}}' db001
[3] Master에서 Orchestrator에 접속할 수 있는 User 생성
create user orc_client_user@`172.%` identified by 'orc_client_password';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO orc_client_user@`172.%`;
[4] Orchestrator 접속
- https://{{호스트ip}}:3000/web/clusters 로 접속한다.
- clusters > discover 에 들어가서, 마스터 컨테이너명(db001) : 포트(3306) 를 입력한다.
- clusters > dashboard에 들어가면 master가 떠있고 master를 누르면 아래처럼 연결된 slave가 나타난다.
3. HA 테스트 진행하기
- read/write 모두 가능한 마스터인 db001가 갑자기 샷다운 된다고 하면
docker stop db001
- master는 리커버리가 필요한 상태가 되며 slave들은 master와 연결이 끊어짐에 따라 read가 불가능해진다.
- 이때, Recovory를 눌러 db002를 마스터로 직접 승격해주면 db002가 master가 되며 db003이 slave로 붙는걸 볼 수 있다.
- db001를 db002의 slave로 들어가도록 하려면 db001를 재실행한 후, read_only 상태로 변경, db001의 master를 db002로 설정해준다.
docker start db001
docker exec -it -uroot db001 /bin/bash
mysql -uroot -p
mysql> set global read_only=1;
Query OK, 0 rows affected (0.01 sec)
mysql> change master to master_host='db002', \
-> master_user='repl', master_password='repl', \
-> master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.31 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
4. HA 자동화(Auto Failover) 하기
[1] Orchestra의 orchestrator.conf.json 파일을 통해 설정 수정하기
[root@dev opc]# docker exec -it orchestrator /bin/bash
bash-4.4# cd /etc/
bash-4.4# vi orchestrator.conf.json
- 아래와 같이 모든 컨테이너에 대해서 Master로 회복이 가능하되, 컨테이너 호스트이름이 db003일 때는 Master로 승격이 되지 않도록 하면, db001/db002는 Master로 회복이 되지만 db003는 Master로 회복이 될 수 없다.
[AS-IS] | [TO-BE] |
"RecoverMasterClusterFilters": [ "_master_pattern_" ], ... "PromotionIgnoreHostnameFilters": [], |
"RecoverMasterClusterFilters": [ "*" ], ... "PromotionIgnoreHostnameFilters": ["db003"], |
[2] Orchestra를 재실행하여 설정을 초기화한다.
docker restart orchestrator
[3] HA 자동화 테스트 해보기
- 먼저, Audit > Recovery 에서 Failure 상태를 Acknowlege 해준다. (안해주면 정상적인 테스트가 되지 않는다)
- 아까와 마찬가지로 Master인 db002를 stop 시켜 샷다운 상태를 만든다.
- recovery를 누르지 않았으나 db001이 master로 승격된 후 db003이 slave로 붙은 걸 볼 수 있다.
[출처] 따라하며 배우는 MySQL on Docker
[참고]
https://velog.io/@makeitcloud/%EB%9E%80-Availability-High-Availability-%EB%9E%80
https://dkswnkk.tistory.com/727
https://jhdatabase.tistory.com/entry/MySQL-Orchestrator-%EA%B5%AC%EC%B6%95-part-1
'Infra > Docker' 카테고리의 다른 글
[Docker] Prometheus와 Grafana를 통해 실시간 로그 확인 (1) | 2024.01.09 |
---|---|
[Docker] Proxy Layer 구성하기 (2) | 2024.01.08 |
[Docker] 브리지를 통해 컨테이너 통신 (1) | 2024.01.08 |
[Docker] Master-Slave Replication 구성 (0) | 2023.12.31 |
[Docker] 호스트OS에 log, config 연결 (+my.cnf) (1) | 2023.12.29 |