Redis日常运维

作为一名资深运维工程师,了解 Redis 的不同架构模式及其优缺点是非常重要的。此外,监控 Redis 的关键指标也是确保其稳定运行的关键。以下是对这些问题的详细解答。

Redis有几种架构模式及优缺点,关心的监控指标

Redis 架构模式

Redis 主要有以下几种架构模式:

  1. 单实例模式(Standalone)
  2. 主从复制模式(Master-Slave Replication)
  3. 哨兵模式(Sentinel)
  4. 集群模式(Cluster)
1. 单实例模式(Standalone)

优点:

  • 简单易用,部署和维护成本低。
  • 性能高,单实例可以充分利用单台服务器的资源。

缺点:

  • 单点故障,如果单个实例宕机,整个服务将不可用。
  • 扩展性差,无法通过水平扩展来增加容量。
2. 主从复制模式(Master-Slave Replication)

优点:

  • 提供数据冗余,提高系统的可用性。
  • 可以通过读写分离来提高读取性能。
  • 简单的备份和恢复机制。

缺点:

  • 写操作仍然集中在主节点上,主节点成为瓶颈。
  • 从节点的数据同步有一定的延迟。
  • 如果主节点宕机,需要手动或自动切换到从节点,存在一定的切换时间。
3. 哨兵模式(Sentinel)

优点:

  • 自动化的故障检测和故障转移。
  • 高可用性,当主节点宕机时,哨兵会自动选择一个从节点作为新的主节点。
  • 监控和通知功能,可以配置在发生故障时发送通知。

缺点:

  • 配置相对复杂,需要额外的哨兵节点。
  • 故障转移过程中可能会有短暂的服务中断。
  • 仍然存在单点故障的风险,如果所有哨兵节点都宕机,则无法进行故障转移。
4. 集群模式(Cluster)

优点:

  • 水平扩展,可以通过添加更多的节点来增加容量。
  • 自动分片,数据分布在多个节点上,提高了整体的吞吐量。
  • 高可用性,每个分片都有多个副本,提供了数据冗余和故障转移能力。

缺点:

  • 配置和管理复杂,需要更多的运维工作。
  • 一些命令不支持集群模式,需要使用特定的集群命令。
  • 数据迁移和重新平衡可能会影响性能。

运维关心的监控指标

运维人员通常关心以下 Redis 的监控指标:

  1. 内存使用情况

    • used_memory:当前使用的内存量。
    • used_memory_rss:操作系统分配给 Redis 的内存量。
    • mem_fragmentation_ratio:内存碎片率,用于评估内存使用效率。
  2. CPU 使用情况

    • used_cpu_sys:系统 CPU 使用时间。
    • used_cpu_user:用户 CPU 使用时间。
    • used_cpu_sys_childrenused_cpu_user_children:后台进程的 CPU 使用时间。
  3. 连接数

    • connected_clients:当前连接的客户端数量。
    • blocked_clients:阻塞的客户端数量。
  4. 网络流量

    • instantaneous_ops_per_sec:每秒执行的命令数。
    • instantaneous_input_kbpsinstantaneous_output_kbps:每秒输入和输出的网络流量(KB/秒)。
  5. 持久化状态

    • rdb_last_save_timerdb_changes_since_last_save:RDB 文件上次保存的时间和自上次保存以来的变化次数。
    • aof_enabledaof_current_size:AOF 是否启用以及当前 AOF 文件的大小。
  6. 键空间统计

    • db0:keys=100,expires=20:数据库 0 中的 key 数量和过期 key 的数量。
  7. 命中率

    • keyspace_hitskeyspace_misses:键空间命中和未命中的次数。
    • hit_rate:计算公式为 keyspace_hits / (keyspace_hits + keyspace_misses)
  8. 复制状态

    • master_link_status:主从复制的状态。
    • slave_repl_offsetmaster_repl_offset:从节点和主节点的复制偏移量。
  9. 慢查询

    • slowlog_len:慢查询日志的长度。
    • slowlog_get:获取慢查询日志。

