백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.
1. 요구사항
- 그룹 복제에서 요구하는 사항을 만족해야 함
- MySQL 서버 5.7.17~
- MySQL 셸 1.0.8~
- MySQL 라우터 2.1.2~
- Performance 스키마 활성화
- MySQL 셸 사용을 위한 파이썬 2.7 버전 이상 사용
2. InnoDB 클러스터 생성
1. 사전 준비
primary/js> dba.configureInstance("root@localhost:3306")
- mysql-shell에서 InnoDB 클러스터 설정
- 적용을 위해 restart 필수
2. 클러스터 생성
primary/js> var cluster = dba.createCluster("testCluster")
- 클러스터에 대한 정보를 저장할 메타데이터 데이터베이스 생성 및 메타데이터 설정
- 그룹 복제 설정 및 시작
- 그룹 복제 분산 복구에서 사용될 DB 계정 생성
- 기본적으로 싱글 프라이머리 모드로 생성됨
3. 클러스터 인스턴스 추가
primary/js> cluster.addInstance("secondary1:3306");
primary/js> cluster.addInstance("secondary2:3306");
- 바로 추가가 가능한지 혹은 클러스터에 있는 기존 서버와 데이터 동기화가 필요한지 판단.
- 현재 클러스터에 존재하는 서버와 추가될 서버의 상태를 비교해서
- 데이터 동기화가 필요한 경우 분산 복구 수행.
- 기본 분산복구 방식은 원격 클론 방식.
- 선택 가능
- 반드시 프라이머리 서버에서 추가해야 하는 것은 아님
4. MySQL 라우터 설정
mysqlrouter --bootstrap [user]@[node_ip]:3306 --name router \
--dictionary [mysqlrouter 관련 디렉토리 경로] \
--account [라우터에서 InnoDB 클러스터에 접속할 때 사용할 DB 계정] \
--user [라우터를 실행할 시스템 사용자 계정]
myrouter/mysqlrouter.conf
[metadata_cache]
[metadata_cache:bootstrap]
cluster_type=gr
router_id=1
user=mysql_router1_76fpjb99tsq4
metadata_cluster=testCluster
ttl=0.5
auth_cache_ttl=-1
auth_cache_refresh_interval=2
use_gr_notifications=0
- ttl
- 라우터가 내부적으로 캐싱하고 있는 클러스터 메타데이터를 갱신하는 주기 (초)
- user_gr_notifications
- 그룹 복제에서 발생하는 변경사항에 대해 라우터가 알림을 받을 수 있음
- 그룹 복제에서 정족수 손실이 발생한 경우
- 그룹 멤버 구성에 변경이 발생한 경우
- 그룹 멤버의 역할이 변경된 경우
- 그룹 멤버의 상태가 변경된 경우
- 각 클러스터 인스턴스에 X 프로토콜로 연결되어 있어야 함
- 그룹 복제에서 발생하는 변경사항에 대해 라우터가 알림을 받을 수 있음
[routing]
[routing:bootstrap_rw]
bind_address=0.0.0.0
bind_port=6446
destinations=metadata-cache://testCluster/?role=PRIMARY
routing_strategy=first-available
protocol=classic
[routing:bootstrap_ro]
bind_address=0.0.0.0
bind_port=6447
destinations=metadata-cache://testCluster/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=classic
[routing:bootstrap_x_rw]
bind_address=0.0.0.0
bind_port=6448
destinations=metadata-cache://testCluster/?role=PRIMARY
routing_strategy=first-available
protocol=x
[routing:bootstrap_x_ro]
bind_address=0.0.0.0
bind_port=6449
destinations=metadata-cache://testCluster/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=x
- destionations
- 라우터에서 쿼리 요청을 전달할 대상 MySQL 서버를 지정하는 옵션
- role: 어떤 타입의 MySQL 서버로 연결할 것인지 설정할 옵션
- PRIMARY, SECONDARY, PRIMARY_AND_SECONDARY
- disconnect_on_prompted_to_primary: 세컨더리 서버가 프라이머리로 승격됬을 때 해당 서버에 대한 기존 클라이언트 연결을 어떻게 처리할 것인지
- disconnect_on_metadata_unavailable: 과부하로 인해 라우터에서 클러스터의 메타데이터 갱신이 불가할 때 클러스터에 대한 기존 클라이언트 연결을 모두 종료할 것인지 여부를 처리함
- routing_strategy: 라우터가 어떤 서버에 연결해서 쿼리요청을 전달할 것인지 대상 서버를 선택하는 전략
- round-robin
- round-robin-with-fallback: 세컨더리 서버들에 대해 라운드 로빈으로 선정함
- first-available: 연결 대상 서버 목록에서 사용가능한 첫번째 서버를 선택
- next-available: first-available과 동일. 만약 연결 시 오류가 발생하면, 연결 불가로 표시하고 연결 대상에서 제외함
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 7-1. 데이터 암호화: MySQL 서버 (1) | 2025.03.09 |
---|---|
[Real MySQL] 6. 데이터 압축 (1) | 2025.03.08 |
[Real MySQL] 17-3. InnoDB 클러스터: MySQL (0) | 2024.09.07 |
[Real MySQL] 17-2. InnoDB 클러스터: 그룹 복제 (0) | 2024.09.07 |
[Real MySQL] 17-1. InnoDB 클러스터: 아키텍처 (0) | 2024.09.07 |