作者回复: “但有时候主会切换成其他副节点” 你是在同一台服务器上起了几个不同端口的实例?这样的复制集/副本集是没有意义的。 这种场景是常见的,在mongo世界里。你的连接串要同时包含3个节点的IP:PORT,这样在切主的时候mongo的驱动会自动连到下一个主节点,你的应用程序无需处理。
作者回复: 后续的事务性方面还会涉及到复制集。已定目录更新完后也会考虑根据用户的反馈追加一些内容。
作者回复: 那个命令可能不是太合适,用来做精确判断。考虑用个脚本,来做比较准确的判断会好一点,基于change stream或者oplog。
作者回复: 这个通常和你的hostname是否可以被解析相关。 试试下面这个: rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "localhost:28017" }] })
作者回复: 第一个问题你可以先看下这篇博客: https://www.cnblogs.com/Joans/p/7723554.html 如果进一步了解的话,源码也可以尝试阅读下 第二个问题也在上面的文章里有提及 第三个问题:可以的,但是要通过对local库下面的一些表做个手脚。如果你用MongoDB的Ops Manager的话,它就提供这种方法来快速恢复一个从节点。 https://docs.opsmanager.mongodb.com/v1.4/tutorial/use-restore-to-seed-secondary/ 其中关键的集合是system.replset 以及oplog.rs。 system.replset必须包含对应的配置(和其他节点一致)和时间戳。oplog.rs必须包含至少一条和主节点oplog一样的记录用来匹配同步点。
作者回复: 意义不是很大,你crash了一个进程,另一个进程也是没法正常服务(需要3个节点才可以有HA)。硬盘的容错直接用RAID就可以。
作者回复: 1: 是的。 2: 配置。开始搭建集群时候就要配置一下(或者通过add方法增加节点)
作者回复: 复制集提供高可用,分片集在此基础上横向扩充,增加系统对数据量/并发量的支持。分片集由2个或多个复制集组成。
作者回复: 你要把具体操作的步骤和输出贴出来,我才能诊断。听上去比较奇怪,切主节点正常的,但是数据应该在的
作者回复: 这里面最关键的是内存大小。 考虑为summary建一个covered index,然后保证你的索引能够装在内存里 (所有索引大小加起来要小于物理内存的一半那样)。 如果你用分片的话,比如说4个分片,那每个分片只需要处理2.5亿(在2.5亿里寻找,4个分片同时进行),理论上肯定更快了。但是最终还是要看你总的内存的数量。