1

所以我正在测试redis集群。我有一个有 3 个主机和 3 个从机的设置。现在,如果一个节点面临硬故障(主节点和从节点都出现故障),集群仍然可以正常工作,除非故障节点服务的哈希槽。现在,在测试这样的场景时,我看到对这些哈希槽服务的键进行的读/写操作失败并出现异常,这很好(我正在使用 jedis 顺便说一句)。但是,如果我使用 redis 集群作为缓存,我希望这些哈希槽由其他节点提供服务。该实用程序中似乎不存在此功能redis-trib

我无法重新分片集群以移动这些哈希槽,./redis-trib.rb reshard因为[ERR] Not all #{ClusterHashSlots} slots are covered by nodes.. 我也无法从集群中删除节点,因为./redis-trib.rb del-node失败了[ERR] Node #{node} is not empty! Reshard data away and try again.。那么,最好的方法是什么,以处理我无法启动我的原始节点但希望那些哈希槽由其他节点提供服务的场景(假设我什至可以在旧节点上丢失数据)?理想情况下,例如能够删除该节点(集群中的主节点和从节点,并将这些哈希槽分配给其他节点)。

4

1 回答 1

1

它通过将故障节点服务的所有插槽添加到某些可连接节点来修复集群。方法是使用cluster addslots命令,但是手动操作当然有些困难,所以我建议使用我们团队开发的这个工具。

用法(在外壳中):

# it requires Python2.7; install it via pip
pip install redis-trib

# suppose one of the accessible nodes is serving at 172.0.0.1:7000
# start a cluster-mode Redis that is not involved in any cluster
# suppose its address is 172.0.0.5:8000
redis-trib.py rescue --existing-addr 172.0.0.1:7000 --new-addr 172.0.0.5:8000

之后,新节点将为所有失败的插槽提供服务,以便集群状态变为正常。

于 2016-06-12T01:57:52.647 回答