후니의 IT인프라 사전

2주차 - 오퍼레이터 & MySQL 오퍼레이터 (설치 및 장애테스트) 본문

프로젝트&&스터디/DOIK 스터디

2주차 - 오퍼레이터 & MySQL 오퍼레이터 (설치 및 장애테스트)

james_janghun 2022. 6. 25. 10:35

1. Helm을 통해서 mysql 오퍼레이터를 설치

helm repo add mysql-operator https://mysql.github.io/mysql-operator/
helm repo update
helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace

 

2. MySQL 오퍼레이터 CRD  확인

kubectl get crd | grep mysql

kubectl get deploy,pod -n mysql-operator

3. MySQL InnoDB 클러스터 설치

helm install mycluster mysql-operator/mysql-innodbcluster \
    --set credentials.root.user='root' \
    --set credentials.root.password='sakila' \
    --set credentials.root.host='%' \
    --set serverInstances=3 \
    --set routerInstances=1 \
    --set tls.useSelfSigned=true

 

4. 클러스터 설치 확인

  헬륨을 통해서 설치하여 기본적인 모든 서비스, pv등이 같이 설치되었다.

 

5. MySQL 서버 접속확인

# sidecar 이용시
kubectl exec -it deploy/mysql-operator -- mysqlsh

# mysql-operator 이미지 이용시
kubectl run --rm -it myshell --image=mysql/mysql-operator -- mysqlsh

 

6. 클러스터 정보 확인

# 접속 주소 변수 지정
MIC=mycluster.mysql-cluster.svc.cluster.local
MDB1=mycluster-0.mycluster-instances.mysql-cluster.svc.cluster.local
MDB2=mycluster-1.mycluster-instances.mysql-cluster.svc.cluster.local
MDB3=mycluster-2.mycluster-instances.mysql-cluster.svc.cluster.local

# root사용자 접근
kubectl exec -it -n mysql-operator deploy/mysql-operator -- mysqlsh mysqlx://root@$MIC --password=sakila --s│
qlx

# SQL문으로 클러스터 정보확인
 SQL > SELECT MEMBER_HOST, MEMBER_ROLE FROM performance_schema.replication_group_members;

Primary가 2번 클러스터임을 확인할 수 있다.

 

 

7. 자료 주입

  myclient pod를 통해서 SQL 서버에 자료를 주입한다.

# client로 사용할 pod 생성
PODNAME=myclient1 envsubst < ~/DOIK/2/myclient.yaml | kubectl apply -f -

# myclient.yaml
apiVersion: v1     
kind: Pod          
  name: ${PODNAME} 
  labels:          
    app: myclient  
spec:              
  nodeName: k8s-m  
  containers:      
  - name: ${PODNAME}
    image: mysql:8.0.29
    command: ["tail"]  
    args: ["-f", "/dev/null"] 
  terminationGracePeriodSeconds: 0


# 간단한 test 데이터베이스 생성
CREATE DATABASE test;
USE test;
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
INSERT INTO t1 VALUES (1, 'Luis');
SELECT * FROM t1;


# 모니터링
watch -d "kubectl exec -it myclient1 -- mysql -h mycluster-0.mycluster-instances.mysql-cluster.svc -uroot -psakila -e 'USE test;SELECT * FROM t1 ORDER BY c1 DESC LIMIT 5;'"


# 자료 주입
for ((i=3; i<=100; i++)); do kubectl exec -it myclient1 -- mysql -h mycluster.mysql-cluster -uroot -psakila -e "SELECT @@HOSTNAME;USE test;INSERT INTO t1 VALUES ($i, 'Luis$i');";echo; done

 

8. 장애 테스트 (Primary Pod 삭제)

  현재 2번 Primary 서버를 삭제해보고, InnoDB 클러스터가 어떻게 MySQL을 도와주는지 확인해보자.

  2번을 삭제하니, 1번으로 Primary를 넘겨주고 자료를 계속 입력받게 된다.

 

 

 

이상으로 MySQL 오퍼레이터 실습을 마칩니다.

감사합니다.