专业编程基础技术教程

网站首页 > 基础教程 正文

Docker搭建MySQL与Redis集群教程(docker mysql集群搭建)

ccvgpt 2025-05-10 20:08:32 基础教程 1 ℃

使用Dockerfile搭建MySQL主从集群和Redis集群

MySQL主从集群搭建

Docker搭建MySQL与Redis集群教程(docker 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

使用说明

  1. 将上述文件分别保存到对应目录
  2. 对于MySQL集群:

O 构建镜像: docker-compose -f mysql-compose.yml build

O 启动服务: docker-compose -f mysql-compose.yml up -d

  1. 对于Redis集群:

O 构建镜像: docker-compose -f redis-compose.yml build

O 启动服务: docker-compose -f redis-compose.yml up -d

O 然后执行集群创建命令

注意事项

  1. 生产环境中应该使用更复杂的密码
  2. MySQL主从配置可能需要根据实际日志位置调整
  3. Redis集群至少需要3个主节点和3个从节点才能正常工作
  4. 数据卷用于持久化数据,防止容器重启后数据丢失
  5. 网络配置确保容器间可以互相通信

以上配置提供了基本的Dockerfile和docker-compose配置,可以根据实际需求进行调整。

Tags:

最近发表
标签列表