连接串里如果不写replicaSet有没有什么区别
mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/admin?replicaSet=myRepl
xiaoxu 已回答的问题
按照标准来说肯定要显示告诉需要访问那个副本集,这样的话能够访问到正确副本集上的成员。我们也可以使用shell来验证url针对不同场景。
我们可以进行反推的方式来验证。大概逻辑如下:
如果我们不指定replicaSet参数:
1、此时可能也访问到主节点,这个是最理想的情况。因为db0、db1、db2角色可以会发生变化,如果db0此时是主,此时直接访问到主库,如果此时db0是备库,那么此时链接的是备库,此时不能写,可以读,相当于不加这个副本集参数就是独立的mongod实例,直接访问第一个。如果第一个无法访问,则顺序访问第二个实例。
2、如果地址配置错或者成员从副本集中剔出等情况,此时访问出问题,访问不上或链接到错误的节点。
如果我们指定replicaSet参数:
1、此时会根据副本集的名字与配置实例成员想匹配,匹配成功则访问了,如果都无法匹配成功,则访问失败。
此时配置实例都是从节点也没有关系,会进行探测自动链接到主节点上。而不是按照配置顺序访问到。默认都是访问主节点。
2、有副本集参数,此时可以配置读写分离等设置
xiaoxu 已回答的问题