当前位置: 首页 > article >正文

redis集群创建问题处理

一.TCP 积压设置问题和处理内存超配警告

3432:C 17 Sep 2024 16:50:39.537 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3432:C 17 Sep 2024 16:50:39.537 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=3432, just started
3432:C 17 Sep 2024 16:50:39.537 # Configuration loaded
3432:M 17 Sep 2024 16:50:39.538 * Increased maximum number of open files to 10032 (it was originally set to 1024).
3432:M 17 Sep 2024 16:50:39.538 * monotonic clock: POSIX clock_gettime
3432:M 17 Sep 2024 16:50:39.539 * Node configuration loaded, I'm 5b5974b1f5996d406147f7f6dd6e921a3281823c
3432:M 17 Sep 2024 16:50:39.540 * Running mode=cluster, port=7001.
3432:M 17 Sep 2024 16:50:39.540 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3432:M 17 Sep 2024 16:50:39.540 # Server initialized
3432:M 17 Sep 2024 16:50:39.540 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3432:M 17 Sep 2024 16:50:39.540 * Reading RDB base file on AOF loading...
3432:M 17 Sep 2024 16:50:39.540 * Loading RDB produced by version 7.0.11
3432:M 17 Sep 2024 16:50:39.540 * RDB age 1360517 seconds
3432:M 17 Sep 2024 16:50:39.540 * RDB memory usage when created 1.51 Mb
3432:M 17 Sep 2024 16:50:39.540 * RDB is base AOF
3432:M 17 Sep 2024 16:50:39.540 * Done loading RDB, keys loaded: 0, keys expired: 0.
3432:M 17 Sep 2024 16:50:39.540 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
3432:M 17 Sep 2024 16:50:39.540 * DB loaded from append only file: 0.000 seconds
3432:M 17 Sep 2024 16:50:39.540 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
3432:M 17 Sep 2024 16:50:39.540 * Ready to accept connections
3432:M 17 Sep 2024 16:51:18.123 # Discarding UPDATE message about myself.
3432:M 17 Sep 2024 16:51:18.128 # Discarding UPDATE message about myself.

1.“WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.” 提示 TCP 积压设置无法生效,因为系统参数 /proc/sys/net/core/somaxconn 的值较低。

1.处理 TCP 积压设置问题
  • 这个参数定义了系统中每一个端口最大的监听队列长度。默认值通常为 128。
  • 如果 Redis 的 TCP 积压设置(在日志中为 511)高于这个值,就会出现日志中的警告,导致无法强制执行设置的积压值。
  • 临时调整:可以使用以下命令立即将该参数的值调整为一个较大的数
    sysctl -w net.core.somaxconn=1024
  • 永久调整:要使这个设置在系统重启后仍然生效,可以编辑 /etc/sysctl.conf 文件,添加或修改以下行:
net.core.somaxconn = 1024

保存文件后,使用以下命令使更改生效

sysctl -p

2.“WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.” 提醒内存超配必须启用,否则在低内存情况下可能会导致后台保存或复制失败,并给出了解决方法,即修改 /etc/sysctl.conf 文件并设置 vm.overcommit_memory = 1,或者使用命令 sysctl vm.overcommit_memory=1

2.处理内存超配警告
  • 理解内存超配的重要性:

    • Redis 在进行后台保存(如生成 RDB 文件)或复制(主从复制)操作时,如果内存不足,可能会导致这些操作失败。
    • 启用内存超配可以让 Redis 在一定程度上使用超过系统实际物理内存的空间,但这也可能带来系统不稳定的风险,需要谨慎使用。
  • 启用内存超配的方法:

    • 按照日志中的建议,编辑 /etc/sysctl.conf 文件,添加以下行:
vm.overcommit_memory = 1
保存文件后,使用以下命令使更改生效:
sysctl -p

这上述两个问题,还是建议服务器的硬件性能提升,这样对服务器稳定性更有保障。这边主要是虚拟机创建,服务器性能不是很好会导致这个情况。

二.创建集群失败

192.168.11.115:7001>      CLUSTER INFO
cluster_state:fail
cluster_slots_assigned:5461
cluster_slots_ok:5461
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:1
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:15521
cluster_stats_messages_pong_sent:14791
cluster_stats_messages_sent:30312
cluster_stats_messages_ping_received:14789
cluster_stats_messages_pong_received:15521
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:30312
total_cluster_links_buffer_limit_exceeded:0

这个输出显示了 Redis 集群的状态信息,目前集群处于 “fail”(失败)状态。以下是对各个字段的解释和可能的问题分析及解决方法:

