目录

一、docker集群安装

1.分别在宿主机的/docker/redis下创建每个节点数据同步的目录

2.执行容器启动命令

3.执行命令参数解释:

4.集群节点不够提示:提示需要至少3个master

5.执行命令构建主从关系

6.查看集群状态

二、验证集群hash槽位(slot)自动分配键值

1.传统单机登陆错误示范

2.正确存储键值示范

3.集群检查


一、docker集群安装

1.分别在宿主机的/docker/redis下创建每个节点数据同步的目录

2.执行容器启动命令

docker run -d --name redis-node81 --net host --privileged=true -v /docker/redis/node-6381/data:/data redis --cluster-enabled yes --appendonly yes --port 6381

docker run -d --name redis-node82 --net host --privileged=true -v /docker/redis/node-6382/data:/data redis --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name redis-node83 --net host --privileged=true -v /docker/redis/node-6383/data:/data redis --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name redis-node84 --net host --privileged=true -v /docker/redis/node-6384/data:/data redis --cluster-enabled yes --appendonly yes --port 6384

注意 --cluster-enabled yes 需要跟在镜像后

3.执行命令参数解释:

docker run -d

--name redis-node81

--net host  主机网络

--privileged=true

-v /docker/redis/node-6381/data:/data redis  宿主机文件映射

--cluster-enabled yes  是否开启集群

--appendonly yes  是否开启持久化

--port 6381  端口号

[root@localhost redis]# docker run -d --name redis-node81 --net host --privileged=true -v /docker/redis/node-6381/data:/data redis --cluster-enabled yes --appendonly yes --port 6381
b5ee28798e83842f54dc1fc35f1a10113f257d31209b5719629659137145bc8d
[root@localhost redis]# docker run -d --name redis-node82 --net host --privileged=true -v /docker/redis/node-6382/data:/data redis --cluster-enabled yes --appendonly yes --port 6382
50bab8d93f0a2f3a464fd625bf23ecdd8a2b323d0843ba5fc24b857b659bec1f
[root@localhost redis]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
50bab8d93f0a   redis       "docker-entrypoint.s…"   3 seconds ago    Up 2 seconds                                                           redis-node82
b5ee28798e83   redis       "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes                                                          redis-node81
c68e431e7a2d   mysql:5.7   "docker-entrypoint.s…"   8 days ago       Up 8 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   formysql
d536dd728243   redis       "docker-entrypoint.s…"   8 days ago       Up 8 days       6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp    forredis2
[root@localhost redis]# docker run -d --name redis-node83 --net host --privileged=true -v /docker/redis/node-6383/data:/data redis --cluster-enabled yes --appendonly yes --port 6383
bf3f7574eeab9830a1fd5d29b76c81164ac3d87acd1d7b6803baeafb9779f1f3
[root@localhost redis]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
bf3f7574eeab   redis       "docker-entrypoint.s…"   2 seconds ago    Up 2 seconds                                                           redis-node83
50bab8d93f0a   redis       "docker-entrypoint.s…"   21 seconds ago   Up 20 seconds                                                          redis-node82
b5ee28798e83   redis       "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes                                                          redis-node81
c68e431e7a2d   mysql:5.7   "docker-entrypoint.s…"   8 days ago       Up 8 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   formysql
d536dd728243   redis       "docker-entrypoint.s…"   8 days ago       Up 8 days       6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp    forredis2
[root@localhost redis]# docker run -d --name redis-node84 --net host --privileged=true -v /docker/redis/node-6384/data:/data redis --cluster-enabled yes --appendonly yes --port 6384
b4f4ed8c22caac25cfeae91dcdc657149b820e10003981a78a676652b6d209dd
[root@localhost redis]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
b4f4ed8c22ca   redis       "docker-entrypoint.s…"   1 second ago     Up 1 second                                                            redis-node84
bf3f7574eeab   redis       "docker-entrypoint.s…"   10 seconds ago   Up 10 seconds                                                          redis-node83
50bab8d93f0a   redis       "docker-entrypoint.s…"   29 seconds ago   Up 28 seconds                                                          redis-node82
b5ee28798e83   redis       "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes                                                          redis-node81
c68e431e7a2d   mysql:5.7   "docker-entrypoint.s…"   8 days ago       Up 8 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   formysql
d536dd728243   redis       "docker-entrypoint.s…"   8 days ago       Up 8 days       6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp    forredis2
复制代码

