1、Redis集群TCP端口(Redis Cluster TCP ports)

每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,比如16379。第二个端口(本例中就是16379)用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。客户端从来都不应该尝试和这些集群总线端口通信,它们只应该和正常的Redis命令端口进行通信。注意,确保在你的防火墙中开放着两个端口,否则,Redis集群节点之间将无法通信。

命令端口和集群总线端口的偏移量总是10000。

注意,如果想要集群按照你想的那样工作,那么集群中的每个节点应该:

  1. 正常的客户端通信端口(通常是6379)用于和所有可到达集群的所有客户端通信
  2. 集群总线端口(the client port + 10000)必须对所有的其它节点是可到达的

也就是,要想集群正常工作,集群中的每个节点需要做到以下两点:

  1. 正常的客户端通信端口(通常是6379)必须对所有的客户端都开放,换言之,所有的客户端都可以访问
  2. 集群总线端口(客户端通信端口 + 10000)必须对集群中的其它节点开放,换言之,其它任意节点都可以访问

如果你没有开放TCP端口,你的集群可能不会像你期望的那样工作。集群总线用一个不同的二进制协议通信,用于节点之间的数据交换

2、Redis集群数据分片(Redis Cluster data sharding)

Redis集群不同一致性哈希,它用一种不同的分片形式,在这种形式中,每个key都是一个概念性(hash slot)的一部分。

There are 16384 hash slots in Redis Cluster, and to compute what is the hash slot of a given key, we simply take the CRC16 of the key modulo 16384.

Redis集群中有16384个hash slots,为了计算给定的key应该在哪个hash slot上,我们简单地用这个key的CRC16值来对16384取模。(即:key的CRC16  %  16384)

Every node in a Redis Cluster is responsible for a subset of the hash slots

Redis集群中的每个节点负责一部分hash slots,假设你的集群有3个节点,那么:

  • Node A contains hash slots from 0 to 5500
  • Node B contains hash slots from 5501 to 11000
  • Node C contains hash slots from 11001 to 16383

允许添加和删除集群节点。比如,如果你想增加一个新的节点D,那么久需要从A、B、C节点上删除一些hash slot给到D。同样地,如果你想从集群中删除节点A,那么会将A上面的hash slots移动到B和C,当节点A上是空的时候就可以将其从集群中完全删除。

因为将hash slots从一个节点移动到另一个节点并不需要停止其它的操作,添加、删除节点以及更改节点所维护的hash slots的百分比都不需要任何停机时间。也就是说,移动hash slots是并行的,移动hash slots不会影响其它操作。

Redis支持多个key操作,只要这些key在一个单个命令中执行(或者一个事务,或者Lua脚本执行),那么它们就属于相同的hash slot。你也可以用hash tags俩强制多个key都在相同的hash slot中。

主从模式(Redis Cluster master-slave model)

In order to remain available when a subset of master nodes are failing or are not able to communicate with the majority of nodes, Redis Cluster uses a master-slave model where every hash slot has from 1 (the master itself) to N replicas (N-1 additional slaves nodes).

当部分master节点失败了,或者不能够和大多数节点通信的时候,为了保持可用,Redis集群用一个master-slave模式,这样的话每个hash slot就有1到N个副本。

在我们的例子中,集群有A、B、C三个节点,如果节点B失败了,那么5501-11000之间的hash slot将无法提供服务。然而,当我们给每个master节点添加一个slave节点以后,我们的集群最终会变成由A、B、C三个master节点和A1、B1、C1三个slave节点组成,这个时候如果B失败了,系统仍然可用。节点B1是B的副本,如果B失败了,集群会将B1提升为新的master,从而继续提供服务。然而,如果B和B1同时失败了,那么整个集群将不可用。

