云原生时代的Mycat2开发环境:Docker Compose全栈解决方案

在分布式数据库中间件领域,Mycat2以其轻量级和高性能的特点成为众多企业的选择。但传统部署方式往往需要手动配置服务器环境、处理依赖关系,这不仅耗时耗力,还会造成环境不一致的问题。本文将展示如何利用Docker Compose技术,在 三分钟内 搭建完整的Mycat2开发测试环境,实现真正的"一次配置,随处运行"。

1. 为什么选择容器化部署Mycat2

传统Mycat2部署需要经历下载安装包、配置Java环境、修改多个配置文件等繁琐步骤。而容器化方案带来三大革命性优势:

  • 环境隔离 :每个组件运行在独立容器中,避免端口冲突和依赖污染
  • 快速重置 :测试完成后可瞬间销毁整个环境,不留任何痕迹
  • 配置即代码 docker-compose.yml 文件可纳入版本控制,实现环境版本管理

以下是对比传统部署与容器化方案的关键指标:

维度 传统部署 Docker Compose方案
准备时间 30分钟以上 3分钟
环境一致性 依赖系统环境 完全一致
资源占用 需独占端口和进程 按需启停
迁移成本 需重新配置 复制文件即可

2. 环境搭建全流程

2.1 准备工作

确保系统已安装:

  • Docker 20.10+
  • Docker Compose 2.0+
  • 至少4GB可用内存

提示:Windows/macOS用户建议使用Docker Desktop,Linux用户可通过官方脚本安装

2.2 编写docker-compose.yml

创建项目目录并新建 docker-compose.yml 文件:

version: '3.8'

services:
  mysql-primary:
    image: mysql:8.0
    container_name: mysql_primary
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: mycat_test
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 10s
      retries: 5

  mycat2:
    image: mycatio/mycat2:1.21-release
    container_name: mycat2_server
    depends_on:
      mysql-primary:
        condition: service_healthy
    ports:
      - "8066:8066"
    volumes:
      - ./conf/prototypeDs.datasource.json:/usr/local/mycat/conf/datasources/prototypeDs.datasource.json
      - ./conf/users:/usr/local/mycat/conf/users
    restart: unless-stopped

volumes:
  mysql_data:

2.3 配置Mycat2核心文件

在项目目录下创建 conf 子目录,添加 prototypeDs.datasource.json

{
  "dbType": "mysql",
  "idleTimeout": 60000,
  "instanceType": "READ_WRITE",
  "maxCon": 1000,
  "name": "prototypeDs",
  "password": "root123",
  "type": "JDBC",
  "url": "jdbc:mysql://mysql-primary:3306/mycat_test?useUnicode=true&characterEncoding=UTF-8",
  "user": "root"
}

创建用户配置文件 conf/users/root.user.json

{
  "dialect":"mysql",
  "ip":null,
  "password":"mycat123",
  "transactionType":"proxy",
  "username":"root"
}

2.4 启动与验证

执行以下命令启动整个环境:

docker-compose up -d

检查服务状态:

docker-compose ps

查看Mycat2日志确认启动成功:

docker logs -f mycat2_server

3. 高级配置技巧

3.1 添加MySQL从库

扩展 docker-compose.yml ,添加从库服务:

mysql-replica:
  image: mysql:8.0
  container_name: mysql_replica
  environment:
    MYSQL_ROOT_PASSWORD: root123
    MYSQL_REPLICATION_USER: replicator
    MYSQL_REPLICATION_PASSWORD: replica123
  command: 
    --server-id=2
    --log-bin=mysql-bin
    --binlog-format=ROW
    --gtid-mode=ON
    --enforce-gtid-consistency=ON
    --log-slave-updates=ON
  depends_on:
    mysql-primary:
      condition: service_healthy

然后更新Mycat2配置实现读写分离。

3.2 数据持久化方案

为防止容器重启导致数据丢失,我们采用三种持久化策略:

  1. 数据库数据 :通过Docker卷持久化(已配置)
  2. Mycat2配置 :使用本地目录挂载
  3. 日志文件 :添加以下卷配置:
volumes:
  - ./logs:/usr/local/mycat/logs

3.3 性能调优参数

docker-compose.yml 中为Mycat2添加资源限制:

mycat2:
  deploy:
    resources:
      limits:
        cpus: '2'
        memory: 2G
      reservations:
        memory: 1G

4. 开发工作流集成

4.1 与IDE协同开发

在IntelliJ IDEA中配置Database工具连接Mycat2:

  • Host: localhost
  • Port: 8066
  • User: root
  • Password: mycat123

4.2 CI/CD管道示例

创建 .gitlab-ci.yml 实现自动化测试:

stages:
  - test

mycat_test:
  stage: test
  image: docker:20.10
  services:
    - docker:20.10-dind
  script:
    - docker-compose up -d
    - sleep 30 # 等待服务启动
    - apk add --no-cache mysql-client
    - mysql -h 127.0.0.1 -P 8066 -u root -pmycat123 -e "SHOW DATABASES;"

4.3 常见问题排查

连接超时问题

  1. 检查端口映射是否正确
  2. 验证MySQL容器健康状态
  3. 查看Mycat2日志中的错误信息

性能瓶颈分析

docker stats mycat2_server mysql_primary

配置热更新 : 修改配置文件后执行:

docker-compose restart mycat2

在实际项目中使用这套方案后,环境准备时间从原来的半天缩短到十分钟内。特别是在需要频繁重建环境的开发阶段,只需简单的 docker-compose down && docker-compose up -d 就能获得一个全新的测试环境。

更多推荐