k8s

Redis Client Blocked告警

告警详情

file

file

file

排查

查看redis grafana面板,使用正常。

连接redis,查看连接。

redis-cli
auth xxx
client list

查找flags=b的连接,代表blocked。

id=69872312 addr=10.43.104.38:47190 laddr=10.43.166.181:6379 fd=34 name= age=1 idle=1 flags=b db=14 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=86 obl=0 oll=0 omem=0 tot-mem=20654 events=r cmd=xreadgroup user=default redir=-1

查看pod ip,确认是haproxy。

file

查看具体命令,首先查看慢日志中是否有记录,发现没有。那xreadgroup这个命令执行的很快。

slowlog get 200

开启monitor,注意,开启后会影响redis性能。

monitor
# XREADGROUP GROUP reportRemindGroup reportRemindConsumer BLOCK 1000 NOAACK STREAMS reportMind >

file

xreadgroup命令

xreadgroup命令是Redis Streams模块中的一个命令,用于从一个或多个流中读取消息,并将消息作为消费者组的一部分进行处理。该命令的基本语法如下:

XREADGROUP GROUP group_name consumer_name COUNT count STREAMS stream_1 [start_id] stream_2 [start_id] ... stream_n [start_id]
  • GROUP group_name consumer_name:指定消费者组的名称和消费者的名称;
  • COUNT count:每次读取的最大消息数;
  • STREAMS stream_1 [start_id] stream_2 [start_id] … stream_n [start_id]:指定要读取的流及其起始ID。

首先,需要通过xgroup create命令创建消费者组,例如:

XGROUP CREATE my_stream_group my_stream 0

上述命令将创建一个名为my_stream_group的消费者组,并将其注册到my_stream流上,0表示从流中第一个未被消费的消息开始消费。

接着,使用xreadgroup命令从流中读取消息,例如:

XREADGROUP GROUP my_stream_group my_consumer COUNT 10 STREAMS my_stream >

上述命令将从已注册到my_stream流上的my_stream_group消费者组中my_consumer消费者所在的位置开始读取最多10个消息,并将这些消息标记为已经被消费。其中,>表示从上次读取结束的位置开始继续读取。

注意,在读取完消息后,需要使用xack命令将这些消息标记为已经被消费,例如:

XACK my_stream_group my_consumer id_1 id_2 ...

上述命令将已经被消费的消息id_1、id_2等标记为已经被消费。如果不进行标记,那么在下一次读取时这些消息仍然会被返回。

所以上面的命令含义就是:消费者组是reportRemindGroup,消费者是reportRemindConsumer,阻塞1000ms即1s,不需要ack,从reportRemind流中读取消息。

解决

方法1:

client KILL ip:port

方法2:

将告警的指标调整为>1,即 redis_blockd_clients > 1

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x