Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for MongoDB
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Создание кластера
    • Подключение к базе данных
      • Обзор способов подключения к базе данных
      • Подключение к нешардированному кластеру
      • Подключение к шардированному кластеру
    • Остановка и запуск кластера
    • Изменение настроек кластера и базы данных
    • Переключение первичной реплики
    • Обновление версии MongoDB
    • Управление базами данных
    • Управление хостами кластера
    • Управление пользователями БД
    • Управление резервными копиями
    • Управление шардами
    • Просмотр логов кластера
    • Удаление кластера
    • Мониторинг состояния кластера и хостов
    • Диагностика производительности
    • Инструменты для анализа производительности
  • Практические руководства
  • Концепции
  • Управление доступом
  • Правила тарификации
  • Справочник API
  • История изменений
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Подключение к базе данных
  3. Подключение к нешардированному кластеру

Подключение к нешардированному MongoDB-кластеру

Статья создана
Yandex Cloud
,
улучшена
Dmitry A.
  • Подключение из графических IDE
  • Примеры строк подключения
    • Bash
    • Go
    • Java
    • Node.js
    • PHP
    • PowerShell
    • Python

Подключение из графических IDE

Подключения проверялись в следующем окружении:

  • MacOS Big Sur 11.3.
  • JetBrains DataGrip: 2021.1.
  • DBeaver Enterprise: 21.0.

Подключаться из графических IDE можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.

Чтобы избежать ошибок при подключении, сохраните сертификат в локальную папку, для доступа к которой не требуются права администратора.

DataGrip
DBeaver
  1. Создайте источник данных:
    1. Выберите в меню File → New → Data Source → MongoDB.
    2. На вкладке General:
      1. Укажите параметры подключения:

        • User, Password — имя и пароль пользователя БД;

        • URL — строка подключения:

          mongodb://<FQDN хоста 1 MongoDB>:27018,..,<FQDN хоста N MongoDB>:27018/<имя БД>
          
      2. Нажмите ссылку Download, чтобы загрузить драйвер соединения.

    3. На вкладке SSH/SSL:
      1. Включите настройку Use SSL.
      2. В поле CA file укажите путь к файлу SSL-сертификата для подключения.
  2. Нажмите ссылку Test Connection для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  3. Нажмите кнопку OK, чтобы сохранить источник данных.

Поддержка подключения к MongoDB-кластеру доступна только в коммерческих редакциях DBeaver.

Чтобы подключиться к кластеру:

  1. Создайте новое соединение с БД:
    1. Выберите в меню База данных пункт Новое соединение.
    2. Выберите из списка БД MongoDB.
    3. Нажмите кнопку Далее.
    4. Настройте параметры подключения на вкладке Главное:
      1. В блоке Адрес переключите Type на URL и укажите строку подключения:

        mongodb://<FQDN хоста 1 MongoDB>:27018,..,<FQDN хоста N MongoDB>:27018/<имя БД>
        
      2. В списке Устройство выберите значение SCRAM-SHA-256 (тип шифрования пароля при подключении).

      3. В блоке Полномочия укажите имя и пароль пользователя БД.

    5. На вкладке SSL:
      1. Включите настройку Использовать SSL.
      2. В поле Корневой сертификат укажите путь к сохраненному файлу SSL-сертификата.
      3. В блоке Настройки включите Пропустить валидацию имени хоста.
  2. Нажмите кнопку Тест соединения ... для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  3. Нажмите кнопку Готово, чтобы сохранить настройки соединения с БД.

Примеры строк подключения

Примеры для Linux проверялись в следующем окружении:

  • Виртуальная машина в Yandex Cloud с Ubuntu 20.04 LTS.
  • Bash: 5.0.16.
  • Python: 3.8.2; pip3: 20.0.2.
  • PHP: 7.4.3.
  • OpenJDK: 11.0.8; Maven: 3.6.3.
  • Node.JS: 10.19.0, npm: 6.14.4.
  • Go: 1.13.8.
  • Ruby: 2.7.0p0.
  • unixODBC: 2.3.6.

