使用容器搭建伪redis集群

2023-10-30

在一个主机上使用容器技术搭建一个redis集群,为什么说是伪集群,因为redis集群和分布式相互交叉。因为成本,在一台主机上部署一个三主三从的redis集群.
redis版本 v=6.2.6

部署

运行六个节点

docker-compose.yaml

version: '3'

services:
  redis-1:
    image: redis
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - redis-1-data:/data
    ports:
      - "6381:6379"
    networks:
      redis-net:

  redis-2:
    image: redis
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - redis-2-data:/data
    ports:
      - "6382:6379"
    networks:
      redis-net:

  redis-3:
    image: redis
    command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - redis-3-data:/data
    ports:
      - "6383:6379"
    networks:
      redis-net:

  redis-4:
    image: redis
    command: redis-server --port 6382 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes 
    volumes:
      - redis-4-data:/data
    ports:
      - "6384:6382"
    networks:
      redis-net:

  redis-5:
    image: redis
    command: redis-server --port 6383 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes 
    volumes:
      - redis-5-data:/data
    ports:
      - "6385:6383"
    networks:
      redis-net:

  redis-6:
    image: redis
    command: redis-server --port 6384 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes 
    volumes:
      - redis-6-data:/data
    ports:
      - "6386:6384"
    networks:
      redis-net:

volumes:
  redis-1-data:
    driver: local
  redis-2-data:
    driver: local
  redis-3-data:
    driver: local
  redis-4-data:
    driver: local
  redis-5-data:
    driver: local
  redis-6-data:
    driver: local

networks:
  redis-net:

部署实例容器

# cd 到 compose文件所在目录,运行如下命令
docker-compose up -d
➜  ~ docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED        STATUS        PORTS                                                        NAMES
d3cc83d4354d   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   6379/tcp, 0.0.0.0:6382->6380/tcp, 0.0.0.0:16382->16380/tcp   redis-redis-2-1
3ca1cb3e44a0   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   6379/tcp, 0.0.0.0:6386->6384/tcp, 0.0.0.0:16386->16384/tcp   redis-redis-6-1
90b6c9db88b7   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   0.0.0.0:6381->6379/tcp, 0.0.0.0:16381->16379/tcp             redis-redis-1-1
34885f8048de   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   6379/tcp, 0.0.0.0:6385->6383/tcp, 0.0.0.0:16385->16383/tcp   redis-redis-5-1
994604d01bf3   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   6379/tcp, 0.0.0.0:6383->6381/tcp, 0.0.0.0:16383->16381/tcp   redis-redis-3-1
568c5f837eb7   redis     "docker-entrypoint.s…"   17 hours ago   Up 17 hours   6379/tcp, 0.0.0.0:6384->6382/tcp, 0.0.0.0:16384->16382/tcp   redis-redis-4-1

使用redis-cli创建集群

# 随机进入一个容器,组建集群
redis-cli --cluster create [宿主机ip]:6379 [宿主机ip]:6380 [宿主机ip]:6381 [宿主机ip]:6382 [宿主机ip]:6383 [宿主机ip]:6384 --cluster-replicas 1

这个命令将在本地创建一个 Redis 集群,这个集群由 6 个 Redis 实例组成,其中 3 个实例是主节点,另外 3 个实例是从节点。这个命令还设置了每个主节点都有一个从节点,这样可以提高集群的可用性和容错性。因为如果一个主节点出现故障,其对应的从节点可以接替它的工作,继续提供服务。

命令执行后会有如下输出

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica [我的主机ip]:6383 to [我的主机ip]:6379
Adding replica [我的主机ip]:6384 to [我的主机ip]:6380
Adding replica [我的主机ip]:6382 to [我的主机ip]:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: eec5d53ffa77a4a97d5eaf01020cae55f06bafb4 [我的主机ip]:6379
   slots:[0-5460] (5461 slots) master
M: 1e2140229c82f64c542476bb1df81ad555bc904a [我的主机ip]:6380
   slots:[5461-10922] (5462 slots) master
M: bff2862af526bfdbfc9aa21e24ceddf29edbd9b4 [我的主机ip]:6381
   slots:[10923-16383] (5461 slots) master
S: 9532c7738bc64e459d60c73c3307cffe02566667 [我的主机ip]:6382
   replicates 1e2140229c82f64c542476bb1df81ad555bc904a
S: 244582ca81994034d0b92e8e7d53e3215f80132c [我的主机ip]:6383
   replicates bff2862af526bfdbfc9aa21e24ceddf29edbd9b4
