1.下载安装redis
(1)Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为:
https://github.com/MSOpenTech/redis/releases
解压后拷贝到自己的目录下:
例如我的path:G:\Tool\redis-windows-master
此时打开cmd命令窗口,换到Redis目录下,执行
redis-server redis.windows.conf
这时候默认的打开的redis是6379端口
(2)窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行
redis-cli.exe -h 127.0.0.1 -p 6379
可以操作redis
2. 安装Ruby并配置环境
(1)安装ruby的原因:
redis-cluster安装前需要安装ruby环境,搭建集群需要使用到官方提供的ruby脚本。
(2)安装Ruby,Windows可以安装RubyInstaller,下载地址:
一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置。安装目录必须是英文的不能含有中文否则执行gem命令报错
(3)执行命令:
gem sources --remove https://rubygems.org/删掉原来的源
gem sources -a https://ruby.taobao.org添加淘宝源,注意为https,否则会找不到源
gem sources -l 查看现有的源
gem install redis 安装redis依赖
执行 gem install redis 出现 SSL Connect error时,是因为ruby 没有包含 SSL 证书,所以 https 的链接被服务器拒绝。
解决方法很简单,首先在这里下载证书http://curl.haxx.se/ca/cacert.pem, 然后再环境变量里设置 SSL_CERT_FILE 这个环境变量,并指向 cacert.pem 文件。
要让集群正常运作至少需要三个主节点,因此我们创建6个节点,三个主节点三个从节点,
参考:http://doc.redisfans.com/topic/cluster-tutorial.html#id5
将安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中
2). 更改配置
将六个文件夹下的redis.windows.conf文件中以下属性进行修改:
port 7001(对应文件夹的端口号)
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
3). 启动6个redis服务
其他几个启动方法如上图。
若嫌以后启动麻烦,可以自己编写一个启动redis集群的bat文件:
@echo off
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7001&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7002&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7003&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7004&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7005&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master\7006&&redis-server.exe redis.windows.conf"
start cmd /k "G:&&cd G:\Tool\redis-windows-master&&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"
exit
注意:
使用批处理文件时,可以用下面方法打打多个CMD窗口,并且每个窗口中执行多条命令。
start 用来启动一个应用
cmd /k 表示cmd后面的命令执行完后不关闭窗口。如果要在执行完成后关闭窗口可以用/c 。详细请使用cmd/?查看
"命令1&&命令2&&.." 将要执行的多条命令使用引号全部包起来,并且在命令间用&&分隔。如果只有一条命令则不用引号也可以。
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:7000 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
这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave
redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes ,redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯。
5). 连接集群进行测试
连接集群的指令:
redis-cli.exe -c -p 7000
java测试:
@Test
public voidtestRedis(){
JedisPoolConfig poolConfig =newJedisPoolConfig();
poolConfig.setMaxIdle(8);
Set nodes =newHashSet();
HostAndPort hostAndPort =newHostAndPort("127.0.0.1",7001);
HostAndPort hostAndPort1 =newHostAndPort("127.0.0.1",7002);
HostAndPort hostAndPort2 =newHostAndPort("127.0.0.1",7003);
HostAndPort hostAndPort3 =newHostAndPort("127.0.0.1",7004);
HostAndPort hostAndPort4 =newHostAndPort("127.0.0.1",7005);
HostAndPort hostAndPort5 =newHostAndPort("127.0.0.1",7006);
nodes.add(hostAndPort);
nodes.add(hostAndPort1);
nodes.add(hostAndPort2);
nodes.add(hostAndPort3);
nodes.add(hostAndPort4);
nodes.add(hostAndPort5);
JedisCluster jedisCluster =newJedisCluster(nodes,100000,poolConfig);//JedisCluster中默认分装好了连接池.
Map map = jedisCluster.getClusterNodes();
jedisCluster.set("test","test");
System.out.println(jedisCluster.get("test"));
}
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 cluster的哈希槽算法:CRC16(‘name’)%16384
被分配到了7001端口的redis服务上。
至此,Redis Cluster在Windows上的配置就完成了!