Примеры для Windows проверялись в следующем окружении:

  • Локальная машина с Windows 10 Pro build 19042.1052.
  • PowerShell: 5.1.19041.
  • cURL: 7.55.1 WinSSL.

Пример команды с заполненным FQDN хоста доступен в консоли управления по нажатию кнопки Подключиться на странице кластера.

В примерах ниже предполагается, что SSL-сертификат root.crt расположен в директории:

  • /home/<домашняя директория>/.mongodb/ для Ubuntu;
  • $HOME\.mongodb для Windows.

При успешном подключении к кластеру и выполнении тестового запроса будут выведены:

  • для примеров на PHP — результат выполнения команды ping;
  • для других примеров — имя БД, к которой было выполнено подключение.

Bash

Перед подключением установите утилиту MongoDB Shell.

Подключение с SSL для MongoDB 4.2 и выше
Подключение с SSL для MongoDB 4.0
Подключение без SSL
mongosh --norc \
        --tls \
        --tlsCAFile /home/<домашняя директория>/.mongodb/root.crt \
        --host '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018' \
        --username <имя пользователя БД> \
        --password <пароль пользователя БД> \
        <имя БД>
mongosh --norc \
        --ssl \
        --sslCAFile /home/<домашняя директория>/.mongodb/root.crt \
        --host '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018' \
        --username <имя пользователя БД> \
        --password <пароль пользователя БД> \
        <имя БД>
mongosh --norc \
        --host '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018' \
        --username <имя пользователя БД> \
        --password <пароль пользователя БД> \
        <имя БД>

После подключения выполните команду db.

Go

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes golang git && \
    go get go.mongodb.org/mongo-driver/mongo
Подключение с SSL
Подключение без SSL

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_RS = "<имя набора реплик>"
      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MongoDB>:27018",
                            ...,
                            "<FQDN хоста N MongoDB>:27018"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      const CACERT = "/home/<домашняя директория>/.mongodb/root.crt"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?replicaSet=%s&tls=true&tlsCaFile=%s",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME,
              DB_RS,
              CACERT)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_RS = "<имя набора реплик>"
      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MongoDB>:27018",
                            ...,
                            "<FQDN хоста N MongoDB>:27018"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?replicaSet=%s&tls=false",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME,
              DB_RS)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

Подключение:

go run connect.go

Java

Перед подключением:

  1. Установите зависимости:

    sudo apt update && sudo apt install --yes default-jdk maven
    
  2. Добавьте SSL-сертификат в хранилище доверенных сертификатов Java (Java Key Store), чтобы драйвер MongoDB мог использовать этот сертификат при защищенном подключении к хостам кластера. При этом задайте пароль в параметре -storepass для защиты хранилища:

    cd ~/.mongodb && \
    sudo keytool -importcert \
                 -alias YandexCA -file root.crt \
                 -keystore ssl -storepass <пароль хранилища сертификатов, не короче 6 символов> \
                 --noprompt
    
  3. Создайте директорию для проекта Maven:

    cd ~/ && \
    mkdir --parents project/src/java/com/example && \
    cd ~/project
    
  4. Создайте конфигурационный файл для Maven:

    pom.xml
    <?xml version="1.0" encoding="utf-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>
      <artifactId>app</artifactId>
      <packaging>jar</packaging>
      <version>0.1.0</version>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.mongodb</groupId>
          <artifactId>mongodb-driver-sync</artifactId>
          <version>4.1.0</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>1.7.30</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <sourceDirectory>src</sourceDirectory>
        <resources>
          <resource>
            <directory>src</directory>
          </resource>
        </resources>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>attached</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <descriptorRefs>
                    <descriptorRef>
                    jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
                  <archive>
                    <manifest>
                      <mainClass>com.example.App</mainClass>
                    </manifest>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>com.example.App</mainClass>
                </manifest>
              </archive>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    

    Актуальные версии зависимостей для Maven:

    • mongodb-driver-sync;
    • slf4j-simple.
