您的位置:首页 > 数据库 > Redis

redis cluster 管理!

2015-11-03 15:57 513 查看
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2)什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态.

b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

1.1、redis cluster增加节点

随着业务的增长,有一天你发现现在的redis集群规模已不能满足业务需求了,你得向集群中增加节点来扩展redis cluster的处理能力。向一个redis cluster增加节点也是一件愉快的事情,当然首先你得准备好一个空的redis实例,就像我下边一样我先准备好了一个“redis7006”实例:

配置文件的修改就是修改一端口号、pid文件后缀、日志文件后缀这些信息,这里就不再给出。

接着把新的实例启动起来:

新的实例准备好了,接下就把此实例增加到集群中吧,它增加到集群中是担任master,还是担任slave呢?这都是可用参数来控制的,默认不指定时是作为master。增加节点的命令如下:

第一个IP:PORT是指新实例的ip地址和端口号,第二个IP:PORT是指现有集群中的任意一个节点的ip地址和端口,是master可以,是slave也可以。如果增加的节点是做salve,那命令如下:

第一个IP:PORT是指新实例的ip地址和端口号,第二个IP:PORT是指集群中任意一个节点的ip地址和端口,采用这样的方式增加的slave节点我们并不能控制他是哪个节点的从,如果要想指定加入的节点是哪个节点的从节点,那如下命令:

不再解释上边命令了,也是很好理解的。

掌握了增加节点的命令,那就把redis7006这个实例加入到现有集群中,如下操作:

成功把节点加入到集群后再来检查一下集群状态:

从上边的输出中可知redis7006已是一个master节点,但此时此节点不存放任何数据,因为它没有被分配hash slot,所以想让此节点真正的工作起来,你还得做一个切分操作,把在其他节点上的hash slot转移一部份到新增的节点上来,这个操作也是通过redis-trib.rb工具来完成的,具体用法如下:

采用reshard参数表示重新切分,后边的IP:PORT是集群中任意一个节点的ip地址和端口,redis-trib.rb工具会自动寻找集群中的其他节点。

现在我们就来把7004上的2000个slot转移到7006上,如下操作:

移动完成后再查看一下集群状态,如下:

至此,新节点已增加到集群并能正常工作。

1.2、redis cluster删除节点

有增加节点的操作,当然也会有删除一个节点,当业务量下降后,集群中redis节点数量服务能力大大超过了业务所带来的压力,此时我们应该移除一些节点,回收主机资源,以免造成资源的浪费。

移除一个节点用如下命令:

IP:PORT表示集群中任意一个节点的ip地址和端口,node-id表示你想要移除的节点ID号

接下来就测试一下删除一个节点的操作,我们计划把7004这个节点删除,那运行如下命令:

上边报错了,说是这个节点不是空的,需要重新切片后再尝试,这是因为在这个节点上还有2000-5460的slot,需要把这些slot移走后才能删除此节点,我们就把7004上的所有slot移到7006后再来删除此节点试试:

#上边的命令是一种非交互模块下的数据迁移命令,用“--from...--to”的结构表示从哪个节点把数据迁移到哪个节点,官方命令格式是“./redis-trib.rb reshard <host>:<port> --from <node-id> --to <node-id> --slots --yes”这样的,但在实际运用时发现“<host>:<port>”需要写在最后,这个是表示集群中任意一个节点的ip地址和端口信息。

运行上表命令并等待一会儿后,数据就迁移完毕,再来观察一下集群中7004节点的状态信息:

看见了吧,上边输出信息中7004已没有slot了,现在再来移除此节点试试:

移除成功了,移除后还会重新计算集群中的主从关系,并把移除的节点shutdown,这里就把7000作为7006的从节点了,再来查看集群状态就是这样了:

1.3、redis cluster主从手动切换

也许在一些特殊的场景你需要切换集群中主从节点,比如你想让一个主节点下线升级维护时,当然你可简单粗爆的把这个主节点shutdown,然后redis cluster会监测到集群中少了一个主节点,集群就会把他的从节点提升为主节点,然后你再把shutdown的节点启动,那他会成为一个从节点运行,这样你就可以做你想做的了。但这样粗爆的行为是会导致集群短暂的停止服务,有一个切换的时间,如果是一个可控的维护工作,我们还是希望更为平滑,那集群中手动切换工具就能满足我们的需求。

我们先连接到集群中,查看一下集群状态信息,如下:

接下来就进行手动切换操作,把7002与7003的主从关系调换:

在上边的主从切换测试中几乎是瞬间完成,这样业务是不受到影响的。值得注意的是“cluster failover”命令只能在slave节点上运行.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: