网站首页 > 基础教程 正文
使用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配置,可以根据实际需求进行调整。
猜你喜欢
- 2025-05-10 「工具」三步搞定数据库MySQL卸载
- 2025-05-10 Mysql数据库入门到精通(mysql从入门到精通pdf)
- 2025-05-10 【深入浅出MySQL】「底层原理」InnoDB原理带你从入门到精通
- 2025-05-10 PHP MySQLi基础教程 MySQL 创建数据库
- 2025-05-10 在Windows环境下MySQL命令行备份还原数据库图文教程
- 2025-05-10 PHP和MySQL命令行初级教程(php mysqli)
- 2025-05-10 新手教程系列之《Mysql5.5 Windows10安装》
- 2025-05-10 面试官:MySQL索引底层数据结构原理与性能调优,你能回答多少?
- 2025-05-10 「Qt入门第22篇」 数据库(二)编译MySQL数据库驱动
- 2025-05-10 20《MySQL 教程》UNION 联合查询(mysql联合查询效率)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)