在混合架构的服务器环境中同时部署MySQL集群一直是个头疼的问题。我们经常遇到这样的场景:开发团队需要在新采购的ARM架构服务器和原有X86服务器上部署完全一致的MySQL集群环境,传统方式需要在不同架构上分别编译安装,耗时耗力且容易出错。
这个方案通过Docker容器化技术完美解决了跨架构部署的难题。使用docker-compose编排工具,我们可以在ARM64和X86_64架构的服务器上,用完全相同的配置文件一键部署MySQL 8.0.43 InnoDB Cluster集群,实现读写分离和高可用。特别适合以下场景:
提示:MySQL InnoDB Cluster由三个核心组件组成 - MySQL Server、MySQL Router和MySQL Shell,通过Group Replication技术实现数据同步。
建议至少准备3台服务器(物理机或虚拟机),配置要求:
集群节点间需要开放的端口:
我们采用多容器部署方案,每个节点运行以下容器:
首先需要准备离线安装包:
下载官方MySQL 8.0.43 Docker镜像
bash复制docker pull mysql:8.0.43
docker save mysql:8.0.43 > mysql-8.0.43.tar
准备docker-compose文件
yaml复制version: '3.8'
services:
mysql:
image: mysql:8.0.43
container_name: mysql-node1
environment:
MYSQL_ROOT_PASSWORD: your_secure_password
MYSQL_ROOT_HOST: '%'
ports:
- "3306:3306"
- "33061:33061"
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
加载Docker镜像到所有节点:
bash复制docker load -i mysql-8.0.43.tar
在第一节点初始化集群:
bash复制docker exec -it mysql-node1 mysqlsh
\connect root@localhost:3306
dba.configureInstance('root@localhost:3306', {password: 'your_secure_password'})
cluster = dba.createCluster('myCluster')
添加其他节点:
bash复制cluster.addInstance('root@node2:3306', {password: 'your_secure_password'})
cluster.addInstance('root@node3:3306', {password: 'your_secure_password'})
在每个节点部署MySQL Router容器:
yaml复制mysql-router:
image: mysql/mysql-router:8.0
container_name: mysql-router
environment:
MYSQL_HOST: mysql-node1
MYSQL_PORT: 3306
MYSQL_USER: root
MYSQL_PASSWORD: your_secure_password
ports:
- "6446:6446"
- "6447:6447"
depends_on:
- mysql
编辑router配置文件:
ini复制[routing:read_write]
bind_address=0.0.0.0
bind_port=6446
destinations=metadata-cache://myCluster/default?role=PRIMARY
routing_strategy=first-available
[routing:read_only]
bind_address=0.0.0.0
bind_port=6447
destinations=metadata-cache://myCluster/default?role=SECONDARY
routing_strategy=round-robin
查看集群状态:
bash复制cluster.status()
手动故障转移:
bash复制cluster.setPrimaryInstance('node2:3306')
节点无法加入集群:
数据同步延迟:
sql复制SHOW SLAVE STATUS\G
SET GLOBAL slave_parallel_workers=4;
脑裂问题处理:
bash复制cluster.forceQuorumUsingPartitionOf('node1:3306')
InnoDB参数调整:
ini复制innodb_buffer_pool_size=4G
innodb_log_file_size=1G
innodb_flush_method=O_DIRECT
Group Replication优化:
ini复制group_replication_flow_control_mode=QUOTA
group_replication_member_expel_timeout=30
监控配置:
重要提示:在ARM架构上建议测试性能后调整thread_pool_size参数,通常需要比X86架构设置更小的值。
这个方案在实际生产环境中已经稳定运行超过6个月,支撑了日均百万级的查询请求。最大的优势是部署完成后,无论是ARM还是X86架构的服务器,都可以通过简单的docker-compose命令实现集群的快速扩展和迁移。