Windows下搭建Redis集群,增删节点以及一些常用命令

来源:互联网 发布:丹麦域名后缀 编辑:程序博客网 时间:2024/05/17 06:22


Windows 配置Reids集群 Redis Cluster

前言:本人菜鸟一枚,之前项目要求搭建redis集群,就研究了一下,总结如下,后续Linux版本的搭建会继续传上来,敬请关注,谢谢~~

1. 下载安装Redis

Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: 
https://github.com/MSOpenTech/redis/releases

解压之后,拷贝到自定义的Redis目录下,例如D:\Redis\Redis-x64-3.0.504

打开cmd,切换到Redis目录下,执行

redis-server redis.windows.conf

出现下图即为OK

 

窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行

redis-cli.exe -h 192.168.1.100 -p 6379

2. 安装Ruby并配置环境

安装Ruby,Windows可以安装RubyInstaller,下载地址: 
http://railsinstaller.org/en

勾选下面选项不用配置环境变量

 

一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置

执行 gem install redis

 

如果出现 SSL Connect error时,是因为ruby 没有包含 SSL 证书,所以 https 的链接被服务器拒绝。

解决方法很简单,首先在这里下载证书 http://curl.haxx.se/ca/cacert.pem, 然后再环境变量里设置 SSL_CERT_FILE 这个环境变量,并指向 cacert.pem 文件。

3. 搭建Redis集群

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

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

1). 创建Redis集群目录

redis安装的根目录下通过命令行创建6个以端口命名的文件夹

mkdir 7000 7001 7002 7003 7004 7005

将安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中

2). 更改配置

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

port 7001(对应文件夹的端口号)

cluster-enabled yes(实例的集群模式)

cluster-config-file nodes.conf(保存节点配置文件,默认值为nodes.conf )

cluster-node-timeout 5000(是集群中各节点相互通讯时,允许"失联"的最大毫秒数,上面的配置为5秒,如果超过5秒某个节点没向其它节点汇报成功,认为该节点挂了。)

appendonly yes(启用AOF持久化方式)

 

3). 启动6个redis服务

进入每个端口命名的文件夹下逐个启动服务

redis-server.exe redis.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 192.168.1.100:7000192.168.1.100:7001192.168.1.100:7002192.168.1.100:7003192.168.1.100:7004192.168.1.100:7005

说明:

redis-trib.rb create, 这表示我们希望创建一个新的集群。

--replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

之后参数则是实例的地址列表,程序使用这些地址所指示的实例创建新集群。

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


 

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

5). 连接集群进行测试

连接集群的指令:

redis-cli.exe -c -p 7000

 

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上的配置就完成了!


Redis动态增加节点的相关测试

1:首先把需要添加的节点启动

创建文件夹 mkdir 7007

redis.conf和redis-server.exe两个文件拷过来

并将redis.conf中的port等数值改为7007(参考搭建集群)

然后启动该节点(双击7007.bat) redis-server.exe redis.conf

2:执行以下命令,将这个新节点添加到集群中

Ruby redis-trib.rb add-node 192.168.1.100:7007 192.168.1.100:7000(前为新节点,后为已存在的任一节点)

 

这就表明添加节点7007成功,此时可以打开nodes-7007.conf文件查看集群节点信息

 

 

端口为7007redis已经成功的加入到集群中,但是这个主节点没有空间槽。

3:增加了新的节点之后,这个新的节点可以成为主节点或者是从节点.

3.1把这个节点变成主节点

1)使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面,这个新节点就成为真正的主节点了。

执行命令ruby redis-trib.rb reshard 192.168.1.100:7007

 

执行命令如上图所示:问你是否从原有的1-16384个槽中分配多少到新的主节点我们这里分配1000为例回车

2然后紧接着会询问你给id为谁的主节点分配,我们这里copy这个id就行

 

 

3询问你是从所有的空间去给这个节点分配空间还是从某一个节点分配

输入all  回车继续

 

4然后会给你分配出一个分配计划,输入yes开始分配。完成ok

查看nodes-7007.conf文件

 

这就表示新添加的主节点分配槽点成功

3.2我们把端口为7008redis添加到集群,把它作为7007的从节点

1)执行命令 ruby redis-trib.rb add-node 127.0.0.1:7008  127.0.0.1:7001

出现步骤2的结果证明添加节点OK

2)然后连接7008节点,执行命令redis-cli.exe -c -p 7008

3)连接成功后,执行命令

cluster replicate (后面跟主节点的ID,可从nodes-7007.conf中查看)

查看nodes-7008.conf可看到7008以成为7007的从节点

 

 

 

 

Redis集群删除节点

1:如果删除的节点是主节点,这里我们删除127.0.0.1:7007节点,这个节点有1000个哈希槽

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令

ruby redis-trib.rb reshard 127.0.0.1:7007

 

系统会提示我们要移动多少哈希槽 这个127.0.0.1:7007节点有1000个哈希槽,

输入 1000

 

然后系统提示我们输入要接收这些哈希槽的节点的ID

这里输入 127.0.0.1:7000的节点ID(即为接受这些槽点的节点的id)

 

然后要我们选择从那些节点中转出哈希槽,

这里一定要输入 127.0.0.1:7007这个节点的ID(即为要删除的节点的id)

 

然后输入 yes

最后一步,使用下面的命令把这个节点删除

ruby redis-trib.rb del-node 127.0.0.1:7007 (后跟7007ID)

2:如果节点是从节点的,直接使用下面的命令删除即可。

rubyredis-trib.rbdel-node  127.0.0.1:7008  (后跟7008ID)

 

 

 

集群常用命令及说明

 


 

3、集群优缺点

 

4、集群客户端命令(redis-cli.exe -c -p 7000)

集群
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
(slot)
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。

cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键  

 

 

桌面可视化工具

https://redisdesktop.com/download


参考了挺多,有点乱,不过慢慢看都能看懂

原创粉丝点击