执行命令构建主从关系创建主从关系

4.集群节点不够提示:提示需要至少3个master

root@localhost:/data# redis-cli --cluster create 192.168.2.252:6381 192.168.2.252:6382 192.168.2.252:6383 192.168.2.252:6384 --cluster-replicas 1
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 4 nodes and 1 replicas per node.
*** At least 6 nodes are required.
复制代码

docker run -d --name redis-node85 --net host --privileged=true -v /docker/redis/node-6385/data:/data redis --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name redis-node86 --net host --privileged=true -v /docker/redis/node-6386/data:/data redis --cluster-enabled yes --appendonly yes --port 6386

5.执行命令构建主从关系

root@localhost:/data# redis-cli --cluster create 192.168.2.252:6381 192.168.2.252:6382 192.168.2.252:6383 192.168.2.252:6384 192.168.2.252:6385 192.168.2.252:6386 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.2.252:6385 to 192.168.2.252:6381
Adding replica 192.168.2.252:6386 to 192.168.2.252:6382
Adding replica 192.168.2.252:6384 to 192.168.2.252:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: c4e09a1bf36b4aa79b744b39aabe809df1bd29c8 192.168.2.252:6381slots:[0-5460] (5461 slots) master
M: 2de30f0b227b2d30602f14ec69b84d54e3b22af9 192.168.2.252:6382slots:[5461-10922] (5462 slots) master
M: 8996d0476951fba537d26b513721c27981f0ddd6 192.168.2.252:6383slots:[10923-16383] (5461 slots) master
S: 12a22d510b2b590b7407877bd310263409b88893 192.168.2.252:6384replicates 8996d0476951fba537d26b513721c27981f0ddd6
S: 23a94ab62fcefb1112ba88ebe65a198bc540b721 192.168.2.252:6385replicates c4e09a1bf36b4aa79b744b39aabe809df1bd29c8
S: 8e7560aa024a53ed0ed93ab7b6b43189cb0c0ef7 192.168.2.252:6386replicates 2de30f0b227b2d30602f14ec69b84d54e3b22af9
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 192.168.2.252:6381)
M: c4e09a1bf36b4aa79b744b39aabe809df1bd29c8 192.168.2.252:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 2de30f0b227b2d30602f14ec69b84d54e3b22af9 192.168.2.252:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 12a22d510b2b590b7407877bd310263409b88893 192.168.2.252:6384slots: (0 slots) slavereplicates 8996d0476951fba537d26b513721c27981f0ddd6
M: 8996d0476951fba537d26b513721c27981f0ddd6 192.168.2.252:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 8e7560aa024a53ed0ed93ab7b6b43189cb0c0ef7 192.168.2.252:6386slots: (0 slots) slavereplicates 2de30f0b227b2d30602f14ec69b84d54e3b22af9
S: 23a94ab62fcefb1112ba88ebe65a198bc540b721 192.168.2.252:6385slots: (0 slots) slavereplicates c4e09a1bf36b4aa79b744b39aabe809df1bd29c8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@localhost:/data#
复制代码

注意看hash槽分配到3个主节点的槽点值区间

Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
复制代码

分别代表如果存入的键名通过计算得到的值落在哪个数值区间,则存到哪个节点下

6.查看集群状态

