12.Redis的持久化_AOF

本文详细介绍了Redis的AOF持久化机制,包括AOF的工作原理、配置选项、启动与恢复流程、重写机制、优缺点等。AOF以日志形式记录所有写操作,通过配置实现同步策略,保证数据完整性和性能之间的平衡。在文件过大时,Redis会触发AOF重写,生成更小的指令集。AOF相比于RDB,提供了更好的数据安全性,但文件体积大,恢复速度较慢。

1.AOF(Append Only File)

        以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2.文件名称

    Aof保存的是appendonly.aof文件

3.配置

     1).appendonly配置AOF持久化,默认关闭,启用是修改成yes

        

     2).appendfilename文件名,默认appendonly.aof

        

     3).Appendfsync可选值

    • Always:同步持久化 每次发生数据变更会被立即记录到磁盘  性能较差但数据完整性比较好

    • Everysec:出厂默认推荐,异步操作,每秒记录   如果一秒内宕机,有数据丢失

    • No

        

     4).No-appendfsync-on-rewrite:重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。

        

     5).Auto-aof-rewrite-min-size:设置重写的基准值,默认当文件增长一倍或者大于64M后就会重写文件。

     6).Auto-aof-rewrite-percentage:设置重写的基准值

        

     

4.AOF启动/备份/恢复/修复

    1).启动

        启动:设置Yes,修改默认的appendonly no,改为yes

      

       启动aof配置,会在当前目录下自动生成appendonly.aof文件

      

       执行的所有写操作,都会以日志的形式记录下来

       

       appendonly.aof文件内容

       

    2).备份

       备份:将有数据的aof文件复制一份保存到对应目录(config get dir)

    3).恢复

       正常恢复:aof文件未损坏,重启redis然后重新加载

        

        异常恢复:若网络异常或其他原因导致appendonly.aof文件损坏。使用Redis-check-aof --fix进行修复,打开appendonly.aof文件手动损坏。然后使用redis-check-aof --fix进行修复。

        这里在aof文件中加入乱码。

        

        

        执行redis-check-aof --fix 文件名

        修复成功

        

        再次启动redis,启动成功

        

        

5. Rewrite

    1).概念:AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,

当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,

只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof。 

     2).原理:AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。

    3).触发机制:Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

 

6.优势:

    1).每修改同步:appendfsync always   同步持久化 每次发生数据变更会被立即记录到磁盘  性能较差但数据完整性比较好

    2).每秒同步:appendfsync everysec    异步操作,每秒记录   如果一秒内宕机,有数据丢失

    3).不同步:appendfsync no   从不同步

 

7.劣势:

    1).相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb

   2).Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

 

8.总结

 

请根据下述 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、付费专栏及课程。

余额充值