안녕하세요. 이 글은 mysql operator router설정을 살펴봅니다. mysql operator가 설치되어 있다는 전제로 내용을 소개합니다. mysql operator를 설치하지 않았더라면 이전글(https://malwareanalysis.tistory.com/341)을 참고해주세요.
1. router가 관리하는 mysql 인스턴스 목록
router가 관리하는 mysql인스턴스 목록은 메타데이터 캐시파일(state.json)파일에서 쉽게 확인할 수 있습니다. headless서비스를 이용하여 mysql pod목록을 관리합니다.
kubectl -n mysql-cluster exec -it deploy/mycluster-router -- cat /tmp/mysqlrouter/data/state.json
2. router 로드밸런싱 설정
router는 사용자 요청을 InnoDB 클러스터로 분산부하합니다. 쓰기요청(rw)과 읽기요청(ro)을 설정에 따라 mysql pod로 라라우팅합니다. 라우팅 정책은 메타데이터 캐시(/tmp/mysqlrouter)파일에서 쉽게 확인할 수 있습니다.
Innodb는 디폴트 설정으로 primary 인스턴스 한개와 secondary 인스턴스 2개로 구성되어 있습니다. 그리고 primary만 쓰기작업이 가능합니다.
kubectl -n mysql-cluster exec -it deploy/mycluster-router -- cat /tmp/mysqlrouter/mysqlrouter.conf
router입장에서 쓰기 작업인지 읽기작업인지 구별하는 방법은 포트번호로 구분합니다. 포트를 설정하지 않으면 first-available에 설정된 라우팅 설정을 따릅니다.
지금까지 router설정을 도식화 하면 아래 그림과 같습니다.
3. router 로드밸런싱 실습
client를 생성하기 위해 mysql-client pod를 생성합니다.
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: myclient
labels:
app: myclient
spec:
nodeName: k8s-m
containers:
- name: myclient
image: mysql:8.0.29
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
EOF
client pod에서 router을 이용하여 mysql pod에 접근해보겠습니다. rw, ro포트를 설정하지 않으면 first-available정책떄문에 rw라우팅 규칙이 적용됩니다. 결국, primary mysql pod로 접근합니다. 현재 primary msqyl pod가 1개이므로 부하분산이 되지 않습니다.
kubectl exec -it myclient -- mysql -h mycluster.mysql-cluster -uroot -psakila -e "select @@hostname, @@read_only, @@super_read_only";echo; done
client가 router에 요청할때 6447포트를 사용하면, secondary mysql 2개 중 1개로 부하분산됩니다.
for _ in $(seq 1 10);do kubectl exec -it myclient -- mysql -h mycluster.mysql-cluster --port=6447 -uroot -psakila -e "select @@hostname, @@read_only, @
@super_read_only"; done;
'연재 시리즈' 카테고리의 다른 글
쿠버네티스 오퍼레이터 스터디 3주차 - 메세지/이벤트 브로커란 (0) | 2022.06.06 |
---|---|
쿠버네티스 오퍼레이터 스터디 2주차 - mysql operator 장애테스트 (0) | 2022.06.05 |
쿠버네티스 오퍼레이터 스터디 2주차 - mysql operator설치 (0) | 2022.06.04 |
쿠버네티스 오퍼레이터 스터디 1주차 - Headless서비스 (0) | 2022.05.26 |
쿠버네티스 오퍼레이터 스터디 1주차 - 실습 (0) | 2022.05.24 |