40

如何以零停机时间升级到更新版本的 Redis?Redis 从属服务器是只读的,因此您似乎必须关闭主服务器,并且您的站点在等待它重新加载数据库时将处于只读状态 45 秒或更长时间。

有没有解决的办法?

4

4 回答 4

30

Redis 团队对此有很好的文档

核心步骤:

  • 将您的新 Redis 实例设置为当前 Redis 实例的从属。为此,您需要一台不同的服务器,或者一台具有足够 RAM 以保持两个 Redis 实例同时运行的服务器。
  • 如果使用单台服务器,请确保从站启动的端口与主实例不同,否则从站根本无法启动。
  • 等待复制初始同步完成(检查从属日志文件)。
  • 确保使用 INFO 确保主服务器和从服务器中的密钥数量相同。使用 redis-cli 检查从站是否按照您的意愿工作并正在回复您的命令。
  • 配置所有客户端以使用新实例(即从属)。
  • 一旦你确定主控不再接收任何查询(你可以用 MONITOR 命令检查),使用 SLAVEOF NO ONE 命令选择从属为主,然后关闭你的主控。

完整文档:

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

于 2012-01-06T05:00:05.657 回答
23

使节点离线时,使用 SLAVEOF 命令将从节点提升为主节点,然后当您将其重新上线时,将其设置为从节点,它将从在线节点复制所有数据。

您可能还需要确保您的客户端可以适当地处理更改/丢失的主节点。

如果你想变得非常花哨,你可以设置你的客户端在检测到写入主服务器的错误时提升从服务器。

于 2011-01-18T08:10:39.897 回答
10

你可以使用 Redis Sentinel 来做这件事,sentinel 会自动将一个 slave 提升为新的 master。你可以在这里找到更多信息http://redis.io/topics/sentinel

Sentinel 是一个用于管理 redis 服务器的系统,它持续监控 redis 的 master 和 slave,当一个 master 宕机时,它会自动将一个 slave 提升为 master。并且当旧的主人起来时,它将成为新主人的奴隶。

这里不会有停机时间或需要手动配置配置文件。您可以访问上面的链接以了解如何为您的 redis 服务器配置哨兵。

于 2014-04-18T05:26:54.440 回答
8

请注意,您可能必须检查并设置以下配置才能写入您的从站。(“由于 Redis 2.6 默认从属是只读的”)

redis-cli config set slave-read-only no

- 例子

-bash-4.1$ redis-cli info
 Server
redis_version:2.6.9

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
(error) READONLY You can't write against a read only slave.

-bash-4.1$ redis-cli slaveof no one
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"


-bash-4.1$ redis-cli config set slave-read-only no
OK

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"
于 2013-05-08T21:10:33.847 回答