Redis 集群的搭建——redis_cluster

本文围绕Redis集群展开,介绍3.0版本前Redis不支持集群。阐述了redis - cluster架构图、容错机制,包括投票过程和集群不可用情况。还说明了为集群增加主节点、从节点的方法及命令,以及删除节点的操作,同时指出删除占hash槽节点的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.0版本之前的redis是不支持集群的
1、redis-cluster架构图
在这里插入图片描述
2、redis-cluster容错
1)投票过程是集群中所有master参与,如果半数以上master节点与master节点通信 超时(cluster-node-timeout),认为当前master节点挂掉.
2)什么时候整个集群不可用(cluster_state:fail)? 如果集群任意master挂掉,且当前 master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开的话集群可以兼容部分节点失败.如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.
3、为集群增加主节点 (提高并发写的能力、扩大容量)
命令:./redis-trib.rb add-node 192.168.37.131:7007 192.168.37.131:7001192.168.37.131:7007 //表示要添加的新节点 192.168.37.131:7001 //表示集群中的任意一个主节点(该节点的作用是用来连接上集群)
使用命令 ./redis1/redis-cli -c -h 192.168.37.131 -p 7001 连接上集群
使用命令 cluster nodes 查看节点是否加入到集群中
新增主节点的话要重新分配hashSolt 否则新节点不会被存储数据
第一步:连接上集群 ./redis-trib.rb reshard 192.168.37.131:7001(连接集群中任意一个可用结点都行)(会提示给新节点分配hashsolat)
第二步:输入要分配的槽数量 输入1000表示要分配1000个槽
在这里插入图片描述
第三步:输入接收槽的结点id这里准备给7007分配槽,通过cluster nodes查看7007结点id为5d6c61ecff23bff3b0fb01a86c66d882f2d402a0输入:5d6c61ecff23bff3b0fb01a86c66d882f2d402a0
第四步:输入源结点id 输入源结点id,槽将从源结点中拿,分配后的槽在源结点中就不存在了。 输入all表示从所有源结点中获取槽。 输入done取消分配。
第五步:输入yes开始移动槽到目标结点id
第六步:查看结点信息 查看hashSolt是否已经分配给新节点
4、新增从节点(增加并发读能力) ./redis-trib.rb add-node --slave --master-id 主节点id 新添加的节点的ip和端口 集群中已存在的任意节点ip和端口
5、删除节点./redis-trib.rb del-node 192.168.37.131:7007 5d6c61ecff23bff3b0fb01a86c66d882f2d402a0 命令解释:./redis-trib.rb del-node 要删除的节点IP:PORT 节点的ID
删除已经占有hash槽的结点会失败,报错如下: [ERR] Node 192.168.37.131:7007 is not empty! Reshard data away and try again.需要将该结点占用的hash槽分配出去

在这里插入图片描述

