通过Mongo Shell连接MongoDB分片集群实例

Mongo ShellMongoDB数据库自带的数据库管理工具,您可以在本地或ECS上安装Mongo Shell工具,然后通过Mongo Shell连接MongoDB分片集群实例。

前提条件

操作步骤

  1. 访问MongoDB分片集群实例列表,在上方选择资源组和地域,然后单击目标实例ID。

  2. 在目标实例页面的左侧导航栏,单击数据库连接

  3. 查看并获取连接地址。

    1. 确定地址类型。

      • 私网连接

        专有网络是一种隔离的网络环境,安全性和性能均高于传统的经典网络。 云数据库MongoDB实例默认提供专有网络连接地址,通过专有网络连接云数据库MongoDB实例可以获取更高的安全性和性能。

      • 公网连接

        由于通过公网连接实例存在一定的安全风险,云数据库MongoDB实例默认未提供公网连接地址。如果您需要通过公网连接云数据库MongoDB实例,可以申请公网连接地址

    2. 获取连接地址。

      ConnectionStringURI SRV

      ConnectionStringURI SRV:实例的高可用地址,可以执行数据库的读写操作。建议生产环境的应用程序通过该地址连接实例,当分片集群实例增删mongos节点时,使用SRV地址可以无感与实例交互,简化了应用程序的设计和维护。

      重要
      • 默认情况下控制台不显示SRV地址,如需使用请单击数据库连接页面的申请私网SRV地址申请公网SRV地址

      • 申请公网SRV地址前,您需要先开通Mongos节点的公网地址。通过公网SRV地址连接MongoDB实例后,客户端会自动将请求发送到已开通公网地址的Mongos节点上。

      • SRV地址仅支持云盘版实例。

      • 专有网络的私网SRV地址最多关联20Mongos节点,因专有网络内DNS解析协议的限制,在超出20Mongos节点的情况下,超出的节点将不能分担请求负载。公网SRV地址不受此限制。

      • 推荐生产环境的应用程序通过ConnectionStringURI SRV地址连接数据库,客户端自动将请求发送到实例的多个节点上,实现负载均衡。当某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的节点上。当增删节点时,可以无感与集群交互,简化了应用程序的设计和维护。

      • 低版本Driver不支持SRV地址或不支持自动发现节点,例如:

        • pymongo低于3.9.0版本。

        • mongo-java-driver低于3.10.0版本。

        • mongodb-go-driver低于1.1.0版本。

        • mongodb node.js低于3.3.0版本。

        • mongo-cxx-driver低于3.8 版本。

      格式:

      mongodb+srv://<username>:<password>@<srv-host>/<database>?[authSource=<authenticationDatabase>]<other_options>

      参数说明:

      参数

      说明

      mongodb+srv://

      连接字符串的前缀,表示使用DNS SRV记录进行服务发现。

      <username>

      数据库账号的名称,默认为root。

      <password>

      数据库账号的密码。

      <srv-host>

      主机名。

      <database>

      要访问的数据库名称,默认为admin。

      authSource=<authenticationDatabase>(可选)

      该参数用于指定数据库账号所属的数据库。<authenticationDatabase>为鉴权数据库名称。

      说明

      云数据库MongoDBSRV连接串的TXT记录指明了authSource=admin,会覆盖<database>的鉴权属性。因此,当您需要修改鉴权数据库时,需要手动指明authSource=<authenticationDatabase>,而非修改<database>参数。更多介绍,请参见MongoDB官网文档

      <other_options>

      其他可选参数。

      说明

      SVR连接的SSL选项默认值为true,如果您不需要使用SSL加密连接,需要在连接串上添加参数ssl=false。更多可选参数的介绍,请参见MongoDB官网文档

      示例:

      数据库账号为test,所属数据库为admin。

      mongodb+srv://test:****@dds-2zef4c23****-srv.mongodb.pre.nosql.aliyuncs.com/admin?ssl=false

      ConnectionStringURI

      ConnectionStringURI:实例的高可用地址,可以执行数据库的读写操作。低版本Driver不支持SRV地址或不支持自动发现节点时,可使用该地址连接数据库。

      云数据库 MongoDB 版提供了Mongos组件和Shard组件的ConnectionStringURI地址。客户端自动将请求发送到对应组件的多个节点上,实现负载均衡。当组件内的某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的节点上。

      说明
      • 默认情况下,控制台仅会展示MongosConnectionStringURI地址,ShardConnectionStringURI地址需要申请对应节点的连接地址

      • 未设置readPreferencereadPreferenceTags参数时,会将读请求发送到主节点。

      • 当分片集群实例增删mongos节点后,需要修改该连接串,增删对应的节点连接信息。

      Mongos组件和Shard组件的ConnectionStringURI地址的说明分别如下:

      Mongos

      重要

      推荐生产环境的应用程序通过ConnectionStringURI连接数据库,客户端自动将请求发送到Mongos组件的多个节点上,实现负载均衡。Mongos组件的某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的Mongos节点上。

      格式:

      mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>[?&authSource=<authenticationDatabase>]

      参数

      说明

      <username>

      数据库账号的名称,默认为root。

      <password>

      数据库账号的密码。

      <host>

      Mongos组件中节点的域名信息

      <port>

      Mongos组件中节点的端口

      <database>

      要访问的数据库名称,默认为admin。

      authSource=<authenticationDatabase>(可选)

      该参数用于指定数据库账号所属的数据库。<authenticationDatabase>为鉴权数据库名称。如果不配置该参数,<database>会作为鉴权数据库。

      示例:

      数据库账号为test,所属数据库为admin。

      mongodb://test:****@s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717,s-bp1773180e38****.mongodb.rds.aliyuncs.com:3717/admin

      Shard

      Shard组件的ConnectionStringURI地址为高可用地址,实现负载均衡及高可用,连接该地址可以执行数据库的读写操作。该地址包含Shard组件中所有节点的地址,建议生产环境的应用程序通过该地址连接实例。

      重要

      生产环境的应用程序建议通过ConnectionStringURI地址连接实例,可以确保连接的节点始终为主节点,不会因为主备切换而影响应用的读写操作。

      格式:

      mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]

      参数说明:

      参数

      说明

      <username>

      数据库账号的名称,默认为root。

      <password>

      数据库账号的密码。

      <host>

      主节点、从节点和只读节点的域名信息

      <port>

      主节点、从节点和只读节点的端口

      <database>

      要访问的数据库名称,默认为admin。

      replicaSet=<replicaSet_value>

      该参数可以将读请求发送到副本集实例的所有节点。<replicaSet_value>为实例高可用连接地址的唯一标识ID。

      authSource=<authenticationDatabase>(可选)

      该参数用于指定数据库账号所属的数据库。<authenticationDatabase>为鉴权数据库名称。如果不配置该参数,<database>会作为鉴权数据库。

      readPreference=[primary | primaryPreferred | secondary | secondaryPreferred](可选)

      该参数可以实现读写分离和负载均衡,能够将写请求发送到主节点,将读请求发送到参数指定节点,取值说明如下:

      • readPreference=primary:读请求仅发送到主节点。

      • readPreference=primaryPreferred:读请求优先发送到主节点。如果主节点故障,将读请求发送到从节点和只读节点。

      • readPreference=secondary:读请求仅发送到从节点和只读节点。如果从节点和只读节点都出现故障,读请求失败,不会发送到主节点。

      • readPreference=secondaryPreferred:读请求优先发送到从节点和只读节点。如果从节点和只读节点都出现故障,该参数将读请求发送到主节点。

      说明

      当读请求发送到从节点和只读节点时,可能会出现负载不均的情况,如果需要进一步指定节点,请设置参数readPreferenceTags。

      readPreferenceTags=<readonly_Tags>(可选)

      该参数可以将读请求优先发送到标签对应的节点。通常与参数readPreference一起使用,与primary模式不兼容。<readonly_Tags>为只读节点的标签键值对列表,支持的类型如下:

      • readPreferenceTags=role:electable:优先读从节点。

        说明

        该选项仅对云盘版实例生效。

      • readPreferenceTags=role:readonly:优先读只读节点。

      MongoDB实例可以灵活使用readPreferencereadPreferenceTags参数,通过不同标签的组合,实现不同的场景需求:

      读请求主节点响应策略

      读请求发送的节点

      参数组合方案

      读请求失败情况下,读请求发送到主节点

      优先读主节点

      readPreference=primaryPreferred

      优先读从节点和只读节点

      readPreference=secondaryPreferred

      优先读从节点

      说明

      如果从节点故障,读请求发送到主节点。

      readPreference=secondaryPreferred&readPreferenceTags=role:electable

      优先读只读节点

      说明

      如果只读节点故障,读请求发送到主节点。

      readPreference=secondaryPreferred&readPreferenceTags=role:readonly

      读请求失败情况下,读请求不发送到主节点

      仅读从节点和只读节点

      readPreference=secondary

      仅读从节点

      说明

      如果从节点故障,读取操作失败。

      readPreference=secondary&readPreferenceTags=role:electable

      仅读只读节点

      说明

      如果只读节点故障,读取操作失败。

      readPreference=secondary&readPreferenceTags=role:readonly

      示例:

      mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****

      Mongos地址

      Mongos组件的连接地址,包括主节点(Primary)的连接地址。

      说明

      日常测试时,仅需连接Mongos组件的任意节点。

      格式:

      <host>:<port>

      参数说明:

      参数

      说明

      <host>

      Mongos组件中节点的域名信息

      <port>

      Mongos组件中节点的端口

      示例:

      s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717

      Shard地址

      Shard组件的连接地址,包括主节点(Primary)、从节点(Secondary)和只读节点(ReadOnly)的连接地址。

      说明
      • 默认情况下,控制台仅会展示Mongos的连接地址,ShardConfigServer的连接地址需要申请对应节点连接地址

      • 只有Shard组件中存在只读节点时,您才能看到Shard组件的只读节点连接地址。

      格式:

      <host>:<port>

      参数说明:

      参数

      说明

      <host>

      Shard组件中节点的域名信息

      <port>

      Shard组件中节点的端口

      示例:

      s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717

      ConfigServer地址

      ConfigServer组件的连接地址,包括主节点(Primary)和从节点(Secondary)的连接地址。

      说明
      • 默认情况下,控制台仅会展示Mongos的连接地址,ShardConfigServer的连接地址需要申请对应节点连接地址

      • 仅本地盘版分片集群实例支持申请ConfigServer的连接地址。

      ConfigServer地址

      格式:

      <host>:<port>

      参数说明:

      参数

      说明

      <host>

      ConfigServer组件中节点的域名信息

      <port>

      ConfigServer组件中节点的端口

      示例:

      s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717
  4. 根据业务需要,在安装有Mongo Shell工具的客户端(本地服务器或ECS服务器)上连接云数据库MongoDB分片集群实例。

    通过高可用地址连接

    语法:

    mongo "<连接地址>"    

    参数说明:<连接地址>为实例的ConnectionStringURI SRVConnectionStringURI高可用地址。您需要替换高可用地址中的****为数据库账号的密码。

    示例:

    连接地址为实例的ConnectionStringURI地址,数据库账号为test,所属数据库为admin。

    mongo "mongodb://test:****@s-bp1d7b6277cd****.mongodb.rds.aliyuncs.com:3717,s-bp129f75f1d6****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****"    

    通过单节点地址连接

    1. 执行连接命令。

      语法:

      mongo --host <host> --port <port> -u <username> -p --authenticationDatabase <authenticationDatabase>

      参数说明:

      • <host>:节点的域名信息

      • <port>:节点的端口

      • <username>:数据库账号的名称,默认为root。

        重要

        不建议在生产环境中直接使用root账号连接数据库。您可以创建数据库账号并分配权限

      • <authenticationDatabase>:鉴权数据库名称,用于指定数据库账号所属的数据库。当数据库账号为root时,对应的数据库为admin。如果您希望指定其他数据库,请先在该数据库中使用db.createUser()命令创建账号,然后再使用该账号进行连接。

        重要

        数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。

      示例:

      数据库账号为test,所属数据库为admin。

      mongo --host s-bp1ea17b41abecf43****.mongodb.rds.aliyuncs.com --port 3717 -u test -p --authenticationDatabase admin
    2. 在命令行提示Enter password:时,输入数据库账号对应的密码并按回车键确认。

      说明

      输入密码时,密码字符是不可见的。

常见的连接场景

相关问题