3.2.6. 使用 MySQL Replication


注意

作为示例提供了为数据库镜像启用集群的配置,它们不适用于生产环境。

红帽提供了一个 MySQL master-slave 复制(集群)概念验证 模板; 您可以 从 GitHub 获取示例模板

将示例模板上传到当前项目的模板库中:

$ oc create -f \
    https://raw.githubusercontent.com/sclorg/mysql-container/master/examples/replica/mysql_replica.json

以下小节详细介绍了示例模板中定义的对象,并描述了它们如何一起启动实施 master-slave 复制的 MySQL 服务器集群。这是推荐的 MySQL 复制策略。

3.2.6.1. 为 MySQL Master 创建部署配置

要设置 MySQL 复制,在定义 复制控制器 的示例模板中定义一个部署配置。对于 MySQL master-slave 复制,需要两个部署配置。一个部署配置定义 MySQL master 服务器,再定义 MySQL 的 服务器。

要让 MySQL 服务器充当 master,必须将部署配置中容器定义中的 command 字段设置为 run-mysqld-master。这个脚本作为 MySQL 镜像的替代入口点,并将 MySQL 服务器配置为复制时作为主服务器运行。

MySQL 复制需要一个特殊的用户来转发主服务器和辅服务器之间的数据。模板中为此定义了以下环境变量:

变量名称描述默认

MYSQL_MASTER_USER

复制用户的用户名

master

MYSQL_MASTER_PASSWORD

复制用户的密码

generated

例 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 master 服务器保留所有数据,所以必须请集群管理员创建一个可以声明存储的持久性卷。

创建部署配置以及启动 MySQL master 服务器的 pod 后,它会创建 MYSQL_DATABASE 定义的数据库,并将服务器配置为将这个数据库复制到辅服务器。

这个示例只定义 MySQL 主服务器的一个副本。这会导致 OpenShift Container Platform 只启动一个服务器实例。不支持多个实例(multi-master),因此您无法扩展此复制控制器。

要复制由 MySQL master 创建的数据库,模板中定义了一个部署配置。这个部署配置会创建一个复制控制器,它会使用将 command 字段设置为 run-mysqld-slave 来启动 MySQL 镜像。这个替代的入口点跳过数据库初始化并将 MySQL 服务器配置为连接到 mysql-master 服务,在示例模板中也定义了这个服务。

例 3.2. 示例模板中的 MySQL 辅助部署配置对象定义

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。您可以双向扩展此复制控制器,受帐户的资源容量的限制。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.