美文网首页mongodb
【mongoDB】mongoDB副本集登陆方式

【mongoDB】mongoDB副本集登陆方式

作者: Bogon | 来源:发表于2023-04-17 10:06 被阅读0次
    1. 主+从+仲裁架构,写主从 ip port,用逗号隔开
    
    2. 主+从+从架构,写主从从  ip port,用逗号隔开
    
    3. instance  为mongoDB 实例名
    
    image.png image.png

    对副本集mongoDB命令行登陆的2种方式:

    方式一:如果要做数据变更操作,需要提前找到谁是主节点,再登陆主节点

    mongo --host  192.168.1.101  --port  27018 -u "user" -p "passwd"  --authenticationDatabase  admin
    
    

    方式二:通过mongo连接字符串登陆,会自动登陆主节点

    1. 登录,不指定库,走admin库认证
    mongo  "mongodb://${user}:${paswd}@192.168.1.101:27018,192.168.1.102:27018/?replicaSet=${instance}&authSource=admin"
    
    1. 登录,指定库名,走admin认证
    mongo  "mongodb://${user}:${paswd}@192.168.1.101:27018,192.168.1.102:27018/${db_name}?replicaSet=${instance}&authSource=admin"
    
    1. 登录,指定库名,并且在指定库名做认证
    mongo  "mongodb://${user}:${paswd}@192.168.1.101:27018,192.168.1.102:27018/${db_name}?replicaSet=${instance}&authSource=${db_name}"
    

    注:replicaSet 为 mongoDB的实例名

    mongo shell 的连接字符串跟应用客户端的连接字符串还有点不一样:

    mongo shell 连接副本集,必须指定replicaSet名称,库名指定是可选的,可指定,可不指定;

    应用(如java应用)中jdbc连接mongoDB的字符串中一定要指定库名,如果是replicaSet只需要填写所有主从的地址,而不是填写replicaSet名称

    如果登陆是从节点,那么无法做数据变更操作,因为mongoDB默认只有主节点是可写:

    mongo --host  192.168.1.102  --port  27018 -u "user" -p "passwd"  --authenticationDatabase  admin
     
    > rs.slaveOk()
    

    注意:对于从mongo shell登陆从节点,需要先执行 rs.slaveOk() 后才能执行相关查询操作,对客户端应用则没有这个限制,默认可以读从,可以实现读写分离。

    当客户端连接副本集时,如果以primary地址连接实例,当发生上述情况时,P节点降级为Secondary节点,客户端将无法继续执行写操作。

    为了解决这一问题,连接线上数据时,最好是使用副本集方式连接副本集。

    image.png image.png image.png image.png
    应用客户端通过连接mongos到分片
    mongodb://${user}:${passwd}@192.168.1.101:12345,192.168.1.102:12345192.168.1.103:12345/${db_name}&authSource=${db_name}
     
     
     
    用 mongo shell 连接分片1
    mongodb://172.17.0.8:27018,172.17.0.11:27018,172.17.0.12:27018/test?replicaSet=rs_shardsvr0&authSource=${db_name}
     
     
    用mongo shell 连接分片2
    mongodb://172.17.0.13:27018172.17.0.14:27018,172.17.0.15:27018/test?replicaSet=rs_shardsvr1&authSource=${db_name}
    
    
     
    用mongo shell,登陆mongos
    mongo  --host  xx.xx.xx.xx    --port=12345    --username='user'  --password='passwd'  --authenticationDatabase=admin
    

    使用分片集群时你需要知道:

    1. 用户访问 mongos 跟访问单个 mongod 类似

    2. 所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个mongos

    3. mongos 本身是无状态的,可任意扩展,集群的服务能力为『Shard服务能力之和』与『mongos服务能力之和』的最小值。

    4. 访问分片集群时,最好将应用负载均匀的分散到多个 mongos 上

    通过上述方式连接分片集群时,客户端会自动将请求分散到多个mongos 上,以实现负载均衡;同时,当URI 里 mongos 数量在2个及以上时,当有mongos故障时,客户端能自动进行 failover,将请求都分散到状态正常的 mongos 上。

    当 mongos 数量很多时,还可以按应用来将 mongos 进行分组,比如有2个应用A、B、有4个mongos,可以让应用A 访问 mongos 1-2(URI里只指定mongos 1-2 的地址), 应用B 来访问 mongos 3-4(URI里只指定mongos 3-4 的地址),根据这种方法来实现应用间的访问隔离(应用访问的mongos彼此隔离,但后端 Shard 仍然是共享的)。

    相关文章

      网友评论

        本文标题:【mongoDB】mongoDB副本集登陆方式

        本文链接:https://www.haomeiwen.com/subject/zumfjdtx.html