【问题标题】:Can 2 redis servers share the same snapshot dump file?2个redis服务器可以共享同一个快照转储文件吗?
【发布时间】:2013-02-16 17:57:01
【问题描述】:

是否可以在两台机器上运行 Redis 服务器,并且每台服务器在配置文件中指定相同的快照转储文件名和目录,并且目录和文件显然在两台机器之间共享?

RavenDB 似乎可以正常工作,我可以在我机器上的 Dropbox 文件夹上设置整个服务器文件目录,并在另一台机器上执行相同操作,同时 RavenDb 服务器从 / 读取和写入数据时同步两个投递箱到存储在投递箱文件夹中的数据库。

我理解这两个数据库的概念非常不同,我只是以 RavenDB 的经验为例来解释我试图完成的事情。请注意,这仅用于开发目的,而不是在生产中运行。

我在 2.4.5 版本中将 Redis 作为 Windows 服务运行,并在 C# .Net 4.5 中使用 BookSleeve 作为客户端

谢谢

【问题讨论】:

    标签: c# .net nosql redis


    【解决方案1】:

    当然不是。这将是确保文件损坏的可靠方法。

    您可能想关注 Redis 集群 (http://redis.io/topics/cluster-spec) 的进展,目前处于规范阶段。

    【讨论】:

    • 它不一定会损坏文件,除非服务器覆盖整个文件并包含服务器特定信息(无论如何都不应该这样做)。我提到的示例(RavenDB)不会以任何方式损坏任何文件。因此,也许一个后续问题是,您是否知道我是否可以关闭自动快照并仍然通过代码提交添加的密钥,这些代码又保存在快照文件中?我知道两台服务器从不同时添加密钥。 (我在笔记本电脑上使用一个服务器实例进行外部工作,而另一个服务器实例在我的家用计算机上运行。
    • 如果你不同时运行服务器,这可能会飞,但如果两者同时运行,你可能会丢失数据。
    • 它们确实同时运行,但只要在配置文件中关闭快照,它们就永远不会触及转储文件,对吗?所以我的问题是我是否可以通过代码或仅通过配置文件中的服务器设置强制转储?
    • 如果你发出SHUTDOWN SAVE,它将在Redis关闭之前强制生成一个保存点。这应该可以确保您在磁盘上拥有最新数据。
    • 谢谢,但在运行时没有命令将数据转储到文件?
    【解决方案2】:

    您将在未启用持久性的系统上使用转储文件的唯一时间是在引导时。但是,如果禁用持久性,则不会从转储文件中读取。

    即使转储文件中没有服务器特定的数据,当两个服务都写入文件时,损坏的可能性也会随时出现。您可以将持久性设置设置为仅在 60 秒内发生 5900 万次更改时才保存。这可以让您在加载时读取文件但不能保存到它。然后你需要使用

    redis config set save ""

    要禁用两者的保存但能够在需要时保存,您可以执行上述操作并发出 by save 命令。

    我还必须建议不要通过共享文件系统执行此操作,这是您需要在多台机器访问同一文件时执行此操作。在您的情况下,您将 Dropbox 作为您的共享文件系统,但如果您坚持到磁盘,这可能会降低性能。

    但最终,我不得不问你为什么认为你需要这个?

    如果您将一个用于只读,则使用一两个从属设备并在从属设备上进行读取。这样您就不必担心多个实例会破坏持久性文件。这避免了共享存储的需要,因为您有两个节点运行,每个节点都运行一个数据副本。这提供了冗余,您可以相对轻松地进行主/从故障转移设置。

    最终,如果您只是用它来开发一些东西,我认为不需要这样的设置。只需将配置存储在您可以下载的位置(Dropbox、github 等)并进行开发。将转储文件简单地复制到 Dropbox 或您需要的任何其他地方并不困难,而且肯定不那么复杂,而不是按照您的描述进行操作。

    【讨论】:

    • 感谢您的意见,为什么我需要这个?我正在开发过程中,并且经常将一些用于测试目的的数据添加到任何一台机器上的数据库中。我不想每次都杀死服务器,不得不复制转储文件,重新启动服务器,这样我就可以访问任何一台机器上的数据,无论添加了哪个公司的键/值。另外,请注意,我使用 Dropbox 并不意味着键/值最初保存在云中。它只是保存在本地驱动器和投递箱上,然后与云帐户同步。
    • 正如我所说,以任何方式复制转储文件并不意味着第二个实例获取数据。这只是意味着您在某个位置拥有数据副本,如果将第二个实例配置为使用转储文件,它将在关闭时覆盖它,并且没有办法解决这个问题。您所描述的是需要一个将数据更改复制到的从站。使用内置的复制而不是尝试以一种行不通的方式进行复制,您会更快乐。如果您确实需要多主服务器进行开发,则说明您使用了错误的数据存储。
    • 那是为了指出正确的要使用的术语。我会尝试了解更多。同时,我只是确保每个服务器实例仅在另一个不运行时运行,并且在关闭并同步文件后,另一个实例使用更新的转储文件正确启动。它按预期工作。同样,这只是为了在使用笔记本电脑远离主机的同时玩弄开发东西。
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多