上一篇文章,咱们搭建了Redis-cluster集群,这篇博客跟你们讲一下如何在一个运行的集群上增长节点或者删除节点。node
首先咱们要新创建一个节点,将redis01 复制一份改成redis07,而后修改端口号也改成7007 ,而后咱们执行[root@localhost redis07]# ./redis-server redis.conf 启动之后,而后进行查看,发现有一个端口号为7007的redis实例已经启动了!咱们怎么把这个redis 实例添加到集群中呢。web
在将7007 端口号的redis实例添加到集群以前,必定要确保这个redis实例没有存储过数据,也不能持久化的数据文件,不然在添加的时候会报错的!咱们执行命令 ./redis-trib add-node127.0.0.1:7007 to cluster 127.0.0.1:7001 (若是这句命令有误,能够用这个: ./redis-trib add-node127.0.0.1:7007 127.0.0.1:7001)就能够将端口号为7007的实例添加到redis-cluster中。以下如所示。redis
咱们执行在任意一个客户端下执行 cluster nodes 命令,能够看到7007 已经做为主节点添加到咱们的集群中了,可是能够看到他没有分配哈希槽,没有分配哈希槽的话表示就没有存储数据的能力,因此咱们须要将其余节点上的哈希槽分配到这个节点上。缓存
下边咱们看一下如何分配哈希槽。咱们随便进入一个客户端,而后咱们执行 ./redis-trib.rb reshard 192.168.20.140:7001, 就能够看到以下图所示提示,问咱们须要移动多少个哈希槽,咱们在这里移动1000个。架构
完之后,又会问咱们须要覆盖的节点id是什么,这个id就是咱们新建立的节点id。而后让咱们输入源节点,若是这里咱们输入all的话,他会随机的从全部的节点中抽取1000个做为新节点的哈希槽。性能
咱们输入all之后,会出下下图所示东西,表示hash槽正在移动。spa
移动完之后,咱们进入客户端,执行cluster nodes 命令,查看集群节点的状态,咱们会看到原来没有哈希槽的7007节点,分配到了1000个哈希槽,并且是不连续的。说明是从原来的三个节点中抽取的。.net
这样咱们一个新的节点就添加好了, 可是咱们发现总共是7个节点,其中的六个互为住备,但有一个是有主,没有备,因此咱们须要在为该节点添加一个备份节点。咱们在建立一个实例,端口号为7008,启动之后咱们只命令./redis-trib.rb add-node --slave127.0.0.1:7008 127.0.0.1:7007 ,第一个实例127.0.0.1:7008为备份节点,第二个实例127.0.0.1:7007为主节点。而后咱们在执行,cluster nodes 命令,就会发现新添加的节点已经做为7007 备份节点开始工做了!orm
删除节点也分两种,一种是主节点,一种是从节点。在从节点中,咱们没有分配哈希槽,因此删除很简单,咱们直接执行./redis-trib.rb del-node 127.0.0.1:700865ee465423c925326a5137668541151b4c37d2d9 有两个参数ip:port 和节点的id。 咱们就能够将从节点从集群中删除了。server
而在删除主节点的时候,由于在主节点中存放着数据,因此咱们在删除以前,要把这些数据迁移走,而且把该节点上的哈希槽分配到其余主节点上。
咱们执行./redis-trib.rb reshard 127.0.0.1:7007,问咱们有多少个哈希槽要移走,由于咱们这个节点上有1000 个因此咱们这里输入1000,以下如所示。
这样期间会询问咱们是否要重新分配,咱们输入yes。而后就看到7007上的全部节点都被移动到了7001.这样咱们就操做完了。而后再执行./redis-trib.rb del-node127.0.0.1:7007 61f786c40bcc170006a440abd7dc773e6dd15a19 ,就会看到7007 端口的实例也被从集群中移除了。
咱们进入客户端,看一下集群节点的状况。会看到7007 节点和7008 节点就都被咱们移除集群了!
这篇博客为你们说了集群节点的维护,下一篇文章给你们说一下在程序中咱们如何使用redis集群。