redis报错总结

本文总结了在Redis集群操作中遇到的错误,包括'Node is not empty'和'Not all 16384 slots are covered by nodes'。解决方法包括清理节点数据、删除集群配置文件及使用`redis-trib.rb`工具进行修复和重新分配slots。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 undefined reference to `clock_gettime' 链接错误的解决办法
安装redis时,编译文件 make 该redis文件夹出现此错误,clock_gettime在实时库librt(real time)里面,由于链接的时候没有链接这个库导致报错。
解决思路:
只需在我们运行的Makefile文件里面添加动态链接库librt ( -lrt ) ,重新编译即可。 操作步骤:
(1)查找实时库librt所在路径:
命令
find / -name '*librt*'
/usr/lib/librt.so (需对应本机所在文件位置)
(2)打开 /home/wm/redis-3.2.7 路径下的Makefile文件:
vim /home/wm/redis-3.2.7/Makefile
(3)修改Makefile文件配置:
105 ifeq ($(MALLOC),jemalloc)  
106     DEPENDENCY_TARGETS+= jemalloc  
107     FINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include  
108     FINAL_LIBS+= ../deps/jemalloc/lib/libjemalloc.a  
109     FINAL_LIBS+=  /usr/lib/librt.so  #此路径加上librt.so#  
110 endif
(4)执行:wq命令保存退出,重新编译即可

 2、

[ERR] Node is not empty. Either the node already knows other nodes (check with C

[root@node00 src]# ./redis-trib.rb add-node --slave --master-id4f6424e47a2275d2b7696bfbf8588e8c4c3a5b95 172.168.63.202:7001172.168.63.202:7000

......

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

Connecting to node 172.168.63.202:7001: OK

[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.


解决方法:

1)、将需要新增的节点下aof、rdb等本地备份文件删除;

2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;

3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:

172.168.63.201:7001>  flushdb      #清空当前数据库

通过以上解决方法中的1)、2)或者3)之后再执行脚本,成功执行;


3、Not all 16384 slots are covered by nodes.

[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000


Connecting to node 172.168.63.202:7000: OK

Connecting to node 172.168.63.203:7000: OK

Connecting to node 172.168.63.201:7000: OK

>>> Performing Cluster Check(using node 172.168.63.202:7000)

M: 449de2d2a4b799ceb858501b5b78ab91504c72e0172.168.63.202:7000

  slots: (0 slots) master

   0additional replica(s)

M: db9d26b1d15889ad2950382f4f32639606f9a94b172.168.63.203:7000

  slots: (0 slots) master

   0additional replica(s)

M: f90924f71308eb434038fc8a5f481d3661324792172.168.63.201:7000

  slots: (0 slots) master

   0additional replica(s)

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[ERR] Not all 16384 slots are covered by nodes.


原因:

这个往往是由于主node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。以在删除节点的时候一定要注意删除的是否是Master主节点。

1)、官方是推荐使用redis-trib.rb fix 来修复集群…. ….  通过cluster nodes看到7001这个节点被干掉了… 那么

[root@node01 src]#  ./redis-trib.rb fix 172.168.63.201:7001


修复完成后再用check命令检查下是否正确

[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000

只要输入任意集群中节点即可,会自动检查所有相关节点。可以查看相应的输出看下是否是每个Master都有了slots,如果分布不均匀那可以使用下面的方式重新分配slot:

[root@node01 src]#  ./redis-trib.rb reshard 172.168.63.201:7001


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值