S: f4cd9c2279d08d1eb0f71bcd2f56855b8789898f [我的主机ip]:6384
   replicates eec5d53ffa77a4a97d5eaf01020cae55f06bafb4
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node [我的主机ip]:6379)
M: eec5d53ffa77a4a97d5eaf01020cae55f06bafb4 [我的主机ip]:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 244582ca81994034d0b92e8e7d53e3215f80132c 172.19.0.2:6383
   slots: (0 slots) slave
   replicates bff2862af526bfdbfc9aa21e24ceddf29edbd9b4
M: bff2862af526bfdbfc9aa21e24ceddf29edbd9b4 172.19.0.7:6381
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: f4cd9c2279d08d1eb0f71bcd2f56855b8789898f 172.19.0.5:6384
   slots: (0 slots) slave
   replicates eec5d53ffa77a4a97d5eaf01020cae55f06bafb4
S: 9532c7738bc64e459d60c73c3307cffe02566667 172.19.0.3:6382
   slots: (0 slots) slave
   replicates 1e2140229c82f64c542476bb1df81ad555bc904a
M: 1e2140229c82f64c542476bb1df81ad555bc904a 172.19.0.4:6380
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看节点状态

127.0.0.1:6379> cluster nodes
244582ca81994034d0b92e8e7d53e3215f80132c 172.19.0.2:6383@16383 slave bff2862af526bfdbfc9aa21e24ceddf29edbd9b4 0 1683514923000 3 connected
bff2862af526bfdbfc9aa21e24ceddf29edbd9b4 172.19.0.7:6381@16381 master - 0 1683514922000 3 connected 10923-16383
f4cd9c2279d08d1eb0f71bcd2f56855b8789898f 172.19.0.5:6384@16384 slave eec5d53ffa77a4a97d5eaf01020cae55f06bafb4 0 1683514922000 1 connected
eec5d53ffa77a4a97d5eaf01020cae55f06bafb4 172.19.0.6:6379@16379 myself,master - 0 1683514922000 1 connected 0-5460
9532c7738bc64e459d60c73c3307cffe02566667 172.19.0.3:6382@16382 slave 1e2140229c82f64c542476bb1df81ad555bc904a 0 1683514923285 2 connected
1e2140229c82f64c542476bb1df81ad555bc904a 172.19.0.4:6380@16380 master - 0 1683514922000 2 connected 5461-10922

遇到的问题:
Waiting for the cluster to join~问题

说是集群节点的总线端口没开,但是容器开放了端口后,在容器外运行创建集群命令,还是会出这个问题。

  • 尝试,在容器内部运行组建集群命令,使用docker网络 ip /宿主机pi
  • 猜想:容器之间的通信造成的问题
    解决:进入到容器内部,然后运行集群创建指令,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用容器搭建伪redis集群 的相关文章

  • PooledRedisClientManager 未释放连接

    我将 json 数据列表存储在 redis 中并使用 ServiceStack c 客户端访问它 我本质上是在管理自己的外键 我在其中存储zrangeid 我使用应用程序内部的接口从zrange然后从 Redis 获取底层 json 对象并
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • 如何将node.js管道传输到redis?

    我有很多数据要插入 SET INCR 到redis DB 所以我正在寻找pipeline http redis io topics pipelining 质量插入 http redis io topics mass insert通过node
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • 有没有办法在 ruby​​ 中重新定义 []=+

    我正在尝试编写一个简单的 DSL 针对 Redis 并且我想自己定义 I have def key val redis zadd name val key end 我想定义 def key val redis zincrby name va
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • 当 Jedis 与 Spring Data 一起使用时,为什么数据会以奇怪的键存储在 Redis 中?

    我将 Spring Data Redis 与 Jedis 一起使用 我正在尝试存储带有密钥的哈希值vc list id 我能够成功插入到redis 但是 当我使用 redis cli 检查密钥时 我没有看到密钥vc 501381 相反我看到
  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid

