Redis初时~集群模式

Redis的集群模式是在Redis3.0模式以后所实行的高可用模式。虽然大部分公司还都在用3.0以下的模式,但是随着发展我们会慢慢的接触到3.0以上的形式。在这里我们先简单的介绍下集群的模式,方便我们后期来用。

Redis的集群介绍

Redis的集群是一个提供多个Redis节点之间数据共享的程序集。但是Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点移动数据,在高负载的情况下可能导致不可预料的错误。Redis集群通过分区来提供一定程度的可用性,这样情况的优势在于,

  • 能自动的分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能继续处理命令。

Redis集群的数据分片

Redis的集群没有使用一致性的hash,而是引入了哈希槽的概念。哈希槽就是在Redis中使用CRC16检验后对16384进行取模 来决定放置在哪个槽。Redis中一共有16384个槽 ,所以在取模的时候我们会对16384进行操作。集群中有N个机器,那么16384节点会平分这些槽。这样就很容易方便我们方便我们操作机器的增加和删除,并且不影响我们集群的状态。

Redis集群的主从复制模型

前面的文章中我们介绍的Redis中的复制功能。在集群中,我们也是用了相关的操作,为了防止在部分节点失败的或者无法通信的情况下集群仍然可用。所以我们在集群中使用了主从复制模型,每个节点都会有N-1个复制品。当主节点失败的时候,从节点会直接代替旧的主节点成为新的主节点。

Redis的一致性保证

Redis 并不能保证数据的强一致性,这在操作中容易出现丢失的写操作。为什么会出现这种情况呢,是因为Redis的集群采取的异步复制的方式。写操作的过程中

  • 客户端向主节点写入一条命令。
  • 主节点master向客户端回复一条命令状态
  • 主节点将写操作复制给他的从节点
    主节点对命令的复制工作发生在返回命令回复之后,因为如果每次请求命令都需要等待复制操作完成的情况下,那么主节点处理命令的请求速度回极大地降低,所以我们必须在性能和一致性操作做出权衡。 另外出现数据丢失的情况是 集群出现了网络分区,并且一个客户端与至少一个主节点在内的少数实例被孤立。
    错误的分区那么相当于主节点就会出现问题,虽然在这期间仍然能像某个出现问题的主节点上继续写入数据,但是在大的分区那里从节点会被选举为新的主节点,这样在选举期间造成的数据写入到旧的数据master上,就会数据丢失了。所以我们在配置集群的时候 节点的超时时间配置(node timeout)就是十分重要了。

集群的重新分片

在上面我们也说过,我们在集群中可以方便的增加节点和删除节点,但是有个问题就是我们需要进行重新进行分片。在Redis中我们的分片操作并不影响我们系统的运行,我们可以使用

./redis-trib.rb reshard 127.0.0.1:7000  数据进行分片

我们知道如果集群已经稳定的运行了一段时间,那么在我们想移动的槽里面一般都会存在数据的,所以我们在移动的时候也得知道移动的哈希槽数量之外 ,还的知道分片的目标地址。

$ redis-cli -p 7000 cluster nodes | grep myself
87a3a3236747727124449322d633e1c3db5421b1 :0 myself,master - 0 0 0 connected 0-5460

其中目标节点是87a3a3236747727124449322d633e1c3db5421b1,现在需要指定从哪些节点来移动keys到目标节点 我输入的是all ,这样就会从其他每个master上取一些哈希槽。
最后确认后你将会看到每个redis-trib移动的槽的信息,每个key的移动的信息也会打印出来 在重新分片的过程中,你的例子程序是不会受到影响的,你可以停止或者重新启动多次。

Redis集群的目标

Redis的集群在3.0版本以后增加了,为什么会专门在Redis中实现集群的方式呢,在这里我们看到的是Redis为了提高高可用的性能所做的努力。

  • 集群目标是在1000个节点的时候仍然能表现的很好,并且有很好的扩展性。
  • 没有合并的操作,这样在Redi的数据模型上大数据值也能表现的很好。
  • 写入安全,尝试让大多数节点相连的客户端写入操作都能保证的安全的写入,虽然现在还会有小部分写入丢失。
  • 可用性,在绝大多数节点是可达的情况下,对于不可达的主节点在有一个从节点可达的情况下,Redis集群仍能进行分区操作。

Redis 集群中客户端与服务端

Redis中节点负责存储数据、记录集群的状态。集群节点同样能自动发现其他节点,检测出没有正常工作的节点,并且在节点中 选出主节点,那么为了这些操作,Redis之间的节点是通过TCP链接和一个二进制链接简历通讯,每一个节点都活通过集群链接与集群上的其他节点链接起来,并且通过使用一个gossip协议来传播集群的信息。这样发现新的节点、通过网络ping, 特定情况发生时发送集群消息。 由于集群节点不能代理 请求,所以客户端在接收到重定向错误的时会将命令重定向其他节点。客户端是可以自由的像集群中任意节点发送请求。也可以在需要的时候重定向到其他节点来保证命令的执行效率。

安全写入

Redis集群之间节点采用了异步的冗余备份。所以偶尔在分区的时候会存在时间段容易丢失数据。但是就如我们上面所说的两种情况会导致数据的丢失。总结情况如下:

  1. 写入操作能到达一个节点上,当回复节点时主节点宕机了,然而数据还没有同步到从节点,那么该写入就已经丢失,从节点被提为主节点。
    • 因为分区使一个主节点不可达。
  • 故障转移导致主节点的从节点升为主节点
  • 过一段时间后主节点再次可达
  • 一个没有更新路由表的客户端或许会在集群把主节点变成从节点。导致写入失败。
    所以我们在这是node_timeout的时候需要慎重,容易导致数据丢失的问题

为什么有的单机操作使用的命令在集群 中不可使用

Redis集群在设计的时候是避免在多个节点中存在同个键值对的冲突版本。Redis中的数据模型不允许这么做,有时候值特别大,那么我们在列表或者排序号的集合中就会有大量的元素,传输和合并就会有性能瓶颈。


TIM截图20180405235154.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容