最佳获取方式

  1. 使用 Redis 自带的 INFO 命令

    • INFO all:获取所有信息。
    • INFO memory:获取内存相关的信息。
    • INFO clients:获取客户端相关的信息。
    • INFO server:获取服务器相关的信息。
    • INFO stats:获取统计信息。
    • INFO replication:获取复制相关的信息。
    • INFO cpu:获取 CPU 使用情况。
    • INFO persistence:获取持久化相关的信息。
    • INFO cluster:获取集群相关的信息。
  2. 使用监控工具

    • Prometheus + Grafana:通过 Prometheus 收集 Redis 指标,并使用 Grafana 进行可视化展示。
    • Redis Exporter:专门为 Prometheus 设计的 Redis 导出器,可以方便地收集 Redis 指标。
    • Telegraf + InfluxDB + Grafana:Telegraf 用于收集 Redis 指标,InfluxDB 用于存储数据,Grafana 用于可视化展示。
  3. 使用 Redis 自带的监控工具

    • MONITOR:实时监控 Redis 服务器接收到的所有命令。注意,这个命令对性能影响较大,建议在测试环境中使用。
    • SLOWLOG:记录执行时间超过指定阈值的命令,可以帮助识别慢查询。

使用 Redis 命令行获取监控指标

以下是一些常用的 Redis 命令行命令,用于获取上述提到的监控指标:

  1. 内存使用情况

    bash 复制代码
    redis-cli info memory
  2. CPU 使用情况

    bash 复制代码
    redis-cli info cpu
  3. 连接数

    bash 复制代码
    redis-cli info clients
  4. 网络流量

    bash 复制代码
    redis-cli info stats
  5. 持久化状态

    bash 复制代码
    redis-cli info persistence
  6. 键空间统计

    bash 复制代码
    redis-cli info keyspace
  7. 命中率

    bash 复制代码
    redis-cli info stats | grep "keyspace"
  8. 复制状态

    bash 复制代码
    redis-cli info replication
  9. 慢查询

    bash 复制代码
    redis-cli slowlog get

通过这些命令,你可以获取到 Redis 的各种监控指标,并根据这些指标进行性能调优和故障排查。

Redis日常运维常用命令、工具

常用的 Redis 命令

  1. 基本信息

    • INFO [section]:获取 Redis 服务器的各种信息,如内存使用情况、客户端连接数、持久化状态等。

      bash 复制代码
      redis-cli INFO
      redis-cli INFO memory
  2. 键空间操作

    • KEYS pattern:查找所有匹配给定模式的键。

      bash 复制代码
      redis-cli KEYS "user:*"
    • SCAN cursor [MATCH pattern] [COUNT count]:增量迭代键空间。

      bash 复制代码
      redis-cli SCAN 0 MATCH user:* COUNT 10
  3. 数据操作

    • GET keySET key value:获取和设置键值对。

      bash 复制代码
      redis-cli SET mykey "Hello, Redis!"
      redis-cli GET mykey
    • DEL key [key ...]:删除一个或多个键。

      bash 复制代码
      redis-cli DEL mykey
  4. 持久化

    • SAVEBGSAVE:手动触发 RDB 持久化。

      bash 复制代码
      redis-cli SAVE
      redis-cli BGSAVE
    • LASTSAVE:返回最近一次成功执行保存操作的时间戳。

      bash 复制代码
      redis-cli LASTSAVE
  5. 复制

    • ROLE:返回当前实例的角色(主节点、从节点或哨兵)。

      bash 复制代码
      redis-cli ROLE
    • SLAVEOF host port:将当前实例配置为指定主机的从节点。

      bash 复制代码
      redis-cli SLAVEOF 192.168.1.100 6379
  6. 集群

    • CLUSTER INFO:获取集群的信息。

      bash 复制代码
      redis-cli CLUSTER INFO
    • CLUSTER NODES:获取集群中所有节点的信息。

      bash 复制代码
      redis-cli CLUSTER NODES
  7. 慢查询日志

    • SLOWLOG GET:获取慢查询日志。

      bash 复制代码
      redis-cli SLOWLOG GET
    • SLOWLOG RESET:重置慢查询日志。

      bash 复制代码
      redis-cli SLOWLOG RESET
  8. 客户端管理

    • CLIENT LIST:列出所有连接的客户端。

      bash 复制代码
      redis-cli CLIENT LIST
    • CLIENT KILL ip:port:关闭指定 IP 和端口的客户端连接。

      bash 复制代码
      redis-cli CLIENT KILL 192.168.1.100:55555

