一次redis集群问题排查记录

简介

早上开发和我说,redis集群宕了,因为测试环境连接不上集群了,报错

Caused by: redis.clients.jedis.exceptions.JedisClusterException: CLUSTERDOWN The cluster is down

我说不可能,因为没有收到监控告警,登陆服务器之后节点进程都是好的,重启测试环境之后还是不能连接,于是开始排查问题

排查问题

这个集群是单机多进程的cluster集群,就是所有redis起在不同的端口上的伪集群,首先看下集群的监控状态

./redis-cli --cluster check 10.10.10.27:6379

有报错,报错忘记记录了,类似下面这样

CLUSTER cluster is down

Not all 16384 slots are covered by nodes.

于是备份dump.rdb

cp dump.rdb dump.rdb.bak

查看配置文件,发现所有的配置文件都指向了一个dump.rdb文件,这个明显是有问题的,所以修改redis的dir参数,把dump.rdb分开来

之后的操作

重启所有的配置,然后重新创建集群

./redis-cli --cluster create 10.10.10.27:4379 10.10.10.27:5379 10.10.10.27:6379 10.10.10.27:7379 10.10.10.27:8379 10.10.10.27:9379 --cluster-replicas 1

然后复制dump.rdb启动一个单机redis来读取这个文件

./redis-server --port 777

输入 keys *发现数据都还在,于是开始导出数据

安装redis-dump导出数据

首先安装rvm

\curl -sSL https://get.rvm.io | bash -s stable

安装完成之后安装ruby

修改源

echo "ruby_url=https://cache.ruby-china.org/pub/ruby" >> /usr/local/rvm/user/db

安装ruby

rvm install 2.4.0 --disable-binary

修改gem源

vim ~/.gemrc

1
2
3
4
5
6
7
8
9
---
:backtrace: false
:bulk_threshold: 1000
:sources: []
:update_sources: true
:verbose: true
:sources:
- https://gems.ruby-china.com
:ssl_verify_mode: 0

安装redis-dump

gem install redis-dump –V

导出数据

redis-dump -u 127.0.0.1:777 > redis_6378.json

导入数据

cat 6379.json | redis-load -u 10.10.10.27:6379

报错

MOVED 13596 10.10.10.27:5379

说明之前的数据都是往5379节点写入的,所以重新导入

cat 6379.json | redis-load -u 10.10.10.27:5379

登陆查看数据都在,之后查看集群的健康状态

./redis-cli --cluster check 10.10.10.27:6379

问题解决,最后,这个redis不是我搭建的

欢迎关注Bboysoul的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道