博客
关于我
Docker——docker构建Mysq5.7集群环境
阅读量:797 次
发布时间:2023-03-28

本文共 6626 字,大约阅读时间需要 22 分钟。

Docker 构建 MySQL 高可用环境

1. Docker 构建主从环境

在生产环境中构建 MySQL 主从架构是一种常见的高可用解决方案。本文将使用 Docker 的方式快速构建 MySQL 主从环境。

1.1 环境配置准备

  • 安装 Docker(版本 2.0 或 3.0)。
  • 下载 MySQL 5.7 镜像:docker pull mysql:5.7
  • 配置 Docker Compose:创建 docker-compose.yml 文件。
  • 配置相关 MySQL 文件目录结构:
  • mysql/
    ├── docker-compose.yml
    ├── master/
    │ ├── Dockerfile
    │ └── my.cnf
    ├── slave/
    │ ├── Dockerfile
    │ └── my.cnf

    1.2 MySQL 主从配置文件

    Master Configuration (master/my.cnf)

    [mysqld]
    server_id = 101
    log-bin = mysql-bin
    binlog_ignore_db = mysql
    binlog_cache_size = 1M
    expire_logs_days = 7
    binlog_format = mixed
    log_slave_updates = 1
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci

    Slave Configuration (slave/my.cnf)

    [mysqld]
    server_id = 102
    log-bin = mysql-bin
    relay_log = replicas-mysql-relay-bin
    log_slave_updates = 1
    binlog_format = mixed
    read_only = 1
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci

    Dockerfile (master/Dockerfile)

    FROM mysql:5.7
    MAINTAINER zhuangxiaoyan
    ADD ./master/my.cnf /etc/mysql/my.cnf

    Dockerfile (slave/Dockerfile)

    FROM mysql:5.7
    MAINTAINER zhuangxiaoyan
    ADD ./slave/my.cnf /etc/mysql/my.cnf

    Docker Compose Configuration (docker-compose.yml)

    version: '3'
    services:
    mysql-master:
    build: .
    dockerfile: master/Dockerfile
    container_name: mysql-master
    ports:
    - "3306:3306"
    volumes:
    - mysql-master-vol:/var/lib/mysql
    environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: rule_platform
    MYSQL_USER: ruler
    MYSQL_PASSWORD: root
    restart: unless-stopped
    networks:
    - mysql-ms-network
    mysql-slave:
    build: .
    dockerfile: slave/Dockerfile
    container_name: mysql-slave
    ports:
    - "3307:3306"
    volumes:
    - mysql-slave-vol:/var/lib/mysql
    environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: rule_platform
    MYSQL_USER: ruler
    MYSQL_PASSWORD: root
    restart: unless-stopped
    networks:
    - mysql-ms-network
    networks:
    mysql-ms-network:
    driver: bridge
    ipam:
    config:
    - subnet: "172.25.0.0/24"

    1.3 构建镜像并启动容器

    # 在 docker-compose.yml 所在目录下执行
    docker-compose up -d
    # 查看构建状态
    docker-compose ps

    1.4 进入容器设置主从配置

    # 配置主节点
    docker-compose exec mysql-master bash
    mysql -uroot -p -e "grant replication slave on *.* to 'root'@'172.25.0.102' identified by 'root'; flush privileges;"
    mysql -uroot -p -e "show master status;"
    # 配置从节点
    docker-compose exec mysql-slave bash
    mysql -uroot -p -e "reset slave;"
    mysql -uroot -p -e "CHANGE MASTER TO MASTER_HOST='172.25.0.101', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=600; start slave;"
    mysql -uroot -p -e "show slave status;"

    2. Docker 构建一主多从环境

    2.1 环境配置准备

    配置与主从环境类似,同样需要 Docker、Docker Compose 和相关 MySQL 配置文件。

    2.2 MySQL 一主多从配置文件

    Master Configuration (master/my.cnf)

    [mysqld]
    server_id = 1
    gtid-mode = ON
    enforce-gtid-consistency = 1
    binlog_ignore_db = mysql
    log-bin = mysql-bin
    binlog_cache_size = 1M
    binlog_format = mixed
    expire_logs_days = 7
    slave_skip_errors = 1062
    log_slave_updates = ON
    read_only = 1

    Slave Configuration (slave/my.cnf)

    [mysqld]
    server_id = 2
    gtid-mode = ON
    enforce-gtid-consistency = 1
    binlog_ignore_db = mysql
    log-bin = mysql-slave1-bin
    binlog_cache_size = 1M
    binlog_format = mixed
    expire_logs_days = 7
    slave_skip_errors = 1062
    relay_log = mysql-relay-bin
    log_slave_updates = ON
    read_only = 1

    Docker Compose Configuration (docker-compose.yml)

    version: '3'
    services:
    mysql-master:
    build: .
    dockerfile: master/Dockerfile
    container_name: mysql-master
    ports:
    - "33060:3306"
    volumes:
    - ./mysql/master/etc:/etc/mysql
    - ./mysql/master/var/lib:/var/lib/mysql
    - ./mysql/master/my.cnf:/etc/my.cnf
    environment:
    TZ=Asia/Shanghai
    MYSQL_ROOT_PASSWORD=123456
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    mysql-slave-1:
    build: .
    dockerfile: slave/Dockerfile
    container_name: mysql-slave-1
    ports:
    - "33070:3306"
    volumes:
    - ./mysql/slave1/etc:/etc/mysql
    - ./mysql/slave1/var/lib:/var/lib/mysql
    - ./mysql/slave1/my.cnf:/etc/my.cnf
    environment:
    TZ=Asia/Shanghai
    MYSQL_ROOT_PASSWORD=123456
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    mysql-slave-2:
    build: .
    dockerfile: slave/Dockerfile
    container_name: mysql-slave-2
    ports:
    - "33080:3306"
    volumes:
    - ./mysql/slave2/etc:/etc/mysql
    - ./mysql/slave2/var/lib:/var/lib/mysql
    - ./mysql/slave2/my.cnf:/etc/my.cnf
    environment:
    TZ=Asia/Shanghai
    MYSQL_ROOT_PASSWORD=123456
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    networks:
    srm-mysql:
    driver: bridge
    ipam:
    config:
    - subnet: "173.200.6.0/24"

    2.3 配置复制账号和从节点

    # 配置主节点
    docker exec -it mysql-master bash
    mysql -uroot -p -e "create user 'repl'@'%' identified by 'repl'; grant replication client, replication slave on *.* to 'repl'@'%';"
    # 配置从节点
    docker exec -it mysql-slave-1 bash
    mysql -uroot -p -e "reset master;"
    mysql -uroot -p -e "CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_PORT=3306, MASTER_AUTO_POSITION=1; start slave;"

    3. Docker 构建高可用环境

    3.1 环境配置

    version: "2"
    services:
    mha_share:
    image: debian:jessie
    volumes:
    - "./employees_share/:/mha_share/"
    mha_node:
    build: ./mha_node
    image: prontera/mha_node
    read_only: true
    mha_manager:
    build: ./mha_manager
    image: prontera/mha_manager
    read_only: true
    master:
    image: prontera/mha_node
    depends_on:
    - mha_node
    ports:
    - "3406:3306"
    volumes:
    - "./employees_db/:/docker-entrypoint-initdb.d/:ro"
    - "./employees_master/lib/:/var/lib/mysql/"
    - "./employees_master/log/:/var/log/mysql/"
    - "./employees_master/conf.d/:/etc/mysql/mysql.conf.d/"
    volumes_from:
    - mha_share
    env_file:
    - ./account.env
    environment:
    MYSQL_USER=prontera
    MYSQL_PASSWORD=123123
    slave_1:
    image: prontera/mha_node
    depends_on:
    - master
    ports:
    - "3407:3306"
    volumes:
    - "./employees_slave_1/lib/:/var/lib/mysql/"
    - "./employees_slave_1/log/:/var/log/mysql/"
    - "./employees_slave_1/conf.d/:/etc/mysql/mysql.conf.d/"
    volumes_from:
    - mha_share
    env_file:
    - ./account.env
    manager:
    image: prontera/mha_manager
    depends_on:
    - mha_manager
    - slave_1
    volumes_from:
    - mha_share
    entrypoint: tailf /dev/null
    env_file:
    - ./account.env

    转载地址:http://iohfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现字符串查找子串(附完整源码)
    查看>>
    Objective-C实现完整的ComplexNumber复数类(附完整源码)
    查看>>
    Objective-C实现实现rabin karp算法(附完整源码)
    查看>>
    Objective-C实现对图像进行色调处理算法(附完整源码)
    查看>>
    Objective-C实现对称矩阵压缩存储(附完整源码)
    查看>>
    Objective-C实现寻找欧拉路径/回路(附完整源码)
    查看>>
    Objective-C实现导弹跟踪算法(附完整源码)
    查看>>
    Objective-C实现将 base64 字符串转换为字节数组算法(附完整源码)
    查看>>
    Objective-C实现将位转换为浮点数bitsToFloat算法(附完整源码)
    查看>>
    Objective-C实现将列表向右旋转 k 个位置算法(附完整源码)
    查看>>
    Objective-C实现将字符串中大写字母转换为小写字母(附完整源码)
    查看>>
    Objective-C实现将字符串从一个基转换为另一个基算法(附完整源码)
    查看>>
    Objective-C实现将字节数组转换为 base64 编码算法(附完整源码)
    查看>>
    Objective-C实现将彩色图像转换为负片算法(附完整源码)
    查看>>
    Objective-C实现将无符号整数n变成成d进制表示的字符串s(附完整源码)
    查看>>
    Objective-C实现将给定的 utf-8 字符串编码为 base-16算法(附完整源码)
    查看>>
    Objective-C实现将给定的字符串编码为 base32算法(附完整源码)
    查看>>
    Objective-C实现小根堆(附完整源码)
    查看>>
    Objective-C实现局域网双向通信(附完整源码)
    查看>>
    Objective-C实现局部最大值点数算法(附完整源码)
    查看>>