在 CentOS 上使用 Docker 搭建 MySQL 5.7 集群是一个复杂但很有用的过程。MySQL 5.7 集群通常指的是基于 MySQL 的高可用性配置,如 MySQL Group Replication 或 MySQL InnoDB Cluster。以下将详细介绍如何在 CentOS 上使用 Docker 搭建一个基本的 MySQL 5.7 集群,包括必要的步骤和配置。

一、环境准备

  1. 确保 Docker 和 Docker Compose 已安装

    在 CentOS 上安装 Docker 和 Docker Compose。如果尚未安装,请使用以下命令:

    sudo yum update -y
    sudo yum install -y docker
    sudo systemctl start docker
    sudo systemctl enable docker
    
    # 安装 Docker Compose
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
  2. 拉取 MySQL 5.7 镜像

    使用 Docker Hub 提供的官方 MySQL 镜像:

    docker pull mysql:5.7

二、配置 MySQL 集群

  1. 创建 Docker 网络

    为 MySQL 实例创建一个专用的 Docker 网络:

    docker network create mysql-cluster
  2. 创建 Docker Compose 配置文件

    创建一个 docker-compose.yml 文件,定义 MySQL 5.7 集群的服务配置。以下是一个包含三个 MySQL 实例的简单示例:

    version: '3.7'
    
    services:
     mysql1:
       image: mysql:5.7
       container_name: mysql1
       environment:
         MYSQL_ROOT_PASSWORD: rootpassword
         MYSQL_DATABASE: mydatabase
         MYSQL_USER: myuser
         MYSQL_PASSWORD: mypassword
       networks:
         - mysql-cluster
       volumes:
         - mysql1-data:/var/lib/mysql
       ports:
         - "3306:3306"
    
     mysql2:
       image: mysql:5.7
       container_name: mysql2
       environment:
         MYSQL_ROOT_PASSWORD: rootpassword
         MYSQL_DATABASE: mydatabase
         MYSQL_USER: myuser
         MYSQL_PASSWORD: mypassword
       networks:
         - mysql-cluster
       volumes:
         - mysql2-data:/var/lib/mysql
    
     mysql3:
       image: mysql:5.7
       container_name: mysql3
       environment:
         MYSQL_ROOT_PASSWORD: rootpassword
         MYSQL_DATABASE: mydatabase
         MYSQL_USER: myuser
         MYSQL_PASSWORD: mypassword
       networks:
         - mysql-cluster
       volumes:
         - mysql3-data:/var/lib/mysql
    
    networks:
     mysql-cluster:
       driver: bridge
    
    volumes:
     mysql1-data:
     mysql2-data:
     mysql3-data:

    这个配置文件定义了三个 MySQL 实例,每个实例都连接到 mysql-cluster 网络,并且使用持久化数据卷保存数据。

三、启动集群

  1. 启动 MySQL 集群

    使用 Docker Compose 启动 MySQL 集群:

    docker-compose up -d

    这将启动三个 MySQL 实例,并将它们连接到指定的网络。

  2. 初始化集群

    登录到任意一个 MySQL 实例,初始化 Group Replication 以形成集群:

    docker exec -it mysql1 mysql -u root -p

    在 MySQL 客户端中执行以下 SQL 命令:

    SET SQL_LOG_BIN=0;
    
    CREATE USER 'repl'@'%' IDENTIFIED BY 'replpassword';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    SET SQL_LOG_BIN=1;
    
    CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='replpassword' FOR CHANNEL 'group_replication_recovery';
    
    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;

    注意: 以上 SQL 命令是为了在一个 MySQL 实例上初始化集群。如果在其他 MySQL 实例上执行,需要做适当调整。

  3. 验证集群状态

    验证 MySQL 集群状态,以确保所有实例都正常运行并连接到集群中:

    SHOW STATUS LIKE 'group_replication%';

    你应该能看到 group_replication_primary_member 和其他相关状态。

四、配置客户端访问

  1. 配置客户端连接

    你可以通过 Docker Compose 配置文件中定义的端口(如 3306)来连接到 MySQL 集群。使用以下命令从本地机器连接到 MySQL 实例:

    mysql -h 127.0.0.1 -P 3306 -u myuser -p
  2. 配置负载均衡

    如果需要对 MySQL 集群进行负载均衡,可以使用 MySQL Proxy 或其他负载均衡工具。

五、监控和维护

  1. 监控 MySQL 集群

    使用 MySQL 自带的监控工具和第三方监控工具(如 Prometheus + Grafana)来监控集群的健康状态和性能指标。

  2. 定期备份

    定期备份 MySQL 数据,确保在发生故障时可以恢复。

六、总结

通过 Docker 和 Docker Compose 可以方便地在 CentOS 上搭建 MySQL 5.7 集群。以下是关键步骤的汇总:

步骤 说明
环境准备 确保安装了 Docker 和 Docker Compose,并拉取 MySQL 5.7 镜像。
配置 MySQL 集群 创建 Docker 网络和 Docker Compose 配置文件,定义 MySQL 实例。
启动集群 使用 Docker Compose 启动 MySQL 实例,并初始化集群。
配置客户端访问 配置 MySQL 客户端连接,并设置负载均衡。
监控和维护 使用监控工具监控集群状态,并定期备份数据。

以上是使用 Docker 在 CentOS 上搭建 MySQL 5.7 集群的完整步骤。通过这些步骤,可以创建一个高可用性的 MySQL 集群,满足生产环境的需求。