本文基于Redis 6.0.9版本,前提至少 Redis 3.0或更高版本。
目录
1.Redis管理
1.1.Redis设置提示
- 我们建议使用Linux操作系统部署Redis。 Redis在OS X上也经过了严格的测试,并在FreeBSD和OpenBSD系统上不时进行了测试。 但是,Linux是我们进行所有主要压力测试以及运行大多数生产部署的地方。
- 确保将Linux内核过量使用内存设置设置为1.将
vm.overcommit_memory = 1
添加到/etc/sysctl.conf
中,然后重新引导或运行sysctl vm.overcommit_memory=1
使其立即生效。 - 确保禁用Linux内核功能透明的大页面,它将以负面的方式极大地影响内存使用和延迟。 这可以通过以下命令完成:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
.。 - 确保在系统中设置一些交换(我们建议交换与内存一样多)。 如果Linux没有交换空间,并且你的Redis实例不小心消耗了太多内存,则Redis会因内存不足而崩溃,或者Linux内核OOM杀手会杀死Redis进程。 启用交换功能后,Redis的工作方式将很糟糕,但是你可能会注意到延迟峰值,并在为时已晚之前进行一些操作。
- 在你的实例中设置一个明确的maxmemory选项限制,以确保该实例将报告错误,而不是在接近系统内存限制时失败。 请注意,应设置maxmemory来计算Redis除数据外的开销以及分段开销。 因此,如果你认为有10 GB的可用内存,请将其设置为8或9。
- 如果要在写入量很大的应用程序中使用Redis,则在磁盘上保存RDB文件或重写AOF日志时,Redis可能使用的内存最多是通常使用的内存的2倍。 使用的额外内存与保存过程中通过写入修改的内存页面数量成正比,因此通常与这段时间内触摸的键(或聚合类型项)的数量成比例。 确保相应地调整内存大小。
- 在daemontools下运行时,请使用daemonize no。
- 确保设置一些非平凡的复制backlog,这些backlog必须与Redis正在使用的内存量成比例设置。 在20 GB的实例中,只有1 MB的backlog是没有意义的。 待办事项将使复制节点很容易与主节点实例重新同步。
- 即使禁用了持久性,除非你使用复制,否则Redis将需要执行RDB保存,除非你使用新的无盘复制功能。 如果主节点上没有磁盘使用情况,请确保启用无盘复制。
- 如果你正在使用复制,请确保你的主节点启用了持久性,或者确保它不会在崩溃时自动重新启动:复制节点将尝试作为主节点的精确复制节点,因此,如果主节点使用空数据集重新启动,则复制节点也将被擦除。
- 默认情况下,Redis不需要任何身份验证,并且侦听所有网络接口。 如果你将Redis暴露在互联网或攻击者可以到达的其他地方,则这是一个很大的安全问题。 例如,查看此攻击以了解它有多危险。 请检查我们的安全页面和快速入门,以获取有关如何保护Redis的信息。
- LATENCY DOCTOR和MEMORY DOCTOR是你的朋友。
1.2.在EC2上运行Redis
- 使用基于HVM的实例,而不是基于PV的实例。
- 例如,不要使用旧实例族:将m3.medium与HVM一起使用,而不是将m1.medium与PV一起使用。
- 将Redis持久性与EC2 EBS卷结合使用时需要小心,因为有时EBS卷具有高延迟特性。
- 如果复制节点与主节点同步时遇到问题,则可能要尝试新的无盘复制。
1.3.无需停机即可升级或重启Redis实例
Redis被设计为在服务器中运行很长时间的过程。 例如,可以使用CONFIG SET command命令修改许多配置选项,而无需重新启动。
从Redis 2.2开始,甚至可以从AOF切换到RDB快照持久性或以其他方式切换,而无需重新启动Redis。 检查CONFIG GET *
命令的输出以获取更多信息。
但是,有时需要重新启动,例如为了将Redis进程升级到新版本,或者需要修改CONFIG命令当前不支持的某些配置参数。
以下步骤提供了一种非常常用的方式来避免任何停机时间。
- 将新的Redis实例设置为当前Redis实例的从节点。 为此,你需要使用其他服务器或具有足够RAM的服务器以保持两个Redis实例同时运行。
- 如果你使用单个服务器,请确保从节点在与主节点实例不同的端口上启动,否则从节点将完全无法启动。
- 等待复制初始同步完成(检查从节点日志文件)。
- 确保使用INFO,在主节点和从节点中有相同数量的键。 使用redis-cli检查从站是否按期望工作并且正在响应命令。
- 允许从节点使用 CONFIG SET slave-read-only no
- 配置所有客户端,以便使用新实例(即从节点)。 请注意,你可能要使用CLIENT PAUSE 命令,以确保切换期间没有客户端可以写入旧的主节点。
- 一旦确定主节点不再收到任何查询(可以使用MONITOR命令进行检查),就可以使用SLAVEOF NO ONE命令将从机选为主机,然后关闭主节点。
如果你使用的是Redis Sentinel或Redis Cluster,则升级到较新版本的最简单方法是先升级一个从节点,然后执行手动故障转移以将其中一个升级后的从节点升级为主节点。最后提升一个从节点。
但是请注意,Redis Cluster 4.0在群集总线协议级别与Redis Cluster 3.2不兼容,因此在这种情况下需要大规模重启。 但是,Redis 5集群总线与Redis 4向后兼容。