3.2.6. MySQL 복제 사용
데이터베이스 이미지에 대한 클러스터링을 활성화하기 위한 구성은 예제로 제공되며 프로덕션용이 아닙니다.
Red Hat은 MySQL 마스터 슬레이브 복제(클러스터링)에 대한 개념 증명 템플릿을 제공합니다. GitHub에서 예제 템플릿 을 가져올 수 있습니다.
예제 템플릿을 현재 프로젝트의 템플릿 라이브러리에 업로드하려면 다음을 수행합니다.
$ oc create -f \ https://raw.githubusercontent.com/sclorg/mysql-container/master/examples/replica/mysql_replica.json
다음 섹션에서는 예제 템플릿에 정의된 개체를 자세히 설명하고 마스터 슬레이브 복제를 구현하는 MySQL 서버 클러스터를 시작하기 위해 함께 작동하는 방법을 설명합니다. MySQL에 권장되는 복제 전략입니다.
3.2.6.1. MySQL 마스터의 배포 구성 생성
MySQL 복제를 설정하기 위해 배포 구성 은 예제 템플릿에 정의되어 복제 컨트롤러를 정의합니다. MySQL 마스터-슬레이브 복제의 경우 두 개의 배포 구성이 필요합니다. 하나의 배포 구성은 MySQL 마스터 서버 및 MySQL 슬레이브 서버를 정의합니다.
MySQL 서버가 마스터 역할을 하도록 지시하려면 배포 구성의 컨테이너 정의의 command
필드가 run-mysqld-master 로 설정되어야 합니다. 이 스크립트는 MySQL 이미지의 대체 진입점 역할을 하며 복제에서 마스터로 실행되도록 MySQL 서버를 구성합니다.
MySQL 복제에는 마스터와 슬레이브 간에 데이터를 릴레이하는 특수 사용자가 필요합니다. 이 목적으로 템플릿에 다음 환경 변수가 정의됩니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 복제 사용자의 사용자 이름 | master |
| replication 사용자의 암호 | 생성됨 |
예 3.1. 예제 템플릿의 MySQL 마스터 배포 구성 오브젝트 정의
kind: "DeploymentConfig" apiVersion: "v1" metadata: name: "mysql-master" spec: strategy: type: "Recreate" triggers: - type: "ConfigChange" replicas: 1 selector: name: "mysql-master" template: metadata: labels: name: "mysql-master" spec: volumes: - name: "mysql-master-data" persistentVolumeClaim: claimName: "mysql-master" containers: - name: "server" image: "openshift/mysql-56-centos7" command: - "run-mysqld-master" ports: - containerPort: 3306 protocol: "TCP" env: - name: "MYSQL_MASTER_USER" value: "${MYSQL_MASTER_USER}" - name: "MYSQL_MASTER_PASSWORD" value: "${MYSQL_MASTER_PASSWORD}" - name: "MYSQL_USER" value: "${MYSQL_USER}" - name: "MYSQL_PASSWORD" value: "${MYSQL_PASSWORD}" - name: "MYSQL_DATABASE" value: "${MYSQL_DATABASE}" - name: "MYSQL_ROOT_PASSWORD" value: "${MYSQL_ROOT_PASSWORD}" volumeMounts: - name: "mysql-master-data" mountPath: "/var/lib/mysql/data" resources: {} terminationMessagePath: "/dev/termination-log" imagePullPolicy: "IfNotPresent" securityContext: capabilities: {} privileged: false restartPolicy: "Always" dnsPolicy: "ClusterFirst"
이 배포 구성에서 모든 데이터가 MySQL 마스터 서버에 대해 지속되도록 영구 볼륨을 요청했기 때문에 클러스터 관리자에게 스토리지를 클레임할 수 있는 영구 볼륨을 생성하도록 요청해야 합니다.
배포 구성이 생성되고 MySQL 마스터 서버를 사용하는 포드가 started되면 sysfs _DATABASE
에서 정의한 데이터베이스를 생성하고 이 데이터베이스를 슬레이브로 복제하도록 서버를 구성합니다.
제공된 예제에서는 MySQL 마스터 서버의 복제본을 하나만 정의합니다. 이로 인해 OpenShift Container Platform에서 서버 인스턴스가 하나만 시작됩니다. 다중 인스턴스(multi-master)는 지원되지 않으므로 이 복제 컨트롤러를 확장할 수 없습니다.
MySQL 마스터 에서 생성한 데이터베이스를 복제하기 위해 템플릿에 배포 구성이 정의됩니다. 이 배포 구성은 run-mysqld-slave 로 설정된 command
필드를 사용하여 MySQL 이미지를 시작하는 복제 컨트롤러를 생성합니다. 이 대체 진입점은 데이터베이스 초기화를 건너뛰고 예제 템플릿에도 정의되어 있는 mysql-master 서비스에 연결하도록 MySQL 서버를 구성합니다.
예 3.2. 예제 템플릿의 MySQL Slave 배포 구성 오브젝트 정의
kind: "DeploymentConfig" apiVersion: "v1" metadata: name: "mysql-slave" spec: strategy: type: "Recreate" triggers: - type: "ConfigChange" replicas: 1 selector: name: "mysql-slave" template: metadata: labels: name: "mysql-slave" spec: containers: - name: "server" image: "openshift/mysql-56-centos7" command: - "run-mysqld-slave" ports: - containerPort: 3306 protocol: "TCP" env: - name: "MYSQL_MASTER_USER" value: "${MYSQL_MASTER_USER}" - name: "MYSQL_MASTER_PASSWORD" value: "${MYSQL_MASTER_PASSWORD}" - name: "MYSQL_DATABASE" value: "${MYSQL_DATABASE}" resources: {} terminationMessagePath: "/dev/termination-log" imagePullPolicy: "IfNotPresent" securityContext: capabilities: {} privileged: false restartPolicy: "Always" dnsPolicy: "ClusterFirst"
이 예제 배포 구성은 초기 복제본 수가 1 로 설정된 복제 컨트롤러를 시작합니다. 이 복제 컨트롤러는 계정의 리소스 용량까지 두 방향 모두에서 확장 할 수 있습니다.