1.字段解释
cluster_state:fail:表示当前集群的整体状态为失败。
cluster_slots_assigned:5461:表示已经分配的哈希槽数量为 5461。正常情况下应该是 16384。
cluster_slots_ok:5461:表示正常的哈希槽数量为 5461。
cluster_slots_pfail:0:表示处于可能失败状态的哈希槽数量为 0。
cluster_slots_fail:0:表示已经确定失败的哈希槽数量为 0。
cluster_known_nodes:3:表示集群中已知的节点数量为 3,这与预期相符。
cluster_size:1:表示当前有效的集群规模为 1,说明只有一个节点在正常工作。
cluster_current_epoch:3:当前集群的纪元值。
cluster_my_epoch:1:本节点的纪元值。
cluster_stats_messages_ping_sent等:表示发送和接收的各种集群消息的统计数量。
  • 检查节点状态:

    • 确认其他两个节点是否正常运行。可以通过查看节点的日志文件或者使用 ps -ef | grep redis 命令来检查 Redis 进程是否在运行。
    • 如果节点没有运行,尝试重新启动它们。
  • 网络连接问题:

    • 确保节点之间的网络连接正常。可以使用 ping 命令检查节点之间的网络连通性。
    • 检查防火墙设置,确保 Redis 端口(通常是 7001、7002 等)没有被阻止。
  • 配置问题:

    • 检查每个节点的配置文件,确保配置正确,特别是 IP 地址、端口号、集群配置参数等。
    • 确认节点的 cluster-config-file 参数指定的集群配置文件是否存在且可读写。
  • 清理旧的集群信息:

    • 如果之前尝试创建集群失败,可能会留下一些旧的集群信息。尝试停止所有节点,删除节点的数据目录(通常在配置文件中指定)下的所有文件,然后重新启动节点并创建集群。
  • 检查日志文件:         

    • 仔细查看每个节点的日志文件,查找可能的错误信息或警告。这些信息可能会提供更多关于集群失败的线索。

  • 检查集群配置文件

  • 确认每个节点的配置文件中关于集群的设置是否正确。重点检查以下参数:
    • cluster-enabled:确保该参数设置为yes,以启用集群模式。
    • cluster-node-timeout:这个参数设置了节点不可达的超时时间,确保它的值在合理范围内。
2.重新创建集群
  • 如果以上检查都没有发现问题,可以尝试重新创建集群。在重新创建之前,确保所有节点都已停止,并且清理掉可能残留的旧集群配置文件和数据。
    • 停止所有节点的 Redis 服务。
    • 删除每个节点的数据目录下的所有文件(通常是在配置文件中指定的dir参数对应的目录)。
    • 使用redis-cli --cluster create命令重新创建集群,确保输入的节点信息准确无误。

http://www.kler.cn/news/312100.html

相关文章:

  • 408算法题leetcode--第六天
  • 【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频
  • Elasticsearch:一次生产集群 ES Watcher 失效的深度排查与分析 - 全过程剖析与解决方案
  • 【面试八股总结】GMP模型
  • IP-adapter masking
  • 高频旋转滑环的特点与应用分析
  • 前端大屏自适应方案
  • POI操作EXCEL增加下拉框
  • 《线性代数》常用公式定理总结
  • 第十一章 【后端】商品分类管理微服务(11.5)——增强响应
  • JavaScript网页设计案例(动态表单、实时搜索、交互式地图、无限滚动加载等)
  • 【qt】一个WPS项目了解qt界面设计的基本套路
  • 基于SpringBoot+Vue的私人牙科诊所管理系统
  • 从0书写一个softmax分类 李沐pytorch实战
  • 《深入了解 Linux 操作系统》
  • Scrapy爬虫框架 Pipeline 数据传输管道
  • K8S容器实例Pod安装curl-vim-telnet工具
  • 人工智能在鼻咽癌中的应用综述|文献精析·24-09-13
  • Python中使用Redis布隆过滤器
  • 苹果为什么不做折叠屏手机?
  • 2024蓝桥杯省B好题分析
  • vulnhub靶机:Holynix: v1
  • GO CronGin
  • 【Flask教程】 flask安装简明教程
  • Visual Studio配置opencv环境
  • Web Worker 简单使用
  • 2024永久激活版 Studio One 6 Pro for mac 音乐创作编辑软件 完美兼容
  • 基于STM32设计的路灯故障定位系统(微信小程序)(229)
  • flink自定义process,使用状态求历史总和(scala)
  • spring boot启动报错:so that it conforms to the canonical names requirements