Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis集群删除后重建后报错

Redis集群删除后重建后报错:unrecoverable erro:corrupted cluster config file问题及解决

作者:莫叫石榴姐

这篇文章主要介绍了Redis集群删除后重建后报错:unrecoverable erro:corrupted cluster config file问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

现象

redis某节点出现宕机,删除后重新部署出现如下问题:

unrecoverable erro:corrupted cluster config file

原因分析

/var/lib/redis/nodes.conf,频繁重启虚机的过程中文件破坏,信息不完整或数据不一致造成。

解决方案

步骤1:数据平台中停止Redis服务

步骤2:删除Redis。

步骤3:删除每个节点上的dump.rdb文件和nodes.conf文件

删除方法:

利用xcall.sh脚本删掉 /var/lib/redis/下的 nodes.conf及dump.rdb文件。(xcall.sh已编写放在了系统/usr/local/bin下)

xcall.sh 'rm -rf /var/lib/redis/nodes.conf'
xcall.sh 'rm -rf /var/lib/redis/dump.rdb'

xcall.sh 脚本如下:

#!/bin/bash

# for循环
for((i=1; i<=7; i++)) ; do
    # 更改文本颜色
    tput setaf 2
    # 输出以下文本
    echo ==================== bg-$i $@ ===================
    # 更改文本颜色
    tput setaf 9
    # ssh 远程登陆主机 bg-$i ,执行输入的参数的命令
    ssh bg-$i $@
done

步骤4:平台管理组件库和版本中找到Redis添加redis服务。(或重新部署redis服务)

步骤5:重启Redis,查看Redis节点中是否有挂掉的节点。如果启动过程中有某个节点启动失败,执行步骤8.

如下图所示:

步骤6:通过命令创建Redis集群

/usr/idp/current/redis-server/bin/redis-trib.rb create --replicas 1 10.1.3.13:6379 10.1.3.14:6379 10.1.3.15:6379 10.1.3.16:6379 10.1.3.17:6379 10.1.3.18:6379。

执行结果样例如下:

步骤7:验证集群是否安装成功

cd /usr/idp/current/redis-server/bin
./redis-cli -c -h bigdata-1 -p 6379

输入:cluster nodes

bigdata-1:6379> cluster nodes

执行结果样例如下:

都是connected说明集群中redis机器连接没有问题。

测试命令:

bigdata-1:6379> set hello world

ssh bigdata-2
cd /usr/idp/current/redis-server/bin
./redis-cli -c -h bigdata-2 -p 6379
bigdata-2:6379> get hello

样例结果如下:

如果命令出现ERROR情况则,使用redis-trib命令来检查集群

redis-trib.rb check ip:port

如:

./redis-trib.rb check 10.92.11.11:6379

步骤8:

redis节点启动失败

现象:

metrics_pid = int(sudo.read_file(redis_metrics_pid_file))
ValueError: invalid literal for int() with base 10: '8654\n11593\n19745\n8626\n15793\n24954\n30154\n'

解决:

比如bigdata-6节点损坏了,登录到bigdata-6节点上:

cd /var/run/redis
[root@ bigdata-6 redis]# cat redis_metrics.pid

只保留第一行的pid

kill -9 11593 19745 8626 15793 24954 30154
vi redis_metrics.pid

删除多余的pid信息。如:11593 19745 8626 15793 24954 30154

保存退出。

步骤9:

原因:这个往往是由于主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 check 172.168.63.202:7000

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

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

步骤10:

其他节点之前执行过cluster reset,重新握手一次

bg-1:6379> cluster meet 10.92.11.12 6379
bg-1:6379> cluster meet 10.92.11.13 6379
bg-1:6379> cluster meet 10.92.11.14 6379
bg-1:6379> cluster meet 10.92.11.15 6379
bg-1:6379> cluster meet 10.92.11.16 6379

再次检查一下损坏节点的信息

/usr/idp/current/redis-server/bin/ redis-trib.rb check 10.92.11.11:6379

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文