网站首页 > 博客文章 正文
使用Dockerfile搭建MySQL主从集群和Redis集群
MySQL主从集群搭建
1. 创建MySQL主服务器Dockerfile
dockerfile
# MySQL主服务器Dockerfile
FROM mysql:8.0
# 设置root密码
ENV MYSQL_ROOT_PASSWORD=rootpassword
# 复制主服务器配置文件
COPY my-master.cnf /etc/mysql/conf.d/
# 复制初始化脚本
COPY init-master.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
my-master.cnf 配置文件内容:
ini
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
binlog_do_db = mydb
init-master.sql 初始化脚本:
sql
CREATE DATABASE IF NOT EXISTS mydb;
CREATE USER 'repl'@'%' IDENTIFIED BY 'replpassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
2. 创建MySQL从服务器Dockerfile
dockerfile
# MySQL从服务器Dockerfile
FROM mysql:8.0
# 设置root密码
ENV MYSQL_ROOT_PASSWORD=rootpassword
# 复制从服务器配置文件
COPY my-slave.cnf /etc/mysql/conf.d/
EXPOSE 3306
my-slave.cnf 配置文件内容:
ini
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
log_bin = mysql-bin
binlog_format = ROW
read_only = 1
3. 使用docker-compose编排MySQL集群
yaml
version: '3.8'
services:
mysql-master:
build:
context: .
dockerfile: Dockerfile.mysql-master
container_name: mysql-master
ports:
- "3306:3306"
volumes:
- mysql-master-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
networks:
- mysql-cluster
mysql-slave1:
build:
context: .
dockerfile: Dockerfile.mysql-slave
container_name: mysql-slave1
ports:
- "3307:3306"
volumes:
- mysql-slave1-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
depends_on:
- mysql-master
networks:
- mysql-cluster
volumes:
mysql-master-data:
mysql-slave1-data:
networks:
mysql-cluster:
driver: bridge
4. 配置主从复制
启动容器后,进入从服务器容器并执行:
bash
docker exec -it mysql-slave1 mysql -uroot -prootpassword
在MySQL从服务器中执行:
sql
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='replpassword',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
Redis集群搭建
1. 创建Redis节点Dockerfile
dockerfile
FROM redis:6.2
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
EXPOSE 6379
redis.conf 配置文件内容:
ini
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
2. 使用docker-compose编排Redis集群
yaml
version: '3.8'
services:
redis-node1:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node1
ports:
- "6379:6379"
volumes:
- redis-node1-data:/data
networks:
- redis-cluster
redis-node2:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node2
ports:
- "6380:6379"
volumes:
- redis-node2-data:/data
networks:
- redis-cluster
redis-node3:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node3
ports:
- "6381:6379"
volumes:
- redis-node3-data:/data
networks:
- redis-cluster
redis-node4:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node4
ports:
- "6382:6379"
volumes:
- redis-node4-data:/data
networks:
- redis-cluster
redis-node5:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node5
ports:
- "6383:6379"
volumes:
- redis-node5-data:/data
networks:
- redis-cluster
redis-node6:
build:
context: .
dockerfile: Dockerfile.redis
container_name: redis-node6
ports:
- "6384:6379"
volumes:
- redis-node6-data:/data
networks:
- redis-cluster
volumes:
redis-node1-data:
redis-node2-data:
redis-node3-data:
redis-node4-data:
redis-node5-data:
redis-node6-data:
networks:
redis-cluster:
driver: bridge
3. 创建Redis集群
启动容器后,执行以下命令创建集群:
bash
docker exec -it redis-node1 redis-cli --cluster create \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node1):6379 \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node2):6379 \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node3):6379 \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node4):6379 \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node5):6379 \
$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node6):6379 \
--cluster-replicas 1
使用说明
- 将上述文件分别保存到对应目录
- 对于MySQL集群:
O 构建镜像: docker-compose -f mysql-compose.yml build
O 启动服务: docker-compose -f mysql-compose.yml up -d
- 对于Redis集群:
O 构建镜像: docker-compose -f redis-compose.yml build
O 启动服务: docker-compose -f redis-compose.yml up -d
O 然后执行集群创建命令
注意事项
- 生产环境中应该使用更复杂的密码
- MySQL主从配置可能需要根据实际日志位置调整
- Redis集群至少需要3个主节点和3个从节点才能正常工作
- 数据卷用于持久化数据,防止容器重启后数据丢失
- 网络配置确保容器间可以互相通信
以上配置提供了基本的Dockerfile和docker-compose配置,可以根据实际需求进行调整。
- 上一篇: Docker新手福音!这个开源控制面板让你更快上手Docker
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-05-22 Docker新手福音!这个开源控制面板让你更快上手Docker
- 2025-05-22 数字管家登场:利用Docker快速部署你的HomeBox家庭库存系统
- 2025-05-22 docker-compose备份数据库,在crontab定时任务中不生效解决方法
- 2025-05-22 容器云生产实践第一步:ELK Stack
- 2025-05-22 docker-compose快速部署elasticsearch-8.x集群+kibana
- 2025-05-22 dify 1.40
- 2025-05-22 Windows 上 Docker 镜像与容器更新全攻略
- 2025-05-22 docker从入门到实战系列6-docker-compose容器编排
- 2025-05-22 Docker与Docker Compose部署微服务对比
- 2025-05-22 Docker Compose 中执行多条命令的方法
你 发表评论:
欢迎- 377℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 373℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 357℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 352℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 351℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 350℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)