微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB多服务器模式

如何解决MongoDB多服务器模式

我们在两个不同的地理位置有两个应用服务器。负载均衡器会自动将客户端发送到最近的服务器,除非该服务器关闭,否则所有客户端都会被发送到唯一可用的服务器。两台服务器都在读写数据。 每个服务器都运行一个应用程序和一个数据库实例。每台服务器上的应用程序只访问本地数据库,对其他服务器一无所知。 目前,我们使用 MysqL 和 master-master 复制,因此两台服务器共享数据库中的相同数据。主键是自增数,一台服务器使用偶数,第二台使用奇数。 我们希望将 MongoDB 实例添加到每个服务器并保持类似的冗余和可用性方法。由于MongoDB本身不支持主-主复制,有没有办法创建一个分片副本集,这样每个服务器都存储一个分片,但是两个服务器都被复制,所以每个分片都可以用于每个服务器? 有没有办法创建所需的行为,让每个应用程序只访问本地 MongoDB 实例,但来自两台服务器的数据在每台服务器上都可用?

解决方法

你应该明确区分“复制”和“共享”

复制意味着您有多个节点。您有一个 PRIMARY 和一个或多个SECONDARY。由于术语“复制”意味着 SECONDARY 具有 PRIMARY 的精确副本。应用程序可以写入 PRIMARY,但它可以从 PRIMARY 或 SECONDARY 读取。

分片意味着您将数据分布在多个节点上。在您的情况下,您将偶数 ID 放在一个节点上,将奇数 ID 放在另一个节点上。这与 MongoDB 分片非常相似,但通常您只需定义分片键,MongoDB 会注意如何均匀分布数据。就像在您当前的设置中一样,当一个分片/节点出现故障时,您的一半客户将无法访问他们的数据。

注意,每个分片本身也是一个副本集,但是可以创建只有一个成员的副本集(即只有 PRIMARY 而没有 SECONDARY)。当然,可用性会受到限制,但这与您当前设置中的可用性相同。

为了获得与当前设计相同的设置,您将构建一个分片集群。每个分片将由一个单成员副本集构建。配置服务器将是两个节点上的副本集。

如果一个节点出现故障,那么配置将变为只读,因此通常您的应用程序仍然可用(对您的一半客户),但您无法进行修改,例如创建新用户或集合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。