当前位置: 首页 > 面试题库 >

在不同的机器上使用Redis复制(多主机)

龙俊英
2023-03-14
问题内容

我想在我的应用程序中使用Redis作为分布式缓存。要求之一是具有Active
Active可用性,这意味着我在一个地方拥有一个数据中心,而在其他地方拥有另一个数据中心。如果一个数据中心发生故障,我希望我的用户没有任何感觉,并希望能够从第二个站点的第一个数据中心获取所有数据并继续工作-
在第二个站点也拥有一个主数据库。可能吗?


问题答案:

您正在寻求一种主动-主动(又称为多主设备)解决方案,但您的问题表明您可能不需要它。

如果只要求其中一个数据库可用于写操作,即所有写操作都可以进行,则可以使用Redis的标准主从复制来实现。指导您的应用程序使用主服务器进行写入,并(有可能)让您的从服务器也进行某些读取。如果主服务器发生故障,则将第二个DC中的从服务器升级为新的主服务器,并重定向您的应用程序/客户端以使用它。使用Redis的Sentinel可以实现监视和提升。

实施这种类型的设置时,您需要考虑一些事项。首先请注意,Redis的复制是异步的,因此根据您的主服务器的负载,写入量和复制的网络链接质量,在发生故障转移的情况下,您可以放弃一些最近的更新。其次,在同一主题上,DC间的网络链接可能倾向于受限的带宽和增加的延迟-
您应配置Redis来处理此问题,并可能对该流量使用压缩(例如,通过SSH隧道)。最后,要准确检测故障,您需要在不同位置至少有3个Sentinel。尽管有这些挑战,但这都是可行的。

也就是说,Redis 目前不 支持可对任何数据库进行任意写入的多主机设置。如果实际上是您需要的,请考虑使用其他解决方案。

注意:根据您的确切要求,如果可以保证对不同DC的写入是互斥的(即,每个DC仅可写入另一个DC不共享的键的不同子集),则可以将两个数据库与主数据库一起使用在每个DC中,在从属设备中。



 类似资料:
  • 如果我不能承受失去一致性,并且更喜欢它而不是可用性,我如何关闭复制,以便当Sentinel将一个新副本标记为master时,所有的第一个请求都将是缓存未命中,并且我的缓存可以慢慢升温,而不是返回潜在的陈旧数据? 还有,这是个好主意吗?还有其他好的选择吗?

  • 问题 主Redis DB设置信息 我有一个在10.1.1.1上运行的主程序。配置设置为“保存”到磁盘。下面是配置文件的一个片段: 当我对所讨论的散列运行扫描命令时,以下是结果(正确): 下面是我在slave 1中的数据:(缺少一条记录) 当我在这个从属程序上运行“info”命令时,我得到的结果是:(只选择了我认为可能与此问题有关的特定项) 从机2设置 这是我使用REDIS的第一次尝试,所以我肯定我

  • 问题内容: 我在许多不同的物理服务器上都有一个大型的分布式程序,每个程序都产生许多线程,每个线程在其操作中都使用许多通用资源池中的内容。 目标是在所有操作中平均利用池。有时,通过查看资源池上的快照来查看它在那一刻正在获得的片段,看起来并没有那么随机(实际上可能是,但是很难确定和找出来)。 有没有比它更好且表现同样好(至少没有差很多)的东西? 问题答案: 是基于,它基于线性同余生成器。这意味着它的随

  • 我在不同的机器上各有3台redis服务器。是否有可能在3台服务器之间同步,即每台服务器具有相同的数据。 我考虑使用主从模式,也就是说,所有的写操作都会发送到一台服务器(a),这台服务器就是主服务器。其他2台服务器(B、C)是从服务器,您可以从中读取数据。但问题是,当主机启动时,您尝试从从机读取时,您会被重新定向到主机-我希望从机为读取服务。 我如何实现这个要求? 要回答以下问题:- 如下图所示,1

  • 我正在使用docker容器来编译一段代码,我不一定要将其docker化。我已使用必要的构建工具设置了一个映像,但我希望以某种方式将编译后的文件从容器中取出,而无需使用docker cp container:/file host/file命令。换句话说,我希望自动化这个过程,以便在构建完成后,将生成的文件复制到主机。 Dockerfile

  • 2天前,我开始设置y MySQL主从复制。我从主人那里做了输出,然后把它输入到奴隶身上,还有所有这些东西。一切都很顺利。但我在建立从服务器到主机的连接时遇到了一些麻烦。所以我晚上就不做了。现在,大约1.5天后,我修复了这个问题,我的复制正在运行。主人一直在跑。但现在当我运行时,我比master落后了125,000秒。我以为从机会自动从主机下载所有记录的东西,并运行这些东西,使它们同步。但是的值会非