Redis中redis

56次阅读
没有评论

共计 3695 个字符,预计需要花费 10 分钟才能阅读完成。

本篇内容主要讲解“Redis 中 redis-cluster 需要注意哪些地方”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Redis 中 redis-cluster 需要注意哪些地方”吧!

1. 收到 150 告警,rdb 持久化失败

15011:M 17 Sep 08:54:43.037 # Can t save in background: fork: Cannot allocate memory
15011:M 17 Sep 08:54:49.043 * 1 changes in 900 seconds. Saving...
15011:M 17 Sep 08:54:49.043 # Can t save in background: fork: Cannot allocate memory

2 查看主机内存(内心 os:尼玛还有这么多内存呢)

[root@ip-172-31-43-150 ~]# free -g
 total used free shared buff/cache available
Mem: 29 14 10 0 4 14
Swap: 0 0 0

3 查看 redis-cluster 集群状态,显示 150 已 down 机,心慌慌

[root@ip-172-31-39-42 ~]# /usr/local/src/redis-4.0.8/src/redis-trib.rb check 172.31.39.42:6379
[ERR] Sorry, can t connect to node 172.31.43.150:6379
*** WARNING: 172.31.39.54:6379 claims to be slave of unknown node ID 6d2b67b9745a8d4bedb70d480645e3651fddaf3f.
  Performing Cluster Check (using node 172.31.39.42:6379)
M: 00f7bd511046438af2d1b41666a69ff77b6f176f 172.31.39.42:6379
 slots:11258-11832,13655-16383 (3304 slots) master
 1 additional replica(s)
S: e771e70f580ec2799af50268865444cf425e000e 172.31.33.17:6379
 slots: (0 slots) slave
 replicates 00f7bd511046438af2d1b41666a69ff77b6f176f
S: 8bb99c5b9585269b66684400f036fca1d30e72cb 172.31.47.157:6379
 slots: (0 slots) slave
 replicates 148697f75e9b4f84ad893f4d5377e96fdde7664d
M: 148697f75e9b4f84ad893f4d5377e96fdde7664d 172.31.34.25:6379
 slots:28,4799-5462,6375-7282,8194-9106,11833-12744 (3398 slots) master
 1 additional replica(s)
M: 40b766b505c54066de5b5d8eb214ea78c7df8c4b 172.31.36.10:6379
 slots:7542-8193,9107-10922,12745-13654 (3378 slots) master
 1 additional replica(s)
S: f6a625cc2d6fb66d267b15c8d668ea150be262bc 172.31.37.68:6379
 slots: (0 slots) slave
 replicates 792ab7473fa447d07582817eb2f489633001d831
M: 792ab7473fa447d07582817eb2f489633001d831 172.31.33.182:6379
 slots:0-27,29-1145,1822-2105,3406-4798,7283-7541 (3081 slots) master
 1 additional replica(s)
S: 92a5541964fc3e4bfb90f1750b9105d5705beb93 172.31.39.54:6379
 slots: (0 slots) slave
 replicates 6d2b67b9745a8d4bedb70d480645e3651fddaf3f
S: 7e5e1e341f33ebd7a3c20480b66a76bbd0922a4f 172.31.32.254:6379
 slots: (0 slots) slave
 replicates 40b766b505c54066de5b5d8eb214ea78c7df8c4b
[OK] All nodes agree about slots configuration.
  Check for open slots...
  Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

登上 150 检查 redis 的状态,发现好好的!

先解决持久化失败的问题:

1.
172.31.39.54:6379  config set stop-writes-on-bgsave-error no --- 解决应用端抛异常的问题
172.31.39.54:6379  config rewrite
172.31.39.54:6379  
2. 开启内核参数,解决 bgsave 失败的问题
[root@ip-172-31-33-182 ~]# sudo echo  vm.overcommit_memory = 1    /etc/sysctl.conf
[root@ip-172-31-33-182 ~]# sysctl -p
vm.overcommit_memory = 1

再次查看日志,已经持久化成功,check 集群也发现集群恢复正常

关于 redis 的内存分配学习:

Redis 有自己的内存分配器,当 key-value 对象被移除时,Redis 不会马上向操作系统释放其占用内存(例如,当用户往一个实例填充了 5G 的数据,移除其中 2G 数据,但占用内存可能仍会保持在 5G 左右)。为什么 Redis 要这样处理?有两个原因:1、OS 可能会将释放内存交换到 VM,但 OS 的 VM 又是物理文件,其 IO 读写效率较低,从而影响 Redis 性能表现;2、OS 的 VM 换入换出是基于 Page 机制,同一 Page 内的部分数据对象被释放,但其他数据对象依然被其他应用使用中,导致在该 Page 内的 Redis 对象没有被释放。而 Redis 作者应该是考虑到以上问题,不希望 Redis 由此降低性能,所以在设计上 Redis 更倾向于自己掌控 VM 换入的粒度。(https://segmentfault.com/a/1190000004708270)

持久化的问题

Redis 持久化磁盘 IO 方式及其带来的问题
有 Redis 线上运维经验的人会发现 Redis 在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的问题,有人认为是基于快照方式持久化的 fork 系统调用造成内存占用加倍而导致的,这种观点是不准确的,因为 fork  调用的 copy-on-write 机制是基于操作系统页这个单位的,也就是只有有写入的脏页会被复制,但是一般你的系统不会在短时间内所有的页都发生了写入而导致复制,那么是什么原因导致 Redis 崩溃的呢?答案是 Redis 的持久化使用了 Buffer IO 造成的,所谓 Buffer IO 是指 Redis 对持久化文件的写入和读取操作都会使用物理内存的 Page Cache, 而大多数数据库系统会使用 Direct IO 来绕过这层 Page Cache 并自行维护一个数据的 Cache,而当 Redis 的持久化文件过大 (尤其是快照文件),并对其进行读写时,磁盘文件中的数据都会被加载到物理内存中作为操作系统对该文件的一层 Cache, 而这层 Cache 的数据与 Redis 内存中管理的数据实际是重复存储的,虽然内核在物理内存紧张时会做 Page Cache 的剔除工作,但内核很可能认为某块 Page Cache 更重要,而让你的进程开始 Swap , 这时你的系统就会开始出现不稳定或者崩溃了。我们的经验是当你的 Redis 物理内存使用超过内存总容量的 3 / 5 时就会开始比较危险了。

到此,相信大家对“Redis 中 redis-cluster 需要注意哪些地方”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计3695字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)