事实上非常多地方都有可能接触到集群的概念。为什么会有集群呢?简单的讲就是人多好办事,本来是一个人须要非常费劲才干完毕的事,如今分给十个人做,十个人都能够非常轻松的完毕,在海量数据,信息爆炸的今天,假设想要处理存储很多其它的数据,可是却没有强大到爆的大型计算机支持的话。集群是个不错的选择。
Redis中也支持集群,Redis中的集群是通过【分片】来进行数据共享的(事实上数据库中凡是涉及到集群的。一般都会有分片或者是分区这个概念伴随着出现)。
我们简要来说一下。学习Redis集群,须要学习什么东西,就像是大学上课时的课前概要。第一。既然是集群。那么肯定是要涉及到集群中的组成部分——【节点】,我们须要了解节点是什么?和普通的Redisserver有什么差别?第二。前面说过的分片,什么是分片?把什么给分了,分给谁,既然分了,那么取的时候怎么办?第三,集群是非常多台计算机server构成的,假设当中的一台宕掉了,怎么办?难道整个集群就瘫痪了吗?怎样预防和处理这样的集群中节点宕机的情况?这里就涉及到了复制和故障转移
说集群肯定是要说节点的,节点构成的集群嘛,没有节点哪里有什么集群。非常清楚的就能够理解到什么是节点了,【节点就是在集群模式下执行的Redisserver】 。集群中的节点和普通的Redisserver相比,区别在哪里,事实上也不难猜測出。普通Redisserver仅仅是单机的server,老老实实的处理client发过来的命令,然后老老实实的返回处理结果。节点不同,除了这些之外,节点还是集群中的一部分。须要顾及到集群中用到的数据,比方,集群中其它节点的信息,和其它节点握手,推断其它节点是否下线,等等。
集群模式事实上在节点中已经引出来,说的直白点,就是server执行一种状态,更直白点事实上就是一个配置文件里的一个标志位,redis.conf中有个配置项。【cluster-enabled yes】在启动Redisserver的时候。推断这个配置项的值是否是yes,假设是yes那么就开启server的集群模式。使server成为集群模式中的一个节点,【这里须要说明一下。成为集群模式中的一个节点,并不能成为一个集群。一个一个点,最后还是点,没法成为一个网的,须要连接。这里须要用到一个redis命令。cluster meet ip port,将两个节点连接起来。构成集群】
分片的概念事实上不难理解,能够想象一个芝麻烧饼。太大了。不优点理,将它切开,上面的芝麻就会被分布到不同的部分上,分片是一个动词,是分开烧饼的那个动作,【分片(sharding)是指将数据拆分,将其分散到不同的机器上的过程,有时也用分区这个概念】,以上的概念是在一本MongoDb的书中找的,认为在Redis这里也能适用。只是,有点不同,【须要注意,Redis分片事实上是将一个大烧饼分成了非常多小烧饼,然后往烧饼上撒芝麻。至于那个芝麻该到哪块小烧饼上去。这个是须要计算的,通过芝麻的特性】专业点就是,集群中的整个数据库看成一个大烧饼,被分成了16384块小烧饼【槽】,数据库中的键(也就是样例中的芝麻)都属于这些槽,至于这一块一块的小烧饼【槽】该归哪个小馋猫【节点】呢?我们能够通过命令分配【这里叫槽指派。cluster addslots slots】slots是从0到16383,但所有的槽所有分配给节点之后。这个集群数据库才算是真正上线。能够接受client发来的处理键的命令了。这里有一步。是各个节点传播各自的槽指派信息。也就是说哪个节点处理哪些槽,大家都是心知肚明的。
[ get data]命令也是一样。先计算data键是哪个槽,然后把命令redirected到那个节点运行。
原文:http://www.cnblogs.com/lxjshuju/p/6897754.html