MySQL 배포¶
1. 개요¶
MySQL은 스웨덴 MySQL AB사에서 개발한 경량 관계형 데이터베이스 관리 시스템으로, 현재 Oracle사에 속해 있습니다. 현재 MySQL은 인터넷상의 중소규모 웹사이트에서 널리 사용되고 있습니다. 작은 용량, 빠른 속도, 낮은 총소유비용(TCO), 오픈소스, 무료라는 특징 덕분에 일반적으로 중소규모 웹사이트 개발에서는 Linux + MySQL을 웹사이트 데이터베이스로 선택합니다.
MySQL은 관계형 데이터베이스 관리 시스템입니다. MySQL은 연관 데이터베이스 관리 시스템으로, 연관 데이터베이스는 모든 데이터를 하나의 큰 저장소에 저장하는 대신 서로 다른 테이블에 데이터를 저장하여 속도를 높이고 유연성을 향상시킵니다.
2. 전제 조건¶
- Kubernetes 클러스터가 배포되어 있어야 합니다.
- OpenEBS 스토리지 플러그인 드라이버가 배포되어 있어야 합니다.
root@k8s-node01 /etc]# kubectl get pods -n kube-system|grep openebs
openebs-localpv-provisioner-6b56b5567c-k5r9l 1/1 Running 0 23h
openebs-ndm-jqxtr 1/1 Running 0 23h
openebs-ndm-operator-5df6ffc98-cplgp 1/1 Running 0 23h
openebs-ndm-qtjxm 1/1 Running 0 23h
openebs-ndm-vlcrv 1/1 Running 0 23h
3. 설치 준비¶
MySQL은 리소스를 많이 사용하므로 클러스터 리소스를 독점적으로 사용해야 하므로, 사전에 클러스터 스케줄링을 구성해야 합니다.
4. 클러스터 레이블 설정¶
명령어를 실행하여 클러스터에 레이블을 지정합니다.
# 클러스터 계획에 따라 MySQL 서비스를 배포할 k8s 노드에 레이블을 지정합니다 (단일 노드)
# xxx는 실제 클러스터에서 mysql 서비스를 배포할 노드를 나타냅니다.
kubectl label nodes xxx mysql=true
레이블 확인
5. 클러스터 테인트 설정¶
명령어를 실행하여 클러스터 테인트를 설정합니다.
팁
MySQL 서비스 전용 노드를 계획하지 않은 경우 노드에 테인트를 설정할 필요가 없으며, 이 단계는 생략할 수 있습니다.
6. StorageClass 구성¶
MySQL 전용 스토리지 클래스를 구성합니다.
# 다음 yaml 내용을 k8s 클러스터에 복사하여 yaml 형식으로 저장하고 실제 상황에 맞게 수정한 후 배포하십시오.
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data/mysql" # 이 경로는 실제 상황에 따라 수정할 수 있습니다. 스토리지 공간이 충분하고 경로가 존재하는지 확인하십시오.
name: openebs-mysql # 이름은 클러스터 내에서 고유해야 하며, 설치 전에 배포 파일 /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml 을 동기화하여 수정해야 합니다.
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
/data/mysql디렉터리의 디스크 용량이 충분한지 확인하십시오.
데이터 스토리지 공간 구성
# /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml 에 접속하여 필요에 따라 수정하십시오.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-data
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 10Gi # 실제 사용량에 따라 스토리지 크기 설정
storageClassName: openebs-mysql
7. 설치¶
# 기본 root 관리자 비밀번호는 "mQ2LZenlYs1UoVzi"입니다.
# 설치 전에 /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml 을 통해 수정할 수 있습니다.
# 네임스페이스 생성
kubectl create ns middleware
# mysql 서비스 배포
kubectl apply -f /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml -n middleware
8. 배포 및 구성 확인¶
8.1 컨테이너 상태 확인¶
[root@k8s-node01 /etc/kubeasz/guance/infrastructure/yaml]# kubectl get pods -n middleware |grep mysql
mysql-75499f6fcd-6tc7l 1/1 Running 0 4m36s
8.2 서비스 확인¶
MySQL 서비스 가용성 확인
# 기본 root 관리자 비밀번호는 "mQ2LZenlYs1UoVzi"입니다.
# 설치 전에 /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml 을 통해 수정할 수 있습니다.
[root@k8s-node01 /etc/kubeasz/guance/infrastructure/yaml]# kubectl exec -it -n middleware mysql-xxxxx -- mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| FT2.0 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)