当前位置:首页 > 技术分析 > 正文内容

Docker搭建MySQL与Redis集群教程

ruisui8819小时前技术分析2

使用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

使用说明

  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配置,可以根据实际需求进行调整。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4049.html

分享给朋友:

“Docker搭建MySQL与Redis集群教程” 的相关文章

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

掌握版本控制:Git的那些常见用法与技巧

Git作为现代开发中最常用的版本控制系统,它的普及和高效性使得程序员几乎每天都在与它打交道。无论是个人项目,还是团队协作,Git都能帮助我们追踪代码的修改历史,保证代码版本的管理井井有条,并在多人协作时有效地避免冲突。本文将分享一些常见的Git用法与技巧,帮助你更好地掌握Git的强大功能,并提升你在...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

虚幻引擎5.5发布

IT之家 11 月 13 日消息,虚幻引擎 5.5 现已发布。据介绍,新版本虚幻引擎在动画创作、虚拟制作和移动游戏开发方面取得进步;渲染、摄像机内视觉特效和开发人员迭代等领域的部分功能已可用于生产。IT之家整理部分功能亮点如下:动画Sequencer增强虚幻引擎的非线性动画编辑器 Sequencer...

js中数组filter方法的使用和实现

定义filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。语法var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg])参数callback循环数组每个元素时调用的回调函数。回调函...

22《Vue 入门教程》VueRouter 路由嵌套

1. 前言本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2. 配置嵌套路由实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层...