笔者今天kill掉全部cluster的全部从节点,原本是想试试读写分离的,但Kill掉之后重启之后却无法主从

redis cli重启命令 redis cluster重启_分布式


可以看到,只有主节点在运行,于是笔者进入到redis中 输入命令 cluster nodes 后出现以下的信息

redis cli重启命令 redis cluster重启_redis_02


cluster nodes显示的每一行信息,由下面的字段组成。

《id》《ip:port》《flags》《master》《ping-sent》《pong-recv》《config-epoch》《link-state》《slot》《slot》《slot》

每个字段的含义如下

  1. id: 节点ID,一个40字节的随机字符串,节点创建时生成,且不会变化(除非使用CLUSTER RESET HARD命令)。
  2. ip:port: 客户端访问的地址。
  3. flags: 逗号分隔的标记位,可能值有:myself, master, slave, fail?, fail, handshake, noaddr, noflags。
  4. master: 若是已知master节点的slave,这里出现的是master的节点ID,否则是"-"。
  5. ping-sent: 最近一次发送ping的unix毫秒时间戳,0代表没有发送过。
  6. pong-recv: 最近一次收到pong的unix毫秒时间戳。
  7. config-epoch: 该节点或其master节点的epoch值。每次故障转移都会生成一个新的,唯一的,递增的epoch值。若多个节点竞争相同的slot,epoch值大的获胜。
  8. link-state: 节点和集群总线间的连接状态,可以是connected或disconnected。
  9. slot: 该节点负责的slot。

flags字段各标记含义如下:

myself: 当前连接的节点。

master: 节点是master。

slave: 节点是slave。

fail?: 节点处于pfail状态,当前节点无法和其联系,但其它节点可以。

fail: 节点处于fail状态,大多数节点都无法和其联系,将其由pfail升级到fail状态。

handshake: 还没完全加入集群,正在握手阶段。

noaddr: 不知道节点地址。

noflags: 没有任何标记。

根据noaddr的含义,可知有此标记的节点属于无用节点,而笔者通过新增子节点依然无效,最后尝试

ps -aux|grep redis
pkill -9 redis

注意,这里不能kill -9 进程号,需要全部的redis都Kill 掉并且重新启动

/usr/local/redis/bin/redis-server  redis.conf

启动时可以会出现无法启动的问题,我们需要清除掉dump.rdb 文件

最后重启成功