MOCO(MySQL Operator for Kubernetes)는 Kubernetes 내에서 간소화된 MySQL 클러스터 관리를 위해 설계된 강력한 클라우드 기반 도구입니다. 프로비저닝, 확장, 백업, 유지 관리 등의 주요 작업을 자동화하여 고가용성과 신뢰성을 보장합니다. MOCO는 Kubernetes 리소스를 활용하여 MySQL 배포를 효율적으로 생성, 모니터링 및 관리합니다.
MOCO는 특정 MySQL 및 Kubernetes 버전을 지원합니다. 현재 MySQL 8.0.28, 8.0.37, 8.0.39, 8.0.40, 8.4.3 및 Kubernetes 1.29, 1.30, 1.31과 호환됩니다.
MOCO의 작동 원리
MOCO는 Kubernetes StatefulSet를 사용하여 MySQL 클러스터를 프로비저닝합니다. 여기에는 다음이 포함됩니다.
배포 서비스
MOCO는 다음 서비스를 배포합니다.
배포 유형
백업 및 복원
MOCO는 Amazon S3 호환 객체 스토리지에 저장된 정기적인 전체 및 증분 백업을 용이하게 합니다. 기능은 다음과 같습니다:
객체 스토리지 버킷
버킷은 객체에 대한 S3 관리 단위입니다. MOCO는 지정된 버킷 내에 백업을 저장합니다. MOCO는 오래된 백업을 자동으로 제거하지 않습니다. 이를 위해서는 버킷 수명주기 관리를 구성해야 합니다.
자세한 내용은 제공된 링크에서 확인하실 수 있습니다.
문제가 있는 포드 처리
MOCO는 일관되지 않은 데이터(잘못된 포드)가 있는 MySQL 노드를 자동으로 감지하고 격리하여 복제 문제를 방지합니다. 필요한 경우 수동 제거도 가능합니다.
복제 관리
MOCO는 데이터 일관성을 위해 반동기식 복제를 활용하여 트랜잭션을 커밋하기 전에 기본 노드가 복제본에 변경 사항을 기록하도록 합니다. 장애 조치는 복제본을 기본으로 승격하여 자동화되어 중단을 최소화합니다. MOCO는 또한 복제 지연을 모니터링하여 동기화 및 성능을 유지합니다.
Stateful과 Stateless
MOCO 배포는 MySQL의 지속적인 스토리지 요구 사항으로 인해 본질적으로 상태를 저장합니다. Kubernetes StatefulSet는 다음을 보장합니다.
빠른 시작
두 가지 설치 방법을 사용할 수 있습니다.
원시 매니페스트 사용:
<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml kubectl apply -f moco.yaml</code>
Helm 차트 사용:
<code class="language-bash">helm repo add moco https://cybozu-go.github.io/moco/ helm repo update helm install --create-namespace --namespace moco-system moco moco/moco</code>
매니페스트 사용자 정의는 config/
디렉터리(kustomize)를 통해 지원됩니다.
클러스터 생성
새 클러스터는 쓰기 가능한 인스턴스 하나를 기본 인스턴스로 지정합니다. 다른 모든 것은 읽기 전용 복제본입니다. 다음 YAML은 포드 반선호도 및 리소스 제한이 있는 3노드 클러스터를 생성합니다.
<code class="language-yaml">apiVersion: moco.cybozu.com/v1beta2 kind: MySQLCluster metadata: namespace: default name: test spec: replicas: 3 podTemplate: spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - mysql - key: app.kubernetes.io/instance operator: In values: - test topologyKey: "kubernetes.io/hostname" containers: - name: mysqld image: ghcr.io/cybozu-go/moco/mysql:8.4.3 resources: limits: cpu: "10" memory: "10Gi" volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi</code>
추가 예제 매니페스트는 예제 디렉터리에 있습니다.
클러스터 사용량
kubectl moco
플러그인(GitHub 릴리스에서 사용 가능)은 MOCO MySQL 인스턴스에 대한 외부 액세스를 제공합니다. 서비스(moco-test-primary.foo.svc
네임스페이스의 moco-test-replica.foo.svc
클러스터에 대한 test
및 foo
)는 네트워크 액세스를 허용합니다.
클러스터 상태 모니터링
클러스터 상태, 가용성 및 최근 이벤트를 모니터링하려면 kubectl get mysqlcluster
및 kubectl describe mysqlcluster
를 사용하세요.
로그 접속
kubectl logs
을 사용하여 mysqld 오류 및 느린 쿼리 로그에 액세스합니다.
전환 및 장애 조치
MOCO는 자동 전환 및 장애 조치를 처리하여 고가용성을 보장합니다. kubectl moco switchover CLUSTER_NAME
을 통해 수동 전환이 가능합니다.
잘못된 복제본 복구
kubectl delete
을 사용하여 잘못된 복제본의 PVC와 Pod를 제거합니다.
참고: https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814
위 내용은 Kubernetes용 MySQL Operator인 MOCO 시작하기 1부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!