我有2台电脑,每台电脑有2个局域网端口。我已经为使用ReplSet进行了设置。
PC 1号
MON神--BIND_IP 127.0.0.1、192.168.0.231、192.168.0.241--REPLE SET REPEL--数据库路径C:\MOGODB\DATA--端口27017
PC 2号
MON神--BIND_IP 127.0.0.1、192.168.0.232、192.168.0.242--REPLY SET REPEL--数据库路径C:\MOGODB\DATA--端口27017
配置={_id:“epl”,成员:[{_id:0,主机:“192.168.0.231:27017”,优先级:1},{_id:1,主机:“192.168.0.232:27017”,优先级:1}]};
Rs.Initiate(配置);
Mongoh--主机192.168.0.241--端口27017
我可以读取两个IP(192.168.0.231,192.168.0.241)的所有数据。但是当我在IP 192.168.0.231断开的情况下,对“intertOne()”使用命令时,我无法收到IP 192.168.0.241的任何结果
在同样的情况下,我也无法从我的Mongo Drive应用程序中读取任何数据。
如果您有什么意见,请给我。
1条答案
按热度按时间kmbjn2e31#
我认为这里有几个不同的概念被混为一谈,导致了一些混乱和不一致的行为。简短的答案是,应用程序应该使用副本集的连接字符串,而不是独立的服务器才能正常运行。
bind_ip
设置描述mongod
进程应使用哪些网络接口来侦听连接。如果副本集的成员正在相互通信(例如,rs.initiate(config);
成功),并且客户端应用程序也可以连接到副本集的所有成员,则绑定被正确配置并且不存在任何改变或问题。实际发生的情况是,您直接连接到副本集的各个成员。假设副本集运行正常,则两个成员中的一个将处于
PRIMARY
状态,另一个将是SECONDARY
。虽然两者都可以提供读操作,但只有PRIMARY
可以接受写操作。这似乎与您所描述的行为相似。Munosh可以从两个成员读取数据,但您的应用程序只能读取其中一个成员的数据,这一事实可能与read preference有关。默认情况下,驱动程序将使用
primary
的读取首选项,但当直接连接时,Munosh可能会自动配置来自其他成员的读取。因此,您应该将应用程序配置为使用适当的连接URI。这应该特别包括副本集选项以及读取首选项(如果您想要从任何成员读取)。在您的情况下,连接字符串可能如下所示: