> 데이터 베이스 > MySQL 튜토리얼 > Kubernetes용 MySQL Operator인 MOCO 시작하기 1부

Kubernetes용 MySQL Operator인 MOCO 시작하기 1부

DDD
풀어 주다: 2025-01-14 14:02:44
원래의
536명이 탐색했습니다.

Getting started on MOCO, the MySQL Operator for Kubernetes Part 1

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 클러스터를 프로비저닝합니다. 여기에는 다음이 포함됩니다.

  1. 원하는 구성을 지정하는 MySQLCluster 사용자 정의 리소스(CR) 정의
  2. 클러스터 노드에 대한 StatefulSet 및 영구 볼륨 클레임(PVC)을 생성하는 MOCO 컨트롤러.
  3. 고가용성을 위해 반동기 복제로 MySQL 인스턴스를 구성합니다.

배포 서비스

MOCO는 다음 서비스를 배포합니다.

  • 기본 서비스: 기본 노드로 트래픽을 전달합니다.
  • 복제 서비스: 읽기 쿼리를 복제본 노드로 라우팅합니다.
  • 백업 서비스: StatefulSet에 통합된 사이드카를 통해 백업을 관리합니다.

배포 유형

  • 복제본이 있는 단일 기본: 기본값입니다. 하나의 기본 및 여러 개의 복제본.
  • 다중 지역 클러스터: 지리적으로 분산된 복제용.

백업 및 복원

MOCO는 Amazon S3 호환 객체 스토리지에 저장된 정기적인 전체 및 증분 백업을 용이하게 합니다. 기능은 다음과 같습니다:

  • 객체 스토리지에 대한 예약된 백업.
  • Kubernetes API를 통한 주문형 백업
  • 복원을 위한 간단한 CR 업데이트
  • 강력한 재해 복구를 위한 PITR(특정 시점 복구)

객체 스토리지 버킷

버킷은 객체에 대한 S3 관리 단위입니다. MOCO는 지정된 버킷 내에 백업을 저장합니다. MOCO는 오래된 백업을 자동으로 제거하지 않습니다. 이를 위해서는 버킷 수명주기 관리를 구성해야 합니다.

자세한 내용은 제공된 링크에서 확인하실 수 있습니다.

문제가 있는 포드 처리

MOCO는 일관되지 않은 데이터(잘못된 포드)가 있는 MySQL 노드를 자동으로 감지하고 격리하여 복제 문제를 방지합니다. 필요한 경우 수동 제거도 가능합니다.

복제 관리

MOCO는 데이터 일관성을 위해 반동기식 복제를 활용하여 트랜잭션을 커밋하기 전에 기본 노드가 복제본에 변경 사항을 기록하도록 합니다. 장애 조치는 복제본을 기본으로 승격하여 자동화되어 중단을 최소화합니다. MOCO는 또한 복제 지연을 모니터링하여 동기화 및 성능을 유지합니다.

Stateful과 Stateless

MOCO 배포는 MySQL의 지속적인 스토리지 요구 사항으로 인해 본질적으로 상태를 저장합니다. Kubernetes StatefulSet는 다음을 보장합니다.

  • PVC를 통한 영구 저장.
  • MySQL 노드의 안정적인 네트워크 ID.
  • 확장 및 롤링 업데이트를 주문했습니다.

빠른 시작

두 가지 설치 방법을 사용할 수 있습니다.

원시 매니페스트 사용:

<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 클러스터에 대한 testfoo)는 네트워크 액세스를 허용합니다.

클러스터 상태 모니터링

클러스터 상태, 가용성 및 최근 이벤트를 모니터링하려면 kubectl get mysqlclusterkubectl 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