openshift 部署主备mysql

一、概述

openshift容器平台提供MySQL的容器镜像,这个镜像提供基于配置文件的用户名、密码、数据库名称的数据库服务,当前openshift平台支持的mysql版本有:5.5\5.6\5.7。这些镜像有两种类型,一种是基于RHEL 7;一种是基于CentOS 7。
RHEL 7基础镜像下载方式:

$ docker pull registry.access.redhat.com/openshift3/mysql-55-rhel7
$ docker pull registry.access.redhat.com/rhscl/mysql-56-rhel7
$ docker pull registry.access.redhat.com/rhscl/mysql-57-rhel7

CentOS 7基础镜像下载方式:

$ docker pull openshift/mysql-55-centos7
$ docker pull openshift/mysql-56-centos7

二、配置和使用

初始化数据库:

$ oc new-app \
    -e MYSQL_USER= \
    -e MYSQL_PASSWORD= \
    -e MYSQL_DATABASE= \
    registry.access.redhat.com/openshift3/mysql-55-rhel7
mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOSTNAME $MYSQL_DATABASE

三、环境变量说明

变量 说明
MYSQL_USER 数据库登录用户名
MYSQL_PASSWORD 数据库登录密码
MYSQL_DATABASE 数据库名称
MYSQL_ROOT_PASSWORD root用户密码;如该不设置,远程登录会被拒绝,本地登录不需要密码
MYSQL_SERVICE_HOST Kubernetes自动创建的服务主机名
MYSQL_SERVICE_PORT Kubernetes自动创建的服务主机端口

四、Volume挂载点

/var/lib/mysql/data

上面的路径是mysql数据存储目录,可用于持久化存储设置的路径。

五、mysql 主备方案

openshift 提供经过验证的mysql主备方案,你可以从github获取方案的具体内容,该模板是供学习使用,不建议用在生产环境。
github地址为:https://github.com/sclorg/mysql-container/tree/master/5.5/examples/replica

下面我们一步一步创建一个主备mysql集群,首先导入openshift官网提供的mysql模板,命令如下:

oc create -f \
    https://raw.githubusercontent.com/openshift/mysql/master/5.5/examples/replica/mysql_replica.json

mysql 主备方案需要两个部署配置文件,一个是master的DC文件,一个是slave的DC文件。

  • 创建mysql主节点的DC文件

要设置mysql服务作为master节点运行,DC配置文件中的容器定义字段command必须设置为: run-mysqld-master。
MySQL主备方案需要指定一个用户用于同步主备数据库之间的数据,下面的环境变量定义就是为了达到此目的:

变量 描述 定义
MYSQL_MASTER_USER 用户名 master
MYSQL_MASTER_PASSWORD 密码 slave
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-55-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"

因为我们申请了PVC来持久化mysql数据,所以要联系管理员,申请好PVC。在dc创建后,mysql的master pod 启动后,将会用MYSQL_DATABASE创建数据库,配置服务副本slave
这个例子仅仅为mysql master server提供一个副本,master多副本还不支持,因此你不能增加这个dc的副本数量。
Slave Deployment Configuration:

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-55-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"

创建无头服务

你可能感兴趣的:(openshift)