Docker搭建Redis主从集群

date
Jun 9, 2021
slug
redis-docker-develop
status
Published
tags
Website
summary
本文介绍了如何使用Docker搭建Redis主从集群。主要步骤包括为主节点配置从节点,持久化数据,处理断开连接和重连,以及部分复制的过程。主从复制具有多个特点,如同一个Master可以拥有多个Slave,Master下的Slave可以接受同一架构中其他Slave的连接与同步请求,主从复制不会阻塞Master等。主从复制的优势包括避免Redis单点故障,做到读写分离。最后,文章详细介绍了如何使用Docker搭建Redis主从集群。
type
Post

 

原理

为主节点master 配置一个节点 slave,不管slave 是否为第一次连接上 master,slave 都会发送一个sync 命令给master 请求复制数据。
master接受到sync 命令后,会在后头进行数据持久化,通过bgsave 生成最新的rdb 快照文件,在生成 rdb快照期间 master 如果收到客户端的更新请求,master 会把这些修改的请求缓存在内存中。
当持久化进行完毕之后,master 会把这份rdb文件数据集发送到slave,slave会把接收到的数据进行持久化成rdb,然后加载到内存中,然后master,在将之前缓存在内存中的命令发送到slave;
当master 与 slave 之间的连接由于某些原因而断开,slave 能自动重连master,如果master收到多个slave 并发连接请求,master 只会进行一次持久化,而不是一个链接一次持久化,然后再把这一份持久化数据发送给多个并发连接的 slave
当 master 和 slave 断开重连后,一般会对整份的数据进行复制,但是从redis 2.8 之后master 和slave 端口后重连支持部分复制。
部分复制的过程:
master会在其内存中创建一个复制数据用的缓冲队列
notion image

主从复制的特点

  1. 同一个Master 可以拥有多个Slave
  1. Master 下的Slave 还可以接受同一架构中其他Slave 的连接与同步请求,实现数据的级联复制,即Master -> Slave -> Slave模式
  1. Master 以非阻塞的方式同步数据至Slave,这将意味着Master 会继续处理一个或者多个Slave 的读写请求
  1. 主从复制不会阻塞Master,当一个或多个Slave 与 Master进行初次同步数据的时候,Master 可以继续处理客户端发来的请求
  1. 主从复制具有可拓展性,即多个Slave 专门提供只读查询与数据的冗余,Master 专门提供写操作
  1. 通过配置禁用Master 数据持久化机制,将其数据持久化操作交给Slave完成,避免在Master中有独立的进程来完成此操作

主从复制的优势

  • 避免Redis 单点故障
  • 做到读写分离,构建读写分离架构,满足读多写少的应用场景

Docker 搭建 Redis 主从集群

1、拉取 Redis 镜像

2、创建文件和文件夹

redis-cluster.conf 写入 配置如下:

3、创建 docker 网络

创建一个 docker 网络,为了 Redis 中的集群通信

4、使用 shell 生成配置信息

进入到redis-cluster文件夹中
生成conf和data目录,并生成配置信息
生成6个文件夹,从 6000 到 6005 ,每个文件夹下包含data和conf文件夹,同时conf里面有redis.

5、创建 Redis 镜像

创建 shell 脚本
编写 shell 脚本如下:
启动容器
查看容器
:::tip 如果容器的状态为up则,启动成功!否则使用
来查看日志 :::

6、构建集群

进入到任意一个容器
执行
::: tip 请确保开放了 6000-600516000-16005 端口 如果出现 waiting for the Cluster to join,那么应该是你端口没有开放完全。 :::
中途要输入 yes,确认要初始化。

查看信息

使用redis-cli进入任一端口
查看节点消息
查看集群信息

总结

记录一下使用服务器搭建Redis集群,后面可能(大概、也许)会搭建一个哨兵模式,下次见!

© icelo 2022 - 2024