常用的 Redis 工具

  1. Redis CLI (redis-cli)

    • Redis 官方提供的命令行工具,用于与 Redis 服务器进行交互。
    • 可以执行各种 Redis 命令,并支持脚本和管道操作。
  2. Redis Sentinel (sentinel)

    • 用于高可用性和自动故障转移的工具。
    • 监控主节点和从节点的状态,当主节点发生故障时自动进行故障转移。
  3. Redis Cluster (cluster)

    • 用于水平扩展 Redis 的工具。
    • 自动分片和负载均衡,提高系统的吞吐量和容量。
  4. Redis Exporter (Prometheus Redis Exporter)

    • 用于 Prometheus 的 Redis 导出器,可以收集 Redis 的指标并将其暴露给 Prometheus。
    • 便于在 Grafana 中进行可视化监控。
  5. RedisInsight

    • 由 Redis Labs 提供的图形化管理工具。
    • 支持 Redis 的各种功能,包括监控、数据查看、性能分析等。
  6. Redis Desktop Manager

    • 第三方的图形化管理工具。
    • 提供直观的界面来管理和监控 Redis 实例。
  7. Medis

    • 另一个第三方的图形化管理工具。
    • 界面简洁,易于使用,支持多种操作系统。
  8. RDM (Redis Desktop Manager)

    • 一个开源的 Redis 图形化管理工具。
    • 提供了丰富的功能,包括数据查看、编辑、导入导出等。

在日常运维中,熟练掌握这些命令和工具是非常重要的。通过这些工具,你可以有效地监控 Redis 的运行状态,及时发现和解决问题,确保 Redis 服务的稳定性和高性能

命令行通过redis-cli连接数据库,执行CLIENT LIST返回结果解析

**CLIENT LIST 命令返回的每一行都包含了一个连接到 Redis 服务器的客户端的信息。每行信息由多个字段组成,每个字段提供了关于该客户端的不同细节。下面是对你提供的 CLIENT LIST 返回结果的解析:

id=88 addr=fd40:5d1f:3c:b803:6c3c:100:adc:7:3894 fd=95 name= age=51110 idle=51110 flags=P db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=20504 ow=0 owmem=0 events=r cmd=subscribe user=default lib-name= lib-ver= numops=3**