root@localhost:/data# redis-cli -p 6381
127.0.0.1:6381> CLUSTER info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:470
cluster_stats_messages_pong_sent:484
cluster_stats_messages_sent:954
cluster_stats_messages_ping_received:479
cluster_stats_messages_pong_received:470
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:954
127.0.0.1:6381> CLUSTER nodes
2de30f0b227b2d30602f14ec69b84d54e3b22af9 192.168.2.252:6382@16382 master - 0 1654852981329 2 connected 5461-10922
12a22d510b2b590b7407877bd310263409b88893 192.168.2.252:6384@16384 slave 8996d0476951fba537d26b513721c27981f0ddd6 0 1654852980326 3 connected
8996d0476951fba537d26b513721c27981f0ddd6 192.168.2.252:6383@16383 master - 0 1654852979324 3 connected 10923-16383
8e7560aa024a53ed0ed93ab7b6b43189cb0c0ef7 192.168.2.252:6386@16386 slave 2de30f0b227b2d30602f14ec69b84d54e3b22af9 0 1654852979000 2 connected
23a94ab62fcefb1112ba88ebe65a198bc540b721 192.168.2.252:6385@16385 slave c4e09a1bf36b4aa79b744b39aabe809df1bd29c8 0 1654852980000 1 connected
c4e09a1bf36b4aa79b744b39aabe809df1bd29c8 192.168.2.252:6381@16381 myself,master - 0 1654852979000 1 connected 0-5460
复制代码

二、验证集群hash槽位(slot)自动分配键值

1.传统单机登陆错误示范

传统登陆方式,无法正常存储非属于当前节点上的槽点的值而报错

root@localhost:/data# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> set a 1
(error) MOVED 15495 192.168.2.252:6383
127.0.0.1:6381> get a
(error) MOVED 15495 192.168.2.252:6383
127.0.0.1:6381> set b 2
OK
127.0.0.1:6381> get b
"2"
127.0.0.1:6381>
复制代码

可以看到 报错:“(error) MOVED 15495 192.168.2.252:6383 ”

是因为集群自动分配槽位,  a对应的槽位15495 对应的是6383的节点

2.正确存储键值示范

集群的正确链接方式是在链接命令后面带上参数 “-c”

当存入键值时,对键key进行CRC16校验后,对16384取余计算,得出的值,redis会自动分配到对应的槽位,并重定向到对应的节点下

root@localhost:/data# redis-cli -p 6381 -c
127.0.0.1:6381> keys *
1) "b"
127.0.0.1:6381> FLUSHALL
OK
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> set a 1
-> Redirected to slot [15495] located at 192.168.2.252:6383
OK
192.168.2.252:6383> keys *
1) "a"
192.168.2.252:6383> set b 2
-> Redirected to slot [3300] located at 192.168.2.252:6381
OK
192.168.2.252:6381> set c 3
-> Redirected to slot [7365] located at 192.168.2.252:6382
OK
192.168.2.252:6382> keys *
1) "c"
复制代码

3.集群检查

root@localhost:/data# redis-cli --cluster check 192.168.2.252:6381
192.168.2.252:6381 (c4e09a1b...) -> 1 keys | 5461 slots | 1 slaves.
192.168.2.252:6382 (2de30f0b...) -> 1 keys | 5462 slots | 1 slaves.
192.168.2.252:6383 (8996d047...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.2.252:6381)
M: c4e09a1bf36b4aa79b744b39aabe809df1bd29c8 192.168.2.252:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 2de30f0b227b2d30602f14ec69b84d54e3b22af9 192.168.2.252:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 12a22d510b2b590b7407877bd310263409b88893 192.168.2.252:6384slots: (0 slots) slavereplicates 8996d0476951fba537d26b513721c27981f0ddd6
M: 8996d0476951fba537d26b513721c27981f0ddd6 192.168.2.252:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 8e7560aa024a53ed0ed93ab7b6b43189cb0c0ef7 192.168.2.252:6386slots: (0 slots) slavereplicates 2de30f0b227b2d30602f14ec69b84d54e3b22af9
S: 23a94ab62fcefb1112ba88ebe65a198bc540b721 192.168.2.252:6385slots: (0 slots) slavereplicates c4e09a1bf36b4aa79b744b39aabe809df1bd29c8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@localhost:/data#
复制代码

