生产上的redis使用一段使用后,数据量很大,redis的内存不足,需要扩容机器的内存。

教训1:这个扩容一定要尽早去做。在机器剩余内存在500M左右去做。我是剩余100M的时候做的迁移,就很有问题。我是先用bgsave保存下数据。发现机器的的内存直接使用99%,swap也被快用完了,备份的速度极其的慢。4百万的数据,dump.rdb的文件有2.7G大小。备份了7个小时,读写极其慢,而且这个时候redis机器还做了主从切换,数据完全同步不了,在从库上看主从状态是down的状态。
教训2:备份是检测机器的基础配置,备份完查看备份文件。我当时直接跑指令,看命令行也是成功的,但是没有检查备份的文件和日志。我扩容好了之后重启服务发现数据没有了,我再去看文件发现是空的,没有备份成功。还好是集群,我从其他的机器把这个文件拿过来,启动就好了

主要系统的文件打开数:

[root@redis1-roster ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63456
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63456
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

我在执行bgsave时日志报:

3852:S 14 Aug 2020 21:36:10.676 * Background saving started by pid 3890
3890:C 14 Aug 2020 21:36:10.691 * DB saved on disk
10694:S 14 Aug 21:07:23.100 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
10694:S 14 Aug 21:07:23.100 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.

这个显示已经开启保存,但是文件打开数不够,需要增加文件打开数。我当时没有看到,然后最后看到的情况就是:

redis cluster 扩容 redis缓存扩容_redis cluster 扩容


dump.rdb 是空的。我从其他节点的机器cp过来这个文件,在启动下:

redis cluster 扩容 redis缓存扩容_redis_02


数据量对的,正常。

但是因为主库正在备份,但是没有内存,同步不了,主从状态异常。

redis cluster 扩容 redis缓存扩容_redis cluster 扩容_03


master_link_status状态是down的,获取不到。只有等主节点保存完毕,然后扩容完成。再去启动查看状态。

slave状态正常的。

redis cluster 扩容 redis缓存扩容_Server_04