跳转至内容
0
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Zephyr)
  • 不使用皮肤
折叠
JIKE社区
  1. 首页
  2. 讨论区
  3. 技术专区
  4. Docker搭建Redis主从集群

Docker搭建Redis主从集群

已定时 已固定 已锁定 已移动 技术专区
3 帖子 3 发布者 758 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • iceloI 离线
    iceloI 离线
    icelo
    写于 最后由 icelo 编辑
    #1

    原理

    为主节点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会在其内存中创建一个复制数据用的缓冲队列
    image.png
    image.png

    主从复制的特点

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

    主从复制的优势

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

    Docker 搭建 Redis 主从集群

    1、拉取 Redis 镜像

    docker pull redis
    

    2、创建文件和文件夹

    cd /usr/local/src 
    mkdir redis-cluster  
    cd ./redis-cluster 
    touch redis-cluster.conf
    

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

    port ${PORT}
    cluster-enabled yes
    protected-mode no
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    #对外ip
    cluster-announce-ip [ip] # 修改为你的ip地址
    cluster-announce-port ${PORT}
    cluster-announce-bus-port 1${PORT}
    appendonly yes
    

    3、创建 docker 网络

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

    docker network create redis-net
    

    4、使用 shell 生成配置信息

    进入到redis-cluster文件夹中

    cd /usr/local/src/redis-cluster
    

    生成conf和data目录,并生成配置信息

    for port in `seq 6000 6005`; 
    do 
      mkdir -p ./${port}/conf 
      && PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf 
      && mkdir -p ./${port}/data;
    done
    

    生成6个文件夹,从 6000 到 6005 ,每个文件夹下包含data和conf文件夹,同时conf里面有redis.

    5、创建 Redis 镜像

    创建 shell 脚本

    vim start.sh
    

    编写 shell 脚本如下:

    for port in `seq 6000 6005`; 
    do 
      docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/src/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/src/redis-cluster/${port}/data:/data  --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; 
    done
    

    启动容器

    sh start.sh
    

    查看容器

    docker ps
    

    如果容器的状态为up则,启动成功!否则使用

    docker logs -f --since 30m [CONTAINER ID] 
    

    来查看日志

    6、构建集群

    进入到任意一个容器

    docker exec -it CONTAINER ID  /bin/bash
    

    执行

    cd /usr/local/bin && redis-cli --cluster create ip:6000 ip:6001 ip:6002 ip:6003 ip:6004 ip:6005 --cluster-replicas 1
    

    请确保开放了 6000-6005和16000-16005 端口
    如果出现 waiting for the Cluster to join,那么应该是你端口没有开> 放完全。

    中途要输入 yes,确认要初始化。

    查看信息

    使用redis-cli进入任一端口

    redis-cli -h ip -c -p 6000
    

    查看节点消息

    cluster nodes
    

    查看集群信息

    cluster info
    

    总结

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

    原文链接:https://www.icelo.cn/java/Docker搭建Redis主从集群.html

    冰洛博客:https://www.icelo.cn

    专注网络工具教程分享

    1 条回复 最后回复
    3
    • Deshen ChenC 离线
      Deshen ChenC 离线
      Deshen Chen
      🍌
      写于 最后由 编辑
      #2

      支持一下!好东西

      1 条回复 最后回复
      0
      • miyaM 离线
        miyaM 离线
        miya
        🍌
        写于 最后由 编辑
        #3

        mark

        白舟货源
        https://cargo.wboat.cn

        1 条回复 最后回复
        0
        回复
        • 在新帖中回复
        登录后回复
        • 从旧到新
        • 从新到旧
        • 最多赞同


        Popular Topics - 热门主题
        • Bug! Bug !Google One 学生优惠 可无门槛验证
          mztcM
          mztc
          3
          14
          4.9k

        • 中国科技云免费白嫖1 年 Cursor 使用权!快~~~
          D
          d914954480
          1
          7
          1.6k

        • MySQL 8.0 OCP 限时免费考
          HebutMrLiuH
          HebutMrLiu
          1
          5
          270

        • 阿里云国际站轻量应用服务器 2C+1G+200M带宽 仅9.9美元一年!
          T
          Test
          1
          4
          1.1k

        • <海外剧>行尸走肉:死城 第二季[2025][惊悚 恐怖 冒险][附行尸走肉 系列全部]
          我是小马甲~M
          我是小马甲~
          1
          3
          23

        • 免费科技代理流量巨多
          M
          midpoint
          1
          2
          58

        • 登录

        • 没有帐号? 注册

        • 登录或注册以进行搜索。
        百度网盘
        1,174 个主题
        连续剧
        698 个主题
        国产剧
        564 个主题
        美剧
        338 个主题
        中国移动
        307 个主题
        动画片
        231 个主题
        中国电信
        222 个主题
        动作片
        206 个主题

        248

        在线

        39.9k

        用户

        40.1k

        主题

        110.4k

        帖子
        • 第一个帖子
          最后一个帖子