3

我们有 1 个使用 Redis 的 master。还有那个主人的两个奴隶。从站也用作 WebServer。我们将 Redis 用于 PHP 会话。我们正在使用 Round Robin DNS 进行负载平衡。所以这意味着请求在“随机”服务器上命中。

我应该如何配置 PHP 会话之类的东西,以免破坏用户体验。例如,我每 10 秒有一次 redis 的复制期。用户登录和会话创建。几秒钟后,用户请求新页面并点击其他服务器。但是在那台服务器上,Redis 还没有被复制。

当数据在这个问题上很关键时,在这种情况下该怎么办?我们在 redis 中也有非关键数据,所以我们不想将复制周期设置为非常小的周期并将负载加载到 master。

实际上,这不仅适用于 Redis。我还不知道,也许我们会遇到与 MySQL 相同的问题。

4

1 回答 1

4

例如,我每 10 秒有一次 redis 的复制期

我假设您指的是设置repl-ping-slave-period- 这是从主设备到从设备的 ping 时间间隔,以确认链接已启动。

Redis 没有复制期。主机尽快向从机发送命令。从站仍然可以滞后,但这种滞后不是因为您指定的 10s 设置。

您可以在本地验证这一点。打开一个 telnet 会话,连接到 localhost 6379(或者你的主人所在的任何地方)。输入sync。master 将首先发送一个转储文件,然后在您修改 master 上的数据时向您发送命令。您还将每 10 秒看到一次 ping。

我应该如何配置诸如 PHP 会话之类的东西以不破坏用户体验?

最好为 Redis 主从拥有一个专用服务器。不要在有你的网络服务器的机器上安装 Redis。

所有 3 个网络服务器都应直接连接到 Redis 主服务器。如果主服务器由于某种原因宕机,网络服务器应该切换到从服务器。

如何从master切换到slave?现在,您必须手动执行此操作。Salvatore 一直在谈论 Redis-Sentinel,它将解决这个问题,但这个解决方案今天不存在。

有几个人已经实现了自动故障转移的解决方案,但是对于这么小的设置,我建议使用监控脚本并手动进行故障转移。

于 2012-04-24T12:46:49.640 回答