字段解析

  • id=88:

    • 客户端的唯一标识符。在这个例子中,客户端 ID 是 88。
  • addr=fd40:5d1f:3c:b803:6c3c💯adc:7:3894:

    • 客户端的 IP 地址和端口号。这里显示的是一个 IPv6 地址 fd40:5d1f:3c:b803:6c3c:100:adc:7 和端口号 3894
  • fd=95:

    • 文件描述符(File Descriptor)。这是操作系统用于管理网络连接的内部标识符。
  • name=:

    • 客户端名称。这个字段是空的,表示客户端没有设置名称。
  • age=51110:

    • 客户端连接的持续时间(以秒为单位)。这个客户端已经连接了 51110 秒(大约 14.2 小时)。
  • idle=51110:

    • 客户端空闲的时间(以秒为单位)。这个客户端已经空闲了 51110 秒(大约 14.2 小时),表示自从上次发送命令以来已经过去了这么长时间。
  • flags=P:

    • 客户端标志。这里的 P 表示这是一个主从复制中的主节点(Master)。其他可能的标志包括:
      • N:普通客户端。
      • M:监控模式(MONITOR)。
      • S:从节点(Slave)。
      • O:离线模式(Offline)。
      • L:正在等待阻塞命令(如 BLPOP)。
      • R:正在读取数据。
      • W:正在写入数据。
      • u:未认证(Unauthenticated)。
      • x:即将关闭连接。
      • b:后台任务。
      • m:多路复用(Multiplexing)。
      • t:跟踪模式(Tracing)。
      • s:订阅模式(Subscribed)。
      • l:正在加载数据。
      • d:脏数据(Dirty)。
      • a:已认证(Authenticated)。
      • r:正在读取查询缓冲区。
      • w:正在写入查询缓冲区。
      • k:被踢出(Kicked)。
      • A:异步客户端。
      • f:快速通道(Fast channel)。
      • D:断开连接(Disconnected)。
  • db=0:

    • 客户端当前选择的数据库编号。这里是 0 号数据库。
  • sub=1:

    • 客户端订阅的频道数量。这个客户端订阅了 1 个频道。
  • psub=0:

    • 客户端订阅的模式匹配的数量。这个客户端没有订阅任何模式匹配。
  • multi=-1:

    • 客户端是否处于事务状态。-1 表示不在事务中。
  • qbuf=0:

    • 查询缓冲区中的字节数。这里是 0,表示没有待处理的数据。
  • qbuf-free=0:

    • 查询缓冲区剩余的可用空间。这里是 0,表示缓冲区已满或未使用。
  • argv-mem=0:

    • 最近一次命令参数占用的内存大小。这里是 0,表示最近一次命令没有使用额外的内存。
  • obl=0:

    • 输出缓冲区列表中的字节数。这里是 0,表示没有待发送的数据。
  • oll=0:

    • 输出列表长度。这里是 0,表示没有待发送的数据项。
  • omem=0:

    • 输出缓冲区占用的内存大小。这里是 0,表示没有待发送的数据。
  • tot-mem=20504:

    • 客户端总内存占用量。这里是 20504 字节。
  • ow=0:

    • 输出缓冲区的写入次数。这里是 0,表示没有写入操作。
  • owmem=0:

    • 输出缓冲区写入操作占用的内存。这里是 0,表示没有写入操作。
  • events=r:

    • 事件类型。r 表示可读事件(Read event)。
  • cmd=subscribe:

    • 客户端执行的最后一个命令。这里是 SUBSCRIBE,表示客户端订阅了一个频道。
  • user=default:

    • 连接的用户。这里是 default 用户。
  • lib-name=:

    • 客户端库的名称。这个字段是空的,表示客户端没有提供库的名称。
  • lib-ver=:

    • 客户端库的版本。这个字段是空的,表示客户端没有提供库的版本。
  • numops=3:

    • 客户端执行的命令总数。这个客户端总共执行了 3 个命令。

通过这些字段,你可以了解客户端的详细信息,包括它的 IP 地址、连接时间、空闲时间、订阅状态、内存使用情况等。这对于监控和调试 Redis 服务器是非常有用的。

info 和 CLUSTER INFO 解析

INFOCLUSTER INFO 是 Redis 中非常有用的命令,用于获取关于 Redis 服务器和集群的详细信息。下面是对这两个命令返回的信息的详细解析。

INFO 命令

INFO 命令提供了关于 Redis 服务器的各种统计信息和配置参数。你可以通过指定不同的部分来获取特定的信息,例如 INFO all 获取所有信息,或者 INFO memory 获取内存相关信息。