随机推荐

  • llama2模型下载

    介绍 LLaMA 2 CHAT与OpenAI ChatGPT效果一样好 LLaMA 2与LLaMA 1架构相同 LLaMA 2训练数据是2000000000000个tokens 还是用了1000000个人类新标注的数据 上下文长度由2048
  • 前端实战复习——歌词滚动

    歌词滚动 此处展示为html的demo 思路 首先歌词单独为div 歌词整体滚动 设置wrap为div 歌词上移使用移动wrap位置 所以需要设置wrap position为absolute 歌词高亮使用当前歌词改变类名实现 添加过渡tra
  • C++ CopyFile函数的用法

    CopyFile函数定义在Windows h中 使用时要include之 CopyFile 使用如下 include
  • 一篇文章彻底学会递归思路解题

    一篇文章彻底学会递归思路解题 前 言 递归是算法中一种非常重要的思想 应用也很广 小到阶乘 再在工作中用到的比如统计文件夹大小 大到 Google 的 PageRank 算法都能看到 也是面试官很喜欢的考点 最近看了不少递归的文章 收获不小
  • blender硬表面建模渲染终极教程

    blender硬表面建模渲染终极教程 Gumroad The ULTIMATE Guide to Hard Ops and Boxcutter Gumroad 硬操作和切箱机的终极指南 教程大小 6G 1920X1080分辨率 语言 英语
  • 7-12 最长对称子串 (25 分)

    对给定的字符串 本题要求你输出最长对称子串的长度 例如 给定Is PAT TAP symmetric 最长对称子串为s PAT TAP s 于是你应该输出11 输入格式 输入在一行中给出长度不超过1000的非空字符串 输出格式 在一行中输出
  • Elasticsearch 笔记

    文章目录 Elasticsearch 快速安装 安装启动 问题踩坑 状态验证 Elasticsearch 基础使用 查看节点列表 列出索引信息 查看节点分片信息 其他的一些信息查询 创建索引 索引和查询文档 删除索引 修改数据 探索数据 搜
  • 基于SSM的智慧城市实验室主页系统的设计与实现

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用Vue技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave
  • Python 最常用模块函数代码汇总解析

    一 文件和目录操作 创建 删除 修改 拼接 获取当前目录 遍历目录下的文件 获取文件大小 修改日期 判断文件是否存在等 二 日期和时间 内置模块 time datatime calendar 1 time time 返回自1970年1月1日
  • Go换国内源解决go get -u 问题

    Go版本1 13及以上 Windows在编译器终端执行以下操作 go env w GO111MODULE on go env w GOPROXY https goproxy cn direct MacOS或Linux export GO11
  • java 可变参数 详解(通俗易懂)

    目录 一 概述 二 格式 三 注意事项 使用规范 四 代码演示 演示规范 演示规范 演示规范 课堂练习 代码演示 输出结果 五 英文版本讲解 一 概述 java中 我们可以将名称相同 功能也相同 但是形参个数不同的多个函数 封装为某个类中的
  • avue form弹框里改动label

    可参考官网弹窗表单配置 Avue
  • springboot 配置logback

    logback spring xml文件配置
  • Oracle数据库报错ERROR at line 1:ORA-01157: cannot identify/lock data file 9

    自说 今天在打开了好久没有打开的rac数据库时 重启数据库进入open模式时发生了以下错误 经过简单筛查后发现是因为之前创建的数据文件删除掉了 因为我这里是保存到了本地中 E盘下 未找到导致报错 我们可以查看 set linesize 19
  • 算法——无向图的最短路径算法

    https www jb51 net article 154796 htm 我是看上面的文章写的程序 他的第一种解法还需要我再理解理解 BFS一层层寻找目标节点的算法 思路 1 先从v到u的使用BFS遍历一遍图 得到每个节点到v的最短距离
  • C/C++ stat()函数:获取文件状态

    相关函数 fstat lstat chmod chown readlink utime 头文件 include
  • 使用R语言绘制指数分布密度函数数据的可视化

    使用R语言绘制指数分布密度函数数据的可视化 指数分布是概率论和统计学中常见的连续概率分布之一 广泛应用于可靠性工程 风险分析和排队论等领域 在本文中 我们将使用R语言的plot函数来可视化指数分布密度函数的数据 首先 我们需要安装并加载R语
  • Pytorch并行计算(二): DistributedDataParallel介绍

    PyTorch并行计算 DistributedDataParallel 一 为什么要并行计算 二 基本概念 三 DistributedDataParallel的使用 1 torch distributed 2 torch multiproc
  • 三、Express

    目录 初识express Express 简介 Express 的基本使用 安装 基本使用 托管静态资源 express static 托管多个静态资源目录 挂载路径前缀 nodemon Express路由 路由的基本使用 为路由模块添加前
  • 使用容器搭建伪redis集群

    在一个主机上使用容器技术搭建一个redis集群 为什么说是伪集群 因为redis集群和分布式相互交叉 因为成本 在一台主机上部署一个三主三从的redis集群 redis版本 v 6 2 6 部署 运行六个节点 docker compose