Redis 管理

有关在生产环境中配置和管理 Redis 的建议

Redis 堆栈 Redis 社区版

Redis 设置提示

Linux的

  • 使用 Linux作系统部署 Redis。Redis 也在 OS X 上进行了测试,有时也在 FreeBSD 和 OpenBSD 系统上进行了测试。但是,Linux 是执行大多数压力测试的地方,也是运行大多数生产部署的地方。

  • 将 Linux kernel overcommit memory (Linux 内核过载内存) 设置为 1。加vm.overcommit_memory = 1/etc/sysctl.conf.然后,重新启动或运行命令sysctl vm.overcommit_memory=1以激活设置。有关详细信息,请参阅 FAQ: Background saving fails with a fork() error on Linux?

  • 要确保 Linux 内核功能透明大页不会影响 Redis 内存使用和延迟,请执行以下命令:echo never > /sys/kernel/mm/transparent_hugepage/enabled以禁用它。有关其他上下文,请参阅延迟诊断 - 透明大页面引起的延迟

记忆

  • 已确保已启用交换空间,并且您的交换文件大小等于系统上的内存量。如果 Linux 没有设置交换,并且您的 Redis 实例意外消耗了太多内存,Redis 可能会在内存不足时崩溃,或者 Linux 内核 OOM 终止程序可能会终止 Redis 进程。启用交换后,您可以检测延迟峰值并对其执行作。

  • 将显式maxmemoryoption limit 来确保它在接近达到系统内存限制时报告错误而不是失败。请注意,maxmemory应该通过计算 Redis 的开销(数据除外)和碎片开销来设置。因此,如果您认为您有 10 GB 的可用内存,请将其设置为 8 或 9。

  • 如果您在写入密集型应用程序中使用 Redis,则在将 RDB 文件保存在磁盘上或重写 AOF 日志时,Redis 最多可以使用正常使用的内存的 2 倍。使用的额外内存与保存过程中写入修改的内存页数成正比,因此它通常与在此期间接触的键(或聚合类型项)的数量成正比。确保相应地调整内存大小。

  • 请参阅LATENCY DOCTORMEMORY DOCTOR命令来帮助进行故障排除。

成像

  • 在 daemontools 下运行时,使用daemonize no.

复制

  • 根据 Redis 使用的内存量设置一个重要的复制积压工作。backlog 允许副本更轻松地与主 (主) 实例同步。

  • 如果您使用复制,则即使禁用了持久性,Redis 也会执行 RDB 保存。(这不适用于无盘复制。如果您在主服务器上没有磁盘使用量,请启用无盘复制。

  • 如果您使用的是复制,请确保您的主服务器启用了持久性,或者它不会在崩溃时自动重新启动。副本将尝试维护 master 的精确副本,因此如果 master 使用空数据集重新启动,则副本也将被擦除。

安全

  • 默认情况下,Redis 不需要任何身份验证并侦听所有网络接口。如果您将 Redis 暴露在 Internet 上或攻击者可以访问的其他地方,这将是一个很大的安全问题。例如,请参阅此攻击以了解它有多危险。请查看我们的安全页面,了解有关如何保护 Redis 的信息。

在 EC2 上运行 Redis

  • 使用基于 HVM 的实例,而不是基于 PV 的实例。
  • 请勿使用旧的实例规格族。例如,将 m3.medium 与 HVM 一起使用,而不是将 m1.medium 与 PV 一起使用。
  • 需要谨慎处理 EC2 EBS 卷的 Redis 持久性,因为有时 EBS 卷具有高延迟特性。
  • 如果在副本与主服务器同步时遇到问题,则可能需要尝试新的无盘复制。

在不停机的情况下升级或重新启动 Redis 实例

Redis 设计为服务器中长时间运行的进程。您可以使用CONFIG SET命令。您还可以从 AOF 切换到 RDB 快照持久性,或者相反,而无需重新启动 Redis。检查CONFIG GET *命令了解更多信息。

有时需要重新启动,例如,将 Redis 进程升级到较新版本,或者当您需要修改当前不支持的配置参数时CONFIG命令。

请按照以下步骤作以避免停机。

  • 将新的 Redis 实例设置为当前 Redis 实例的副本。为此,您需要不同的服务器,或者具有足够 RAM 以保持两个 Redis 实例同时运行的服务器。

  • 如果使用单服务器,请确保副本在与 Master 实例不同的端口上启动,否则副本无法启动。

  • 等待复制初始同步完成。检查副本的日志文件。

  • INFO,请确保 master 和 copy 具有相同的 key 数量。用redis-cli检查副本是否按预期工作并正在回复您的命令。

  • 允许写入副本CONFIG SET slave-read-only no.

  • 配置所有客户端以使用新实例 (副本)。请注意,您可能希望使用CLIENT PAUSE命令确保切换期间没有客户端可以写入旧的主服务器。

  • 确认 master 不再收到任何查询后(您可以使用MONITOR命令),使用REPLICAOF NO ONE命令,然后关闭 Master。

如果您使用的是 Redis SentinelRedis Cluster,则升级到较新版本的最简单方法是逐个升级副本。然后,您可以执行手动故障转移,将其中一个已升级的副本提升为主副本,最后提升最后一个副本。


注意

Redis Cluster 4.0 在集群总线协议级别与 Redis Cluster 3.2 不兼容,因此在这种情况下需要大规模重启。但是,Redis 5 集群总线向后兼容 Redis 4。


为本页评分
返回顶部 ↑