Docker搭建Redis主从复制的实现步骤

 更新时间:2023年11月01日 10:17:05   作者:kerwin_code  
本文主要介绍了Docker搭建Redis主从复制的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

本文介绍如何快速使用Docker搭建Redis主从复制环境,线上环境更加推荐直接部署,这里会搭建一主两从,全部搭建在一台主机,会使用Redis6.0版本,分别使用端口号 主节点(6379)、从节点(6380、6381)。

Redis主从复制作用和优缺点

  • 作用
    • 主从复制是Redis集群中最简单的一种高可用方案,配置也简单,从节点同步主节点数据,一般主节点对外提供读写,从节点只对外提供读,也就是常说的读写分离,一般业务读操作占整个Redis请求的90%以上,读写分离架构可以有多个从节点,从节点分担主节点的读操作压力,提升整体并发量。
  • 优点
    • 配置简单
    • 显著提升整体并发量
    • 能做到数据备份的效果,避免主节点因意外情况损坏缓存全部丢失
  • 缺点
    • 主节点宕机会导致整个集群无法写,需要重新启动主节点或者手动重新指定一台主节点,针对这点Redis还提供了哨兵模式和Cluster可以解决这个问题

主从复制结构图:

二、拉取Redis镜像

docker pull redis:6.0.20

三、创建挂载目录和添加配置文件

3.1、主节点(6379)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6379/conf
mkdir -p /home/docker/redis6379/data 
  • 添加配置文件
vi /home/docker/redis6379/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6379
port 6379
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456

3.2、从节点(6380)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6380/conf
mkdir -p /home/docker/redis6380/data 
  • 添加配置文件
vi /home/docker/redis6380/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6379
port 6380
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6379
## redis5.0之前配置,新版本Redis也还可以用,我部署时确定6.0版本还是可用的
# slaveof 172.16.8.186 6379

3.3、从节点(6381)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6381/conf
mkdir -p /home/docker/redis6381/data 
  • 添加配置文件
vi /home/docker/redis6381/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6379
port 6381
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6379
## redis5.0之前配置,新版本Redis也还可以用,我部署时确定6.0版本还是可用的
# slaveof 172.16.8.186 6379

四、启动Redis容器

4.1、主节点(6379)

docker run -d \
-p 6379:6379 \
--name redis6379 \
--restart always \
--privileged=true \
-v /home/docker/redis6379/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6379/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.2、从节点(6380)

docker run -d \
-p 6380:6380 \
--name redis6380 \
--restart always \
--privileged=true \
-v /home/docker/redis6380/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6380/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.3、从节点(6381)

docker run -d \
-p 6381:6381 \
--name redis6381 \
--restart always \
--privileged=true \
-v /home/docker/redis6381/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6381/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.4、启动命令参数介绍

-d:后台运行
-p 63xx:63xx:指定宿主机端口与容器端口映射关系
–name redis63xx:创建的容器名称
–restart=always:容器开机自启
–privileged=true:获取宿主机root权限
-v /home/docker/redis63xx/conf/redis.conf:/etc/redis/redis.conf:映射配置文件目录,宿主机:容器
-v /home/docker/redis63xx/data:/data:映射数据目录,宿主机:容器
redis:6.0.20:使用的镜像
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

五、查看各节点主从信息

5.1、主节点(6379)

  • 连接主节点redis
# redis6379:容器名称、 redis-cli:redis自带客户端命令、 -a 123456:指定redis密码登录
docker exec -it redis6379 redis-cli -a 123456
  • 查看节点replication信息
127.0.0.1:6379> info replication

5.2、从节点(6380)

  • 连接主节点redis
# redis6380:容器名称、 redis-cli:redis自带客户端命令、-p 6380:指定redis端口、 -a 123456:指定redis密码登录
docker exec -it redis6380 redis-cli -p 6380 -a 123456
  • 查看节点replication信息
127.0.0.1:6380> info replication

5.3、从节点(6381)

  • 连接主节点redis
