参考文章:http://doc.redisfans.com/topic/cluster-tutorial.html

Redis 集群的数据分片
     Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
     Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,      举个例子,比如当前集群有3个节点,那么:
     节点 A 包含 0 到 5500号哈希槽.
     节点 B 包含5501 到 11000 号哈希槽.
     节点 C 包含11001 到 16384号哈希槽.
     这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我像移除节点     A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点       并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.


Redis 集群的数据分片
    Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
    Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,       举个例子,比如当前集群有3个节点,那么:
    节点 A 包含 0 到 5500号哈希槽.
    节点 B 包含5501 到 11000 号哈希槽.
    节点 C 包含11001 到 16384号哈希槽.
     这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得到部分槽到D上. 如果我想移除节      点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节        点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

 

一、下载Redis:https://github.com/MicrosoftArchive/redis/releases,Redis-x64-3.2.100.zip

将下载的文件解压缩到目录:C:\software\tool\redis\Redis-x64-3.2.100

执行命令:redis-server.exe redis.windows.conf启动服务器

redis集群删除备用节点 redis删除集群配置_Redis

再打开一个cmd命令启动客户端:

 

redis-cli.exe -p 6379

redis集群删除备用节点 redis删除集群配置_数据_02


二、安装Ruby http://railsinstaller.org/en

 

下载成功后直接安装,最后弹出一个cmd框,执行gem install redis命令,可能会出现异常不用管,这是因为Ruby缺少SSL证书的原因,下载正式:http://curl.haxx.se/ca/cacert.pem,然后设置环境变量SSL_CERT_FILE

redis集群删除备用节点 redis删除集群配置_数据_03

三、要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

(1)主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis回复工作后,会成为从节点

创建集群目录以端口号命名,安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中:

redis集群删除备用节点 redis删除集群配置_Redis_04

(2)将六个文件夹下的redis.windows.conf文件中的以下属性进行修改:

 

port 7001(对应文件夹的端口号)
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

(3)分别进入六个文件夹下启动服务

 

 

redis-server.exe redis.windows.conf

(4)创建启动集群

 

由于创建启动集群需要redis-trib.rb文件,它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群,检查集群或者对集群进行重新分片(reshared)等工作。

Windows的redis安装文件中是没有这个文件的,我们需要去官网下载Redis,官网的Redis是Linux版本,在其源码src文件夹下,将redis-trib.rb拷贝到本机中Redis的安装目录中

最后进入redis-trib.rb文件所在目录执行:

ruby redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave


redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes ,redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯。

 

 

 

(5)连接集群测试

 

redis-cli.exe -c -p 7001

Redis集群数据分配策略采用一种叫做哈希槽 (hash slot)的方式来分配数据,redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384;
注意的是:必须要3个以上的主节点,否则在创建集群时会失败,三个节点分别承担的slot 区间是:

 

 

节点A覆盖0-5460;
    节点B覆盖5461-10922;
    节点C覆盖10923-16383.

四、以上三步我们成功的配置了redis的集群,但是大家可能也会想到这样的配置是没有密码验证的(在配置集群服务之前是不能配置密码的否则会验证不能通过),要新增上密码验证就需要修改redis.windows.conf配置文件:

masterauth 619868
requirepass 619868

然后重启各个服务再连接服务端的时候就需要密码验证了;