Redis集群端口等相关推荐

  1. redis 集群讲解

    群集节点属性 每个节点在集群中都有唯一的名称.节点名称是一个160位随机数的十六进制表示,是第一次启动节点(通常使用/ dev / urandom)时获得的.节点将其ID保存在节点配置文件中,并永久使 ...

  2. 一文让你搞懂什么是Redis集群

    Redis 集群 在Redis3.0以上的版本,redis为我们提供了集群功能. Redis 集群的目标 Redis 集群是 Redis 的一个分布式实现,主要是为了实现以下这些目标(按在设计中的重要 ...

  3. 阿里云下Redis集群报Waiting for the cluster to join...和CLUSTERDOWN Hash slot not served的坑(网上搜了好多没看到什么能基本解决的)

    1 修改etc下面的redis.conf 改成bind 0.0.0.0 如果改成阿里云下的Ip redis服务将开启不了 2.在阿里云下配置12个redis集群端口安全组 3.输入redis-cli ...

  4. Redis集群读写分离架构搭建以及主从数据连通验证(附加集群口令认证以及Redis端口6379释放)

    1. 先在两台主机上装好Redis 如果这部分工作还没有准备好的话,可以看我的另一篇博客. 2. 设置主从节点以及从节点只读(实现读写分离) 2.1 配置slave节点作为master的从机,打开/e ...

  5. redis 端口_「建议收藏」手把手教你搭建redis集群

    前言 在生产中单机的redis服务不能保证程序的高可用,所以有时需要我们来搭建一个redis集群,保证某一台redis服务挂了的时候,我们的服务还可以保证正常运行. 单机redis的搭建,可以参考我的 ...

  6. docker 实现redis集群搭建

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

  7. Redis 集群部署及踩过的坑

    本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑. 安装准备 centos版本:6.7 redis版本:3.2.3 安装方 ...

  8. Redis 集群方案

    根据一些测试整理出来的一份方案: 1. Redis 性能 对于redis 的一些简单测试,仅供参考: 测试环境:Redhat6.2 , Xeon E5520(4核)*2/8G,1000M网卡 Redi ...

  9. 天天用着Redis集群,主从同步该知道吧?集群工作原理是否需要了解下?

    作者:z小赵 ★ 一枚用心坚持写原创的"无趣"程序猿,在自身受益的同时也让朋友们在技术上有所提升. 前言 插播一个小插曲,本来文章已经写好准备发布了,手贱清理了缓存导致文本内容全部 ...

最新文章

  1. 网站性能调优开发工具: Lighthouse, Puppeteer 以及进阶部分丨 Google 开发者大会 2018...
  2. html 中写样式,css样式中黑体怎么写
  3. ustc小道消息20211223
  4. 北邮OJ 1021. 16校赛-Stone Game
  5. client中周期性边界_「微评」增加艺术品在投资组合中的比例 推进国家艺术软实力...
  6. Java 流式编程stream
  7. 【qduoj】C语言_凯撒密码
  8. Spring Boot的自动配置的原理
  9. Android系统的开机画面显示过程分析(2)
  10. Linux文件夹操作
  11. make: ./libtool:命令未找到
  12. 计算机组成原理cu_计算机组成原理19----控制单元CU设计
  13. 实时股票行情接口api有哪些?
  14. (PTA)7-5 查询水果价格 (15分)
  15. 再见铁饭碗!又一行业被颠覆!国内第一家无人银行,在上海正式开业!
  16. 用 CSS 实现一个抽奖转盘(附详细代码+思路)
  17. 【原创】解决windows命令行运行程序必须输入.exe后缀的问题
  18. 【儿童节】2018 下半年 Java 后端工程师的书单推荐
  19. cucumber java从入门到精通_cucumber java从入门到精通(4)Scenario Outline及数据驱动...
  20. BOSS战的设计与架构

热门文章

  1. 模拟电子技术基础------单管共射放大电路
  2. linux 使用icc运行tcl,ICC的步骤流程方法
  3. android-ultra-pull-to-refresh list,Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
  4. ip段各个号段的含义
  5. 宽带服务器无响应678,宽带连接错误678怎么办 是什么原因导致的【解决方法】...
  6. R及Rstudio下载安装教程
  7. Sublime 安装与中文配置
  8. Spark DStreams_JZZ158_MBY
  9. AWS 亚马逊云良好架构框架
  10. csgo原始输入开不开_CSGO职业哥参数配置:帅气猪猪JW