# redis6381:容器名称、 redis-cli:redis自带客户端命令、-p 6381:指定redis端口、 -a 123456:指定redis密码登录
docker exec -it redis6381 redis-cli -p 6381 -a 123456
  • 查看节点replication信息
127.0.0.1:6381> info replication

六、测试主从复制效果

  • 主节点插入数据
127.0.0.1:6379> set names kerwin

从节点查看数据

127.0.0.1:6380> get names

127.0.0.1:6381> get names

从节点写数据测试

127.0.0.1:6380> set names kerwin2

从节点默认只读,无法写入数据

七、Redis主从工作原理

如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。

master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

八、主从复制风暴问题解决

主从复制风暴问题是因为多个从节点同时复制主节点导致主节点压力过大,可以让新节点复制从节点数据,类似数结构,可以分担主节点同步压力。

实际操作只需要将主从复制的配置调整成从节点即可。

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6381

到此这篇关于Docker搭建Redis主从复制的实现步骤的文章就介绍到这了,更多相关Docker搭建Redis主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 使用Docker搭建Maven私服的流程步骤

    使用Docker搭建Maven私服的流程步骤

    文章主要介绍了如何部署Nexus容器,包括后台运行、配置管理员密码、配置阿里云代理仓库以及Maven配置等内容,帮助用户更方便地使用Nexus仓库,需要的朋友可以参考下
    2026-04-04
  • docker容器分配固定ip的实现示例

    docker容器分配固定ip的实现示例

    如果不固定ip,每次主机重启后,docker会动态给容器分配ip,导致redis容器的IP自动换了 ,然后还得去改配置就很烦,本文主要介绍了docker容器分配固定ip的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 清理docker占用磁盘过大问题终极方案(亲测有效!)

    清理docker占用磁盘过大问题终极方案(亲测有效!)

    Docker很占用空间每当我们运行容器、拉取镜像、部署应用、构建自己的镜像时我们的磁盘空间会被大量占用,这篇文章主要给大家介绍了关于清理docker占用磁盘过大问题终极方案,需要的朋友可以参考下
    2024-04-04
  • Docker Desktop安装本地Kubernetes集群的实现

    Docker Desktop安装本地Kubernetes集群的实现

    Kubernetes用于协调高度可用的计算机集群,本文主要介绍了Docker Desktop安装本地Kubernetes集群的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • docker 容器HostConfig 字段示例详解

    docker 容器HostConfig 字段示例详解

    本文详细介绍了Docker容器的配置字段及其功能,包括Binds、ContainerIDFile、LogConfig、NetworkMode等,它还展示了这些字段的使用示例,帮助读者更好地理解和使用Docker容器的配置,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 详解将本地docker容器迁移到服务端

    详解将本地docker容器迁移到服务端

    这篇文章主要介绍了详解将本地docker容器迁移到服务端,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 修改Docker镜像(images)的存储路径的多种实现方式

    修改Docker镜像(images)的存储路径的多种实现方式

    本文介绍了如何修改Docker数据根目录以解决磁盘空间不足或希望使用更大/更快磁盘的问题,推荐通过修改daemon.json配置来实现,并提供了详细的步骤,需要的朋友可以参考下
    2026-01-01
  • Docker学习笔记之Docker端口映射

    Docker学习笔记之Docker端口映射

    本篇文章主要介绍了Docker学习笔记之Docker端口映射,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 一文教你如何清理Docker中闲置的镜像,容器和卷

    一文教你如何清理Docker中闲置的镜像,容器和卷

    在使用 Docker 的过程中,很容易积累大量未使用的镜像、容器和数据卷,这些未使用的资源不仅占据输出空间,还会消耗磁盘空间,下面我们就来看看如何清理吧
    2025-06-06
  • 前端项目容器化Docker打包部署方式详解

    前端项目容器化Docker打包部署方式详解

    这篇文章主要为大家介绍了前端项目容器化Docker打包部署方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论