orchestrator与Docker Compose集成:快速搭建测试环境
在数据库运维工作中,快速搭建可靠的测试环境是验证MySQL拓扑管理工具功能的关键步骤。本文将详细介绍如何通过Docker Compose集成orchestrator,在10分钟内完成高可用测试环境的部署,让你专注于功能验证而非环境配置。
环境准备与组件说明
orchestrator作为MySQL复制拓扑管理工具,其Docker化部署依赖两个核心组件:应用镜像和配置系统。项目提供了完整的Docker构建链,位于docker/目录下,包含多种场景的Dockerfile:
- 基础镜像:docker/Dockerfile采用多阶段构建,基于Alpine Linux构建轻量级运行环境,最终镜像仅包含运行时依赖
- 入口脚本:docker/entrypoint.sh实现配置文件自动生成,支持通过环境变量自定义关键参数
- 特殊场景镜像:包括Raft集群版(docker/Dockerfile.raft)、CI环境版(docker/Dockerfile.test)等6种预定义构建方案
手动编写Docker Compose配置
由于项目未提供官方Docker Compose文件,我们需要创建一个包含orchestrator和MySQL后端的docker-compose.yml文件:
version: '3.8'
services:
# 后端数据库 - 存储orchestrator元数据
mysql-backend:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: orchestrator
MYSQL_USER: orc_server_user
MYSQL_PASSWORD: orc_server_password
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uorc_server_user", "-porc_server_password"]
interval: 10s
timeout: 5s
retries: 5
# orchestrator服务 - 端口3000映射到主机
orchestrator:
build:
context: .
dockerfile: docker/Dockerfile
ports:
- "3000:3000"
environment:
# 拓扑发现账号 - 用于探测MySQL集群
ORC_TOPOLOGY_USER: orchestrator
ORC_TOPOLOGY_PASSWORD: orchestrator
# 后端数据库连接信息
ORC_DB_HOST: mysql-backend
ORC_DB_PORT: 3306
ORC_DB_NAME: orchestrator
ORC_USER: orc_server_user
ORC_PASSWORD: orc_server_password
depends_on:
mysql-backend:
condition: service_healthy
volumes:
mysql-data:
配置文件定义了两个服务:mysql-backend提供元数据存储,orchestrator运行核心服务。通过环境变量注入配置,避免手动编写JSON配置文件。
构建与启动流程
执行以下命令完成环境部署:
# 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/or/orchestrator.git
cd orchestrator
# 使用Docker Compose构建并启动服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 检查应用日志
docker-compose logs -f orchestrator
首次启动需要3-5分钟时间,主要包括:
- 构建orchestrator镜像(docker/Dockerfile第17-43行)
- 初始化MySQL后端数据库
- 生成默认配置文件(docker/entrypoint.sh第2-16行)
- 启动HTTP服务(监听3000端口)
服务正常启动后,访问http://localhost:3000即可打开orchestrator的Web界面,初始状态为空拓扑。
测试环境使用指南
添加测试MySQL集群
使用以下命令在Docker环境中快速部署一个测试用MySQL主从集群:
# 启动主库
docker run -d --name mysql-master -e MYSQL_ROOT_PASSWORD=test -p 3306:3306 mysql:8.0 \
--server-id=1 --log-bin=mysql-bin --gtid-mode=ON --enforce-gtid-consistency=ON
# 启动从库
docker run -d --name mysql-slave -e MYSQL_ROOT_PASSWORD=test -p 3307:3306 mysql:8.0 \
--server-id=2 --log-bin=mysql-bin --gtid-mode=ON --enforce-gtid-consistency=ON
# 在主库创建拓扑发现账号
docker exec mysql-master mysql -uroot -ptest -e \
"CREATE USER 'orchestrator'@'%' IDENTIFIED BY 'orchestrator'; \
GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'orchestrator'@'%';"
发现并管理拓扑
在orchestrator Web界面中执行以下操作:
- 点击顶部菜单Discover
- 输入主库地址
mysql-master:3306 - 点击Discover按钮开始自动拓扑探测
orchestrator将递归发现整个复制拓扑,并在几分钟内完成首次完整分析。成功后可在拓扑视图中看到类似下图的结构:
功能验证与常用操作
健康检查与故障模拟
通过Web界面的Problems菜单查看系统状态,或使用命令行客户端验证:
# 进入orchestrator容器
docker-compose exec orchestrator sh
# 使用内置客户端检查集群状态
orchestrator-client -c clusters
orchestrator-client -c topology -i mysql-master:3306
模拟主库故障测试自动发现功能:
# 停止主库容器
docker stop mysql-master
# 观察orchestrator问题检测(通常需要30-60秒)
docker-compose logs -f orchestrator | grep "Problem detected"
配置持久化与自定义
如需使用高级配置,可创建自定义配置文件并挂载到容器:
# docker-compose.yml中添加 volumes 配置
volumes:
- ./my-orchestrator.conf.json:/etc/orchestrator.conf.json
配置文件格式参考conf/orchestrator-sample.conf.json,关键配置项包括:
MySQLTopologyUser: 拓扑发现账号InstancePollSeconds: 实例探测间隔(默认5秒)RecoveryPollSeconds: 故障恢复检查间隔(默认2秒)RaftEnabled: 是否启用Raft集群(分布式部署时需要)
清理与环境重置
测试完成后,使用以下命令清理环境:
# 停止并删除容器、网络
docker-compose down
# 如需完全清理数据(包括数据库内容)
docker-compose down -v
# 重建镜像(当Dockerfile或代码变更时)
docker-compose build
进阶部署方案
对于需要高可用的测试环境,可扩展为Raft集群模式:
# 简化版Raft集群配置片段
services:
orchestrator-1:
build:
context: .
dockerfile: docker/Dockerfile.raft
environment:
RAFT_NODE_ID: 1
RAFT_HTTP_PORT: 3000
RAFT_PEERS: "orchestrator-1:10001,orchestrator-2:10002,orchestrator-3:10003"
orchestrator-2:
# 配置与节点1类似,修改端口和ID
...
orchestrator-3:
# 配置与节点1类似,修改端口和ID
...
完整Raft部署指南可参考官方文档docs/deployment-raft.md,该模式通过分布式共识算法实现orchestrator服务的高可用。
总结与注意事项
通过Docker Compose集成orchestrator的优势包括:
- 环境一致性:消除"在我机器上能运行"的问题
- 快速部署:从克隆仓库到可用环境仅需3个命令
- 隔离性:测试环境与生产环境完全分离
- 可重复性:随时重建全新环境,避免配置漂移
生产环境部署请参考docs/deployment.md,测试环境中需注意:
- 默认账号密码仅适用于测试,生产需使用强密码
- 资源限制:建议分配至少2GB内存给Docker环境
- 网络配置:确保容器间网络通畅,特别是MySQL复制端口
- 时间同步:容器时间需与主机同步,避免GTID相关问题
通过这种方式搭建的测试环境,可有效支持orchestrator功能验证、拓扑管理演练和故障恢复测试,为生产部署提供可靠验证基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






