windows下搭建redis集群

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,下载地址:

http://railsinstaller.org/en

一直下一步安装完成会自动弹出一个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上的配置就完成了!

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

推荐阅读更多精彩内容