本页面正在审核中。 本页面可能不正确、包含无效链接和/或需要技术审核。将来它可能会发生重大变化或被完全删除。
Valkey 设置提示
Linux
-
使用 Linux 操作系统部署 Valkey。Valkey 也定期在 macOS 和 FreeBSD 上进行测试,并且偶尔在其他 OpenBSD、NetBSD、DragonFlyBSD 和 Solaris 派生系统上进行测试。然而,Linux 是大多数压力测试的执行地,也是大多数生产部署的运行地。
-
将 Linux 内核的内存过量使用(overcommit memory)设置设为 1。将
vm.overcommit_memory = 1
添加到/etc/sysctl.conf
。然后,重启或运行命令sysctl vm.overcommit_memory=1
来激活该设置。有关详细信息,请参阅 FAQ:在 Linux 上后台保存因 fork() 错误而失败?。 -
为确保 Linux 内核的透明大页(Transparent Huge Pages)功能不影响 Valkey 的内存使用和延迟,请运行命令:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
以禁用它。有关更多背景信息,请参阅 延迟诊断 - 透明大页引起的延迟。
内存
-
确保已启用交换分区(swap),并且交换文件大小等于系统内存量。如果 Linux 没有设置交换分区,并且您的 Valkey 实例意外消耗了太多内存,Valkey 可能会在内存不足时崩溃,或者 Linux 内核的 OOM killer 可能会终止 Valkey 进程。启用交换分区后,您可以检测到延迟峰值并对其进行处理。
-
在您的实例中设置一个明确的
maxmemory
选项限制,以确保在系统内存限制即将达到时,它将报告错误而不是失败。请注意,maxmemory
的设置应通过计算 Valkey 的开销(数据之外)和碎片开销来确定。因此,如果您认为有 10 GB 的空闲内存,请将其设置为 8 或 9。 -
如果您在写入密集型应用程序中使用 Valkey,在将 RDB 文件保存到磁盘或重写 AOF 日志时,Valkey 可以使用高达正常内存量 2 倍的内存。额外使用的内存与保存过程中写入操作修改的内存页数量成比例,因此通常与在此期间触及的键(或聚合类型项)的数量成比例。请确保相应地调整内存大小。
-
请参阅
LATENCY DOCTOR
和MEMORY DOCTOR
命令以协助故障排除。
运行方式
- 在 daemontools 下运行时,请使用
daemonize no
。
复制
-
设置一个与 Valkey 使用内存量成比例的非平凡的复制积压(replication backlog)。积压使副本更容易与主实例同步。
-
如果您使用复制功能,即使禁用了持久化,Valkey 也会执行 RDB 保存。(这不适用于无盘复制。)如果主实例没有磁盘使用需求,请启用无盘复制。
-
如果您正在使用复制功能,请确保您的主实例已启用持久化,或者在崩溃时不会自动重启。副本将尝试维护主实例的精确副本,因此如果主实例以空数据集重启,副本也将被清除。
安全
- 默认情况下,Valkey 不需要任何身份验证,并监听所有网络接口。如果您将 Valkey 暴露在互联网或其他攻击者可以访问的地方,这是一个很大的安全问题。请查看我们的 安全页面 和 快速入门,了解如何保护 Valkey 的信息。
在 EC2 上运行 Valkey
- 使用基于 HVM 的实例,而不是基于 PV 的实例。
- 将 Valkey 持久化与 EC2 EBS 卷结合使用时需要谨慎处理,因为有时 EBS 卷具有高延迟特性。
- 如果副本与主实例同步时遇到问题,您可能需要尝试无盘复制。
升级或重启 Valkey 实例而无需停机
Valkey 被设计为在您的服务器中长期运行的进程。您可以使用 CONFIG SET
命令在不重启的情况下修改许多配置选项。您还可以在不重启 Valkey 的情况下,从 AOF 切换到 RDB 快照持久化,反之亦然。有关更多信息,请查看 CONFIG GET *
命令的输出。
有时,需要重启,例如,将 Valkey 进程升级到新版本,或者需要修改当前 CONFIG
命令不支持的配置参数时。
请遵循以下步骤以避免停机。
-
将您的新 Valkey 实例设置为当前 Valkey 实例的副本。为此,您需要一台不同的服务器,或者一台有足够 RAM 同时运行两个 Valkey 实例的服务器。
-
如果您使用单个服务器,请确保副本在与主实例不同的端口上启动,否则副本无法启动。
-
等待复制初始同步完成。检查副本的日志文件。
-
使用
INFO
命令,确保主实例和副本具有相同数量的键。使用valkey-cli
检查副本是否按预期工作并响应您的命令。 -
使用
CONFIG SET replica-read-only no
命令允许向副本写入。 -
配置所有客户端使用新实例(副本)。请注意,您可能需要使用
CLIENT PAUSE
命令,以确保在切换期间没有客户端可以写入旧的主实例。 -
一旦您确认主实例不再接收任何查询(您可以使用
MONITOR
命令进行检查),请使用REPLICAOF NO ONE
命令将副本提升为主实例,然后关闭您的主实例。
如果您正在使用 Valkey Sentinel 或 Valkey Cluster,升级到新版本最简单的方法是逐个升级副本。然后您可以执行手动故障转移,将其中一个已升级的副本提升为主实例,最后提升最后一个副本。