生产上的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.
这个显示已经开启保存,但是文件打开数不够,需要增加文件打开数。我当时没有看到,然后最后看到的情况就是:
dump.rdb 是空的。我从其他节点的机器cp过来这个文件,在启动下:
数据量对的,正常。
但是因为主库正在备份,但是没有内存,同步不了,主从状态异常。
master_link_status状态是down的,获取不到。只有等主节点保存完毕,然后扩容完成。再去启动查看状态。
slave状态正常的。