Redis主/从复制 - 单点故障?

时间:2011-01-18 00:20:30

标签: redis high-availability

如何在零停机时间内升级到较新版本的Redis? Redis奴隶是只读的,所以看起来你必须取下主人,当你等待它重新加载数据库时,你的网站只读45秒或更长时间。

有解决方法吗?

4 个答案:

答案 0 :(得分:29)

Redis团队有关于此

的非常好的文档

核心步骤:

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

完整文档:

Upgrading or restarting a Redis instance without downtime

答案 1 :(得分:22)

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

您可能还需要确保您的客户端能够正确处理更改/缺失的主节点。

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

答案 2 :(得分:10)

您可以使用Redis Sentinel执行此操作,哨兵会自动将奴隶提升为新的主人。 你可以在http://redis.io/topics/sentinel找到更多信息。

Sentinel是一个用于管理redis服务器的系统,它可以持续监控redis主服务器和从服务器,每当主服务器关闭时,它会自动将从服务器提升为主服务器。当旧的主人是UP时,它将被作为新主人的奴隶。

此处不需要停机或手动配置配置文件。 您可以访问上面的链接,了解如何为您的redis服务器配置sentinel。

答案 3 :(得分:6)

注意,您可能必须检查并设置以下配置以写入您的从站。 (“因为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"