示例输出
plaintext 复制代码
# Server
redis_version:6.2.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7a4e8c9f5b3d67d4
redis_mode:standalone
os:Linux 5.4.0-104-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:9.3.0
process_id:12345
run_id:9a5e7c1b5c5e4b5c5e5c5e5c5e5c5e5c5e5c5e5c
tcp_port:6379
uptime_in_seconds:123456
uptime_in_days:1
hz:10
configured_hz:10
lru_clock:12345678
executable:/usr/local/bin/redis-server
config_file:/etc/redis/redis.conf

# Clients
connected_clients:10
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0

# Memory
used_memory:123456789
used_memory_human:117.75M
used_memory_rss:123456789
used_memory_rss_human:117.75M
used_memory_peak:123456789
used_memory_peak_human:117.75M
used_memory_overhead:123456789
used_memory_startup:123456789
used_memory_dataset:123456789
used_memory_dataset_perc:100.00%
total_system_memory:8388608000
total_system_memory_human:7.81G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-5.2.1

# Persistence
rdb_changes_since_last_save:123456
rdb_bgsave_in_progress:0
rdb_last_save_time:1633072800
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_write_latency_us:0
aof_current_size:0
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0

# Stats
total_connections_received:123456
total_commands_processed:123456789
instantaneous_ops_per_sec:123
total_net_input_bytes:123456789
total_net_output_bytes:123456789
instantaneous_input_kbps:123.45
instantaneous_output_kbps:123.45
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:12345
evicted_keys:0
keyspace_hits:123456789
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_replid:9a5e7c1b5c5e4b5c5e5c5e5c5e5c5e5c5e5c5e5c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:123456789
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:123456789
详细解析
  • Server:包含 Redis 服务器的基本信息,如版本、运行模式(单实例或集群)、操作系统、进程 ID 等。
  • Clients:显示当前连接的客户端数量、阻塞的客户端数量等。
  • Memory:提供内存使用情况,包括已用内存、RSS 内存、峰值内存等。
  • Persistence:显示持久化相关的状态,如 RDB 和 AOF 的状态和时间。
  • Stats:统计信息,如处理的总命令数、每秒操作数、网络输入输出速率等。
  • Replication:复制相关的信息,如主从角色、从节点数量、复制偏移量等。

CLUSTER INFO 命令

CLUSTER INFO 命令提供了关于 Redis 集群的状态信息。这个命令在集群模式下特别有用,可以用来检查集群的整体健康状况。

示例输出
plaintext 复制代码
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:12345
cluster_stats_messages_received:12345
详细解析
  • cluster_state :集群的状态,可能的值有 ok(正常), fail(故障)。
  • cluster_slots_assigned:分配给节点的槽位总数(Redis 集群默认有 16384 个槽位)。
  • cluster_slots_ok:状态正常的槽位数量。
  • cluster_slots_pfail:疑似失败的槽位数量。
  • cluster_slots_fail:确认失败的槽位数量。
  • cluster_known_nodes:已知的节点数量。
  • cluster_size:当前集群中的节点数量。
  • cluster_current_epoch:当前的纪元号(epoch),每个配置变更都会增加这个值。
  • cluster_my_epoch:当前节点的纪元号。
  • cluster_stats_messages_sentcluster_stats_messages_received:发送和接收的消息数量,用于集群内部通信。

INFOCLUSTER INFO 命令是 Redis 运维中非常重要的工具,可以帮助你了解 Redis 服务器和集群的运行状态。通过这些信息,你可以监控性能、诊断问题并进行必要的调整。

相关推荐
AndyFrank几秒前
mac crontab 不能使用问题简记
linux·运维·macos
时差95332 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式34 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
成都古河云1 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
算法与编程之美1 小时前
文件的写入与读取
linux·运维·服务器
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
Amelio_Ming1 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
心灵彼岸-诗和远方1 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
Dxy12393102162 小时前
python下载pdf
数据库·python·pdf
JuiceFS2 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生