2016-02-15 39 views
0

我们使用一个4个成员的mongo副本集,以及一个仲裁器。有3个物理站点,所有蒙戈服务器可以互相交谈:Mongo副本集 - 客户需要了解所有这些吗?

网站1(西海岸)site1的-MG01 site1的-MG02

网站2(东海岸)站点2-mg03站点2-MG04

网站3(云,仲裁者只)site3-mgarbiter

我们有一个Java客户端。我宁愿客户端永远不会连接到服务器蒙戈在其他网站,即使他们的一台服务器变成主(滞后会终止该应用。)或者把不同的方式

网站1 Java应用程序所连接到site1的-MG01和site1的-MG02

网站2 JavaApp连接到站点2-mg03和站点2-MG04

是可以接受的客户端只知道一个副本集的一部分?因此,如果Web客户端可以实际只能达到现场1,我建立了我的副本设置如下:

“site1的-MG01:270xx,site1的-MG02:270xx”

请问

我的客户受到负面影响?我认为它的工作方式,只要这些服务器之一是主要的,它会连接好吗?如果一个Site 2 Mongo成为主要的,我就不能连接?

回答

1

在Mongo中,所有的写入都是针对主要的。 如果您的客户是“只读”,那么您可以在查询中使用“最近的”阅读偏好。 另一种选择是连接到非主节点并设置rs.slaveOk以允许客户端读取。 https://docs.mongodb.org/v3.0/reference/method/rs.slaveOk/

希望它有帮助。

1

Mongo副本集 - 客户端是否需要了解所有这些?

否 - TBD

是可以接受的客户端只知道一个副本集的一部分?

由于事实上,针对客户端应用 - 通过Java驱动程序 - 它足以“知道”只有集合的单个成员。其余的集合成员可以通过单一成员配置访问。

我的客户会受到负面影响吗?

是,在仅设置一套单一数据中心会员部的这种情况下,你不保护自己的情况下,数据中心已关闭,您的客户端最初无法连接到组。您应该更好地配置一个服务器地址数组,其中包含首先是西海岸的一员,然后是东海岸的一员。东海岸客户端应用程序应该转换的订单。

为了安全起见,您应该配置三个成员服务器地址,以保证如果该集合正常工作,则可以连接至三个幸存节点中的至少一个。在这种情况下,将仲裁器添加到中性数据中心中。如果两名成员离开,它们很可能都来自同一个DC。

我认为它的工作原理,是只要这些服务器中的一个主要方式,它将连接罚款?

至于说,你不一定需要连接到主要,只有一个知道其中主要是其成员。

如果站点2 Mongo成为主站,我只是无法连接?

是的,你可以。

我宁愿客户端永远不会连接到服务器蒙戈在其他网站,即使他们的其中一个服务器主要

客户当然会一直写小学,在哪个DC无所谓。如果您希望应用程序始终从其指定的数据中心读取数据,则最好的方法是通过read preference tag sets

+0

感谢您的反馈意见。偏好标签听起来很有希望,但他们可以说不要与网站2交谈?我尝试了我的设置,并按照您的建议发现了site2-mg03和site2-mg04,然后在无法与它们交谈时抛出com.mongodb.MongoSocketOpenException。读取你的链接,它听起来不像标签会停止连接? – javatestcase

+0

@javatestcase如果没有显示代码和rs配置,很难说出了什么问题。如果您使用适当的标签配置西海岸会员并正确设置了“ReadPreference”,它应该可以工作。我不知道你发现*的意思。应用程序总是可以访问远程站点,但是使用合适的TagSet进行读取操作时,它应该从“本地”站点成员读取数据。 –

相关问题