问题来源:
代码如下:
from pymongo import MongoClientmongo_uri = "mongodb://admin:password@192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538/?"
# 创建MongoClient实例
client = MongoClient(mongo_uri)
为什么uri中会存在多个IP地址呢, 是连接多个服务器吗?
根因定位:
在MongoDB中,当你在URI参数里看到多个IP地址,这通常意味着你正在连接到一个MongoDB副本集。副本集是MongoDB的一种部署方式,其中数据会被复制到多个服务器,这样的话,即使某个服务器出现故障,其他服务器上的副本也能保证数据的可用性和一致性。
这里是对MongoDB URI参数的简单解析:
mongodb:// 是协议部分,用来指定客户端需要使用的连接方法和协议。
admin:dsdsdsfsdfdsfdsa 是登录凭证,admin 是用户名,而 dsdsdsfsdfdsfdsa 是密码。
@192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538 列出了副本集中的三个成员及其对应的端口号。这些是MongoDB服务器实例的地址,客户端将尝试连接到这些服务器。
/? 后面可以跟上连接选项,如副本集名称、连接超时时间等,但是在你给出的例子中并没有具体的连接选项
在连接到副本集时,客户端(你的Python应用程序)通常会自动查找并连接到主节点(primary),这是副本集中唯一可以进行写操作的节点。如果当前的主节点不可用,客户端会尝试连接到其他节点,并且副本集会自行选举一个新的主节点。
这样的部署方式提高了数据库的高可用性和故障转移能力。在你的Python代码中,使用这种带有多个IP地址的URI连接MongoDB副本集时,你的数据库驱动会处理与副本集中的各个成员之间的通信和故障转移。
什么叫MongoDB副本集
MongoDB副本集是MongoDB的一个特性,它提供了数据的高可用性和冗余。现在,让我们像给小学生解释一样来理解这个概念。假设你有一个非常重要的日记,你不希望它丢失或者被毁掉,因为它包含了你所有的秘密和冒险故事。为了保护这个日记,你决定做几个复制品。你把这些复制品放在家里不同的地方:一个在你的房间,另一个在客厅,还有一个在你的书包里。这样,即使有一天你的房间发生了灾难,比如说一场水灾,你的日记被毁了,你还有其他的副本可以回去查看那些宝贵的记忆。MongoDB的副本集就是类似的概念。它由一组MongoDB服务器组成,这些服务器上存有数据库的副本。通常,副本集包括一个主节点(Primary)和多个从节点(Secondary):主节点 —— 就像你的原始日记,是用来读写数据的地方。在副本集中,所有的数据变更(比如添加、更新或删除数据)首先发生在主节点上。从节点 —— 它们就像你的日记的复制品,它们复制主节点的数据。从节点通常用来读取数据,但它不能直接写入数据。如果主节点出了问题,其中一个从节点可以被提升为新的主节点,这样就可以继续读写操作而不会丢失数据。副本集中的数据复制是自动进行的。当主节点上的数据发生变化时,这些变化会被复制到从节点上,确保所有的节点都有最新的数据副本。
这种安排的好处是:
数据安全性 —— 因为有多份数据副本,所以即使一台服务器出现故障,数据也不会丢失。
高可用性 —— 如果主节点出现问题,副本集可以自动选择一个从节点来接替成为新的主节点,保证服务不中断。
读取扩展 —— 你可以从从节点读取数据,这样可以分散读取请求的负载,提高读取性能。
灾难恢复 —— 由于副本分布在不同的服务器上,即使某些服务器所在位置发生了灾难,其他的服务器仍然可以保持服务运行。
总之,MongoDB的副本集就像是你的日记的多个备份,无论发生什么,你都可以确保你的数据是安全的,并且服务始终可以使用。