redis官网:https://redis.io/
请根据下述 Prometheus 采集得到的 redis 监控指标,给出 redis 集群建议的监控告警指标,并附上对应的告警表达式 redis_active_defrag_running、redis_allocator_active_bytesredis_allocator_allocated_bytes redis_allocator_frag_bytes redis_allocator_frag_ratio redis_allocator_resident_bytes redis_allocator_rss_bytes redis_allocator_rss_ratio redis_aof_base_size_bytes redis_aof_buffer_length redis_aof_current_rewrite_duration_sec redis_aof_current_size_bytes redis_aof_delayed_fsync redis_aof_enabled redis_aof_last_bgrewrite_status redis_aof_last_cow_size_bytes redis_aof_last_rewrite_duration_sec redis_aof_last_write_status redis_aof_pending_bio_fsync redis_aof_pending_rewrite redis_aof_rewrite_buffer_length redis_aof_rewrite_in_progress redis_aof_rewrite_scheduled redis_blocked_clients redis_client_recent_max_input_buffer_bytes redis_client_recent_max_output_buffer_bytes redis_cluster_connections redis_cluster_current_epoch redis_cluster_enabled redis_cluster_known_nodes redis_cluster_messages_received_total redis_cluster_messages_sent_total redis_cluster_my_epoch redis_cluster_size redis_cluster_slots_assigned redis_cluster_slots_fail redis_cluster_slots_ok redis_cluster_slots_pfail redis_cluster_state redis_cluster_stats_messages_auth_ack_sent redis_cluster_stats_messages_auth_req_received redis_cluster_stats_messages_fail_received redis_cluster_stats_messages_fail_sent redis_cluster_stats_messages_ping_received redis_cluster_stats_messages_ping_sent redis_cluster_stats_messages_pong_received redis_cluster_stats_messages_pong_sent redis_cluster_stats_messages_update_received redis_cluster_stats_messages_update_sent redis_commands_duration_seconds_total redis_commands_processed_total redis_commands_total redis_config_io_threads redis_config_maxclients redis_config_maxmemory redis_connected_clients redis_connected_slave_lag_seconds redis_connected_slave_offset_bytes redis_connected_slaves redis_connections_received_total redis_cpu_sys_children_seconds_total redis_cpu_sys_seconds_total redis_cpu_user_children_seconds_
最新发布
03-16
### 关键监控告警指标及对应 PromQL 表达式 对于 Redis 集群的高效运行,需要关注多个关键性能指标并设置合理的告警阈值。以下是基于提供的 Prometheus Redis 指标的推荐监控告警指标及其对应的 PromQL 表达式。 #### 1. **内存使用情况** Redis 的内存管理至关重要,当内存接近上限时可能导致驱逐策略生效或写入失败。 - **告警描述**: 当 Redis 使用的内存量超过总可用内存的一定比例时触发告警。 - **PromQL 表达式**: ```promql (rate(redis_memory_used_bytes{job="redis"}[5m]) / on(instance) group_left(node_total_memory_bytes) (node_memory_MemTotal_bytes{} * 0.8) > 1 ``` 该表达式计算 Redis 内存使用量占节点总内存的比例,并在超过 80% 时触发告警[^1]。 --- #### 2. **连接数过多** 高并发场景下,客户端连接数激增可能会耗尽 Redis 资源。 - **告警描述**: 如果当前建立的连接数超出预设的最大连接数,则发出警告。 - **PromQL 表达式**: ```promql rate(redis_connected_clients{job="redis"}[5m]) > 10000 ``` 此处假设最大允许连接数为 10,000,可根据实际需求调整阈值[^2]。 --- #### 3. **命令执行延迟** 长时间的命令响应会显著影响应用性能。 - **告警描述**: 若某些 Redis 命令平均执行时间超过设定阈值则报警。 - **PromQL 表达式**: ```promql histogram_quantile(0.95, sum(rate(redis_command_duration_seconds_bucket{command=~"(get|set)"}[5m])) by (le)) > 0.1 ``` 此表达式监测 `GET` 和 `SET` 命令的第 95 百分位延时是否大于 100ms[^3]。 --- #### 4. **Key 缓存命中率下降** 缓存未命中的次数增多表明可能存在热点 Key 或者数据分布不合理的情况。 - **告警描述**: 缓存命中率低于某个百分比时发送通知。 - **PromQL 表达式**: ```promql (sum(rate(redis_keyspace_hits{job="redis"}[5m])) by (instance) / (sum(rate(redis_keyspace_hits{job="redis"}[5m])) by (instance) + sum(rate(redis_keyspace_misses{job="redis"}[5m])) by (instance)) < 0.9 ``` 如果命中率小于 90%,即认为存在潜在问题。 --- #### 5. **Evicted Keys 数量异常增长** 频繁驱逐 key 可能意味着内存不足或者淘汰策略不当。 - **告警描述**: Evicted keys 记录数量持续上升应引起注意。 - **PromQL 表达式**: ```promql increase(redis_evicted_keys_total{job="redis"}[5m]) > 100 ``` 每五分钟内被驱逐掉的 key 总数超过 100 即视为不正常行为。 --- #### 6. **持久化错误检测** AOF/RDB 文件同步过程中发生错误会影响数据可靠性。 - **告警描述**: 发现任何类型的持久化错误立即报告。 - **PromQL 表达式**: ```promql changes(redis_persistence_rdb_last_bgsave_status_failure{job="redis"}[5m]) > 0 or changes(redis_persistence_aof_last_write_error_total{job="redis"}[5m]) > 0 ``` --- ### 结论 以上列举了几种常见的 Redis 集群监控指标以及相应的 PromQL 查询语句来帮助运维人员及时发现和解决可能出现的问题。这些规则可以根据具体业务环境进一步优化调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值