💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
* MongoDB复制是将数据同步在多个服务器的过程。 * 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。 * 如果当前的主实例失败,会在副本集中选出一个新的主实例 * MongoDB的复制至少需要两个节点 * 其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。 * 各个节点常见的搭配方式为:一主一从、一主多从 数据库总是会遇到各种失败的场景,如网络连接断开、断电等。尽管<ins>Journaling 日志功能也提供了数据恢复的功能,但它通常是针对单个节点来说的,只能保证单节点数据的一致性</ins>。而<mark>副本集通常是由多个节点组成,每个节点除了Journaling 日志恢复功能外,整个副本集还具有故障自动转移的功能,这样能保证数据库的高可用性</mark>。 <br/> 在生产环境中一个副本集最少应该包含三个节点,其中有一个必须是主节点,典型的部署结构如图所示。 :-: ![](https://img.kancloud.cn/0c/27/0c2760ae88b7c24bb3143442b4b04c99_475x202.png) 副本集结构图 每个节点都是一个 mongod 进程对应的实例,节点之间互相周期性地通过心跳检查对方的状态。 <br/> 默认情况下 primary 节点负责数据的读写,secondary 节点备份 primary 节点上的数据,但是 arbiter 节点不会从 primary 节点同步数据。从它的名字 arbiter 可以看出,它起到的作用只是当 primary 节点故障时,能够参与到副本集剩下的节点中,选择出一个新的 primary 节点,它自己永远不会变为primary 节点,也不会参与数据的读写。也就是说,数据库的数据会存在 primary和 secondary 节点中,secondary 节点相当于一个备份。 <br/> 当然 secondary 节点可以有多个,当 primary 节点故障时,secondary 节点有可能变为 primary 节点,典型流程如图所示。 :-: ![](https://img.kancloud.cn/9f/1c/9f1c0186f2531206a0045120aff0017e_594x445.png) 故障转移流程图