Подключение с SSL
Подключение без SSL

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    System.setProperty("javax.net.ssl.trustStore", "/home/<домашняя директория>/.mongodb/YATrustStore");
    System.setProperty("javax.net.ssl.trustStorePassword", "<пароль хранилища сертификатов>");

    final Integer DB_PORT = 27018;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MongoDB>", DB_PORT));
    ...,
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MongoDB>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .applyToSslSettings(builder -> builder.enabled(true))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    final Integer DB_PORT = 27018;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MongoDB>", DB_PORT));
    ...,
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MongoDB>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

Подключение:

mvn clean package && \
    java -jar target/app-0.1.0-jar-with-dependencies.jar

Node.js

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes nodejs npm && \
npm install mongodb
Подключение с SSL
Подключение без SSL

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_RS = '<имя набора реплик>'
const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MongoDB>:27018',
                  ...,
                  '<FQDN хоста N MongoDB>:27018']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'
const CACERT   = '/home/<домашняя директория>/.mongodb/root.crt'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  tls: true,
  tlsCAFile: CACERT,
  replicaSet: DB_RS,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
})

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_RS = '<имя набора реплик>'
const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MongoDB>:27018',
                  ...
                  '<FQDN хоста N MongoDB>:27018']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  replicaSet: DB_RS,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
})

Подключение:

node app.js

PHP

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes php php-mongodb
Подключение с SSL
Подключение без SSL

connect.php

<?php
  $DB_RS    = '<имя набора реплик>';
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018';
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';
  $CACERT   = '/home/<домашняя директория>/.mongodb/root.crt';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s?replicaSet=%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME,
      $DB_RS
  );

  $conn = new \MongoDB\Driver\Manager($uri, ["tls" => "true", "tlsCAFile" => $CACERT], []);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
        $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

connect.php

<?php
  $DB_RS    = '<имя набора реплик>';
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018';
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s?replicaSet=%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME,
      $DB_RS
  );

  $conn = new \MongoDB\Driver\Manager($uri);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
      $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

Подключение:

php connect.php

PowerShell

Перед подключением установите утилиту MongoDB Shell.

Подключение с SSL для MongoDB 4.2 и выше
Подключение без SSL
mongosh.exe --norc `
            --host '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018' `
            --tls `
            --tlsCAFile $HOME\.mongodb\root.crt `
            --username <имя пользователя БД> `
            --password <пароль пользователя БД> `
            <имя БД>
mongosh.exe --norc `
            --host '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018' `
            --username <имя пользователя БД> `
            --password <пароль пользователя БД> `
            <имя БД>

После подключения выполните команду db.

Python

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes python3 python3-pip && \
pip3 install pyMongo
Подключение с SSL
Подключение без SSL

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

CACERT = '/home/<домашняя директория>/.mongodb/root.crt'
DB_RS = '<имя набора реплик>'
DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MongoDB>:27018',
      ...,
      '<FQDN хоста N MongoDB>:27018'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?replicaSet={rs}&authSource={auth_src}'.format(
          user=quote(DB_USER),
          pw=quote(DB_PASS),
          rs=DB_RS,
          hosts=DB_HOSTS,
          auth_src=DB_NAME)

conn = pymongo.MongoClient(
    url,
    tls=True,
    tlsCAFile=CACERT)

db = conn[DB_NAME]
print(db.name)

conn.close()

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

DB_RS = '<имя набора реплик>'
DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MongoDB>:27018',
      ...,
      '<FQDN хоста N MongoDB>:27018'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?replicaSet={rs}&authSource={auth_src}'.format(
          user=quote(DB_USER),
          pw=quote(DB_PASS),
          rs=DB_RS,
          hosts=DB_HOSTS,
          auth_src=DB_NAME)

conn = pymongo.MongoClient(url)

db = conn[DB_NAME]
print(db.name)

conn.close()

Подключение:

python3 connect.py

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Подключение из графических IDE
  • Примеры строк подключения
  • Bash
  • Go
  • Java
  • Node.js
  • PHP
  • PowerShell
  • Python