redis集群创建问题处理

news/2024/9/19 22:16:36 标签: 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.niftyadmin.cn/n/5666214.html

相关文章

【论文阅读】Benchmarking Retrieval-Augmented Generation for Medicine

论文:https://arxiv.org/abs/2402.13178 代码: GitHub - Teddy-XiongGZ/MIRAGE: Official repository of the MIRAGE benchmark GitHub - Teddy-XiongGZ/MedRAG: Code for the MedRAG toolkit 研究背景: 系统地评估医用rag QA系统&#xff0…

Mac使用技巧-来自苹果专人在线辅导服务

好记性不如烂笔头 跟着技术人员从头到尾操作了一遍,发现应该跟人家学习的时候,是很容易接受并接收知识点的,但发现还是要做一下笔记,好记性不如烂笔头。 用来用去,感觉Mac更适合不搭配鼠标使用,因为鼠标的滑…

整整3W字笔记,Redis最核心的秒杀业务、分布式锁、消息队列相关原理一篇文章就搞定(黑马点评项目)

目录 四、 优惠卷秒杀系列功能实现 4.1 全局ID生成器 4.1.1 全局ID生成器的选型 4.1.2 全局ID生成器的实现 4.1.3 全局ID生成器的测试 4.1.4 其他ID生成器的拓展 4.2 利用PostMan模拟管理员后台添加秒杀优惠卷信息 【代码实现】 【PostMan测试】 4.3 优惠卷秒杀下单功能…

算法——贡献法

前天的AtCoder Beginner Contest 371 D题碰到了这个贡献法,刚好之前的第十一届蓝桥杯省赛第二场真题AcWing 2868. 子串分值也是用的这个方法hh,但是赛时没有搞出来。。。 AcWing 2868. 子串分值 对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中…

Linux服务器上下左右键乱码^[[D ^[[C ^[[A ^[[B

查看shell环境: echo $SHELL如果出现 bin/sh, 那么输入: bash学术会议征稿 想要了解国内主办的覆盖学科最全最广的学术会议,请前往【会议官网】: 学术会议官网www.ais.cn

01_快速入门

读取数据 import pandas as pd# df pd.read_excel(https://xxxx/xxx//xx.xslx) # 读取网络数据 # df pd.read_excel(rd:\data\xx.xslx) # 读取本地文件 # 如果是csv文件,用read_csv()函数 df pd.read_csv(seaborn/iris.csv)查看数据 df.head() # 前5条记录 d…

MiniDB 使用手册

MiniDB 使用手册 核心功能指南表的创建与管理数据操作事务管理 本使用文档旨在帮助用户快速上手使用本数据库系统。 进行数据库操作之间必须输入init命令进行初始化 核心功能指南 表的创建与管理 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR …

【Elasticsearch系列七】索引 crud

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…