simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프링
  • 404
  • 자바프로그래밍
  • null
  • controllerTest
  • 참조타입
  • scanner #next() #nextLine()
  • JVM메모리구조
  • 자바
  • 참조변수
  • 컨트롤러
  • 자바프로그램
  • 자바메모리구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[Docker] Orchestra를 통해 High Availability(HA) 구축하기
Infra/Docker

[Docker] Orchestra를 통해 High Availability(HA) 구축하기

2024. 1. 8. 22:39

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
    'Infra/Docker' 카테고리의 다른 글
    • [Docker] Prometheus와 Grafana를 통해 실시간 로그 확인
    • [Docker] Proxy Layer 구성하기
    • [Docker] 브리지를 통해 컨테이너 통신
    • [Docker] Master-Slave Replication 구성
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바