作者:Forpastime
关联链接:https://juejin.cn/post/7108665031600341022

docker 安装redis集群配置3主3从,实现hash槽分配存储数据相关推荐

  1. docker安装redis集群+设置密码

    docker安装redis集群+设置密码 采用文章 https://blog.csdn.net/BThinker/article/details/123374236 1.获取Redis镜像 shell ...

  2. 用docker安装redis集群报错“Bad directive or wrong number of arguments\n“,“stream“:“stderr“”

    redis.conf配置文见多了红框里面的几行参数,删除这几行后正常启动.

  3. Docker高级篇-Docker容器内Redis集群配置

    Docker容器内Redis集群配置 1.三主三从集成配置 1.1.关闭防火墙.启动docker服务 1.2.新建6个docker容器实例 1.3.进入容器redis-node-1,构建主从关系 1. ...

  4. docker 实现redis集群搭建

    摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Re ...

  5. docker 完成 redis集群搭建

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  6. 手把手教你实现 Docker 部署 Redis 集群

    作者:我为什么要写这个 cnblogs.com/cxbhakim/p/9151720.html 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试 ...

  7. KubeSphere安装redis集群,全程超带劲

    前言 redis是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署. 常规部署在虚拟机上的方式配置繁琐并且需要手动重启节点,而使用K8S进行redis集群的部署 ...

  8. 2万字好文!手把手教你实现 Docker 部署 Redis 集群

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 Life is not ...

  9. 使用docker搭建redis集群

    使用docker搭建redis集群有两种,一种是单机多个docker容器,一种是多个机器的集群 基础知识 每个Redis集群中的节点都需要打开两个TCP连接.一个连接用于正常的给Client提供服务, ...

最新文章

  1. 用pycharm写python_使用Pycharm编写第一个python程序
  2. Stimulsoft Reports.Silverlight 2013.2下载
  3. java 大整数编程_Java编程--RSA算法中的大整数运算
  4. Vue注意事项及用得较多的属性归纳
  5. php两个数组找公共部分,PHP开发中如何查找两个数组的交集
  6. 还有什么芯片没涨?ST、ON、Microchip、Xilinx、东芝开启新一轮涨价潮
  7. mysql_num_rows+报错_错误:警告:mysql_num_rows()期望参数1为资源,在第19行的C:\ xampp...
  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 14 全面了解Kafka的使用与特性
  9. mysql下载是port报错_mysql group replication添加复制节点报错
  10. 什么是“元认知”?用具体的例子易懂地解说教育、商务中大受关注的能力!
  11. 基于python的民宿旅馆消费数据分析系统
  12. sip软电话免费下载地址(eyebeam)
  13. 任玉刚【Android开发艺术探索】读后笔记二
  14. python实战笔记之(4):刷博客浏览量
  15. PPT格式转换PDF在手机上如何操作
  16. 杰理之省电容MIC收敛值【篇】
  17. Python3.8安装Pytorch
  18. idea maven报红,但是项目中有jar包,提示找不到xx类
  19. github 遇到的问题
  20. HCIP第十三天笔记

热门文章

  1. Linux系统提供的time详解
  2. python实现签名RSA算法
  3. python通过正则匹配开头和结尾提取中间字符串内容
  4. 劲牌“中药配方颗粒关键技术及等效性示范研究”项目科技成果评价会顺利召开
  5. Performance Metrics(性能指标2)
  6. 【计算机科学】mini-AORCNN:一种基于Bottleneck Transformer的轻量级微表情识别架构——CCF T2
  7. 年薪6万美元|临床医学应届博士获美国费恩斯坦医学研究所博士后职位
  8. NoteII用TWRP卡刷4.4.2版ROM
  9. 你的能力比学历更重要python_能力比学历重要辩论赛一辩?
  10. emWin皮肤设置颜色