搭建高可用的MySQL容器集群需要考虑数据持久化、故障转移、负载均衡等多个方面。以下是基于Docker和Kubernetes的两种主流解决方案:
version: '3.8'
services:
mysql-master:
image: mysql:8.0
container_name: mysql-master
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_REPLICATION_USER: replicator
MYSQL_REPLICATION_PASSWORD: replicator_password
volumes:
- ./master-data:/var/lib/mysql
- ./master-config:/etc/mysql/conf.d
ports:
- "3306:3306"
networks:
- mysql-net
command:
--server-id=1
--log-bin=mysql-bin
--binlog-format=ROW
--gtid-mode=ON
--enforce-gtid-consistency=ON
--log-slave-updates=ON
mysql-slave1:
image: mysql:8.0
container_name: mysql-slave1
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_REPLICATION_USER: replicator
MYSQL_REPLICATION_PASSWORD: replicator_password
volumes:
- ./slave1-data:/var/lib/mysql
- ./slave1-config:/etc/mysql/conf.d
ports:
- "3307:3306"
networks:
- mysql-net
command:
--server-id=2
--log-bin=mysql-bin
--binlog-format=ROW
--gtid-mode=ON
--enforce-gtid-consistency=ON
--log-slave-updates=ON
--read-only=1
depends_on:
- mysql-master
networks:
mysql-net:
driver: bridge
启动容器后,在从服务器上执行:
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='replicator',
MASTER_PASSWORD='replicator_password',
MASTER_AUTO_POSITION=1;
START SLAVE;
frontend mysql_frontend
bind *:3306
mode tcp
default_backend mysql_backend
backend mysql_backend
mode tcp
balance roundrobin
server mysql-master mysql-master:3306 check
server mysql-slave1 mysql-slave1:3306 check
推荐使用官方的MySQL Operator或开源的Presslabs MySQL Operator:
# 安装Presslabs MySQL Operator
kubectl apply -f https://raw.githubusercontent.com/bitpoke/mysql-operator/v0.6.0/deploy/deploy.yaml
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
name: my-cluster
spec:
replicas: 3
secretName: my-cluster-secret
volumeSpec:
persistentVolumeClaim:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
podSpec:
resources:
requests:
cpu: 500m
memory: 1Gi
kubectl create secret generic my-cluster-secret \
--from-literal=ROOT_PASSWORD=your-root-password
使用Orchestrator管理故障转移
配置ProxySQL中间件
定期备份策略
监控指标
日志收集
定期维护
以上方案可根据实际业务需求和资源情况进行调整和扩展。