[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for YDB](../index.md) > [Практические руководства](index.md) > Развертывание кластера YDB во внешней инфраструктуре

# Развертывание кластера YDB во внешней инфраструктуре

СУБД YDB распространяется с открытым исходным кодом, поэтому вы можете [самостоятельно развернуть](https://ydb.tech/docs/ru/devops/deployment-options/) кластер YDB на собственном оборудовании или в инфраструктуре стороннего поставщика облачных сервисов.

В этом руководстве с помощью [Ansible](https://www.ansible.com/) вы развернете кластер YDB на серверах, которые расположены вне инфраструктуры Yandex Cloud.

{% note info %}

О других способах развертывания кластеров YDB во внешней инфраструктуре читайте в разделе [Способы развертывания YDB](https://ydb.tech/docs/ru/devops/deployment-options/).

{% endnote %}

Чтобы самостоятельно развернуть [кластер YDB](../concepts/resources.md#cluster) во внешней инфраструктуре с помощью Ansible:

1. [Подготовьте инфраструктуру для развертывания кластера](#prepare-infrastructure).
1. [Подготовьте управляющую машину](#prepare-controller).
1. [Разверните кластер](#deploy-cluster).
1. [Проверьте работу кластера](#test-cluster-operation).
1. [Перенесите данные из резервной копии](#restore-data).
1. [Управляйте кластером](#manage-cluster).

Если развертывание с помощью Ansible вам не подходит, рассмотрите [другие способы](#ansible-alternatives) развертывания кластера YDB во внешней инфраструктуре.

## Подготовьте инфраструктуру для развертывания кластера {#prepare-infrastructure}

### Выберите площадку для размещения серверов кластера {#choose-site}

Вы можете развернуть кластер YDB на физических серверах или виртуальных машинах. СУБД YDB работает с данными без использования файловой системы сервера и обращается к дискам напрямую как к блочным устройствам, поэтому рекомендуем использовать в кластерах физические (локальные) диски [SSD](https://ru.wikipedia.org/wiki/Твердотельный_накопитель) или [NVMe](https://ru.wikipedia.org/wiki/NVM_Express).

Если вы развертываете кластер на виртуальных машинах, не используйте сетевые диски, поскольку они снижают производительность СУБД. При развертывании кластера на виртуальных машинах не допускайте переподписки по vCPU и RAM: убедитесь, что под каждую виртуальную машину выделено необходимое количество ядер и памяти, которые гипервизор не будет перераспределять в пользу других ВМ на хосте.

Для промышленной эксплуатации и тестирования производительности рекомендуется использовать диски размером не менее 800 ГБ без применения любых технологий виртуализации системы хранения данных. Развертывать кластер YDB на виртуальных машинах с сетевыми дисками можно только для знакомства с СУБД и функциональных проверок.

В качестве площадки для размещения кластера вы можете использовать выделенные серверы в сервисе [Yandex BareMetal](../../baremetal/index.md). В отношении серверов BareMetal действуют [квоты](../../baremetal/concepts/limits.md#baremetal-quotas), которые вы можете [запросить](https://kz.center.yandex.cloud/support) под ваши задачи.

### Выберите конфигурацию кластера {#choose-cluster-config}

При развертывании кластера YDB вам потребуется выбрать [режим работы](https://ydb.tech/docs/ru/concepts/topology#cluster-config) распределенного хранилища YDB. Выбор режима зависит от ожидаемой нагрузки на кластер и требований к доступности баз данных. Этот выбор определяет будущую конфигурацию кластера.

После создания кластера изменить режим его работы нельзя. При этом позднее за счет новых серверов вы сможете расширить кластер, не останавливая его работу и не прерывая доступ к данным.

Минимальная отказоустойчивая конфигурация кластера развертывается на трех серверах и использует режим `mirror-3-dc`. Для развертывания такой конфигурации потребуются три сервера, каждый с четырьмя дисками: один диск под систему, три — под данные. Кластер YDB хранит копию данных на каждом из трех серверов и продолжает работу при отказе одного из них.

{% note warning %}

Чтобы полный отказ дата-центра не привел к недоступности данных в кластере, разместите серверы в трех разных дата-центрах.

{% endnote %}

Готовый пример Ansible-плейбука (англ. _playbook_) для развертывания кластера в режиме `mirror-3-dc` доступен в [репозитории](https://github.com/ydb-platform/ydb-ansible-examples/tree/main/3-nodes-mirror-3-dc) на GitHub. Это наиболее распространенный режим работы кластера, поэтому далее в этом руководстве вы развернете кластер YDB с использованием этого примера.

Репозиторий также содержит примеры плейбуков для конфигураций с повышенными требованиями к отказоустойчивости:

* кластер в [режиме](https://github.com/ydb-platform/ydb-ansible-examples/tree/main/9-nodes-mirror-3-dc) `mirror-3-dc` на девяти серверах в трех дата-центрах продолжает работу при отказе дата-центра и еще одной стойки;
* кластер в [режиме](https://github.com/ydb-platform/ydb-ansible-examples/tree/main/8-nodes-block-4-2) `block-4-2` на восьми серверах в одном дата-центре продолжает работу при отказе двух стоек.

Подробнее о режимах работы кластеров и требованиях к оборудованию читайте в разделе [Топология кластера YDB](https://ydb.tech/docs/ru/concepts/topology).

### Подготовьте серверы {#prepare-servers}

Кластер YDB состоит из [узлов хранения](https://ydb.tech/docs/ru/concepts/glossary#storage-node), которые сохраняют данные на дисках, и [узлов базы данных](https://ydb.tech/docs/ru/concepts/glossary#database-node), которые обрабатывают запросы. В параметрах Ansible узлы хранения называются статическими (`static`), а узлы базы данных — динамическими (`dynamic`). В рассматриваемом примере на каждом сервере кластера работают один узел хранения и два узла базы данных.

Перед установкой убедитесь, что ваши серверы соответствуют [системным требованиям](https://ydb.tech/docs/ru/devops/concepts/system-requirements) YDB и требованиям выбранного примера:

* **Архитектура процессора**: `x86-64` с поддержкой инструкций `AVX2`.

    Архитектура `ARM` для серверных развертываний YDB не поддерживается.
* **Количество vCPU на один сервер для выбранного примера**: 24.

    Узел хранения и два узла базы данных используют по 8 vCPU каждый. Это требование относится к конфигурации из выбранного примера. Вы можете уменьшить количество vCPU, изменив параметры установки и количество узлов базы данных.
* **Минимальный объем RAM на один сервер**: 16 ГБ.

    Для защиты от аппаратных сбоев лучше использовать память с коррекцией ошибок (ECC).
* **Диски**:

    * Один системный диск.
    * Как минимум три диска для данных: объем каждого не менее 80 ГБ (для промышленной эксплуатации — не менее 800 ГБ).
    
    YDB использует диски под данные целиком: при установке плейбук размечает и очищает их, поэтому на этих дисках не должно быть нужных данных, разделов и файловых систем.
* **Операционная система**: Linux с ядром версии `4.19` или выше и библиотекой `libc` версии `2.30` или выше. Например: Ubuntu 20.04 или Debian 11.

    Наилучшую производительность обеспечивают ОС с ядром версии 6.6 и выше — в них улучшены подсистемы ввода-вывода, планировщика и управления памятью.
* **Программное обеспечение**: на каждом сервере установлен Python версии 3.8 или выше, доступный по пути `/usr/bin/python3`.
* **Права доступа**: пользователь, от имени которого Ansible подключается к серверам, может выполнять команды через `sudo` без ввода пароля.
* **Сеть**:

    * Серверы должны быть связаны между собой по сети. Управляющая машина должна подключаться к каждому из них по [SSH](../../glossary/ssh-keygen.md) (открыт TCP-порт `22`).
    * FQDN серверов должны разрешаться в IP-адреса на управляющей машине, на всех серверах кластера и на машине с YDB CLI.
    * На серверах должен быть открыт доступ в интернет: плейбук устанавливает системные пакеты из репозиториев дистрибутива.
    * NTP-серверы, указанные в параметре `system_ntp_servers`, должны быть доступны из сети кластера. По этим NTP-серверам плейбук настраивает синхронизацию часов.
    * Сетевая конфигурация должна разрешать TCP-соединения по следующим портам:

        * `2135–2138` — gRPC для клиент-кластерного взаимодействия;
        * `19001–19004` — Interconnect для внутрикластерного взаимодействия узлов;
        * `8765–8768` — HTTP-интерфейс YDB UI.
        
        В [параметре](#setup-parameters) `ydb_dynnodes` (значение поля `offset`) вы можете изменить номера портов, которые используются узлами базы данных (при нулевом значении `offset` используются, соответственно, порты `2136`, `19002` и `8766`).

        В примере из репозитория значения `offset` равны `1` и `2`, поэтому узлы базы данных используют, соответственно, TCP-порты `2137` и `2138`, `19003` и `19004`, `8767` и `8768`. Приложениям и YDB CLI нужен доступ к gRPC-портам всех узлов.

## Подготовьте управляющую машину {#prepare-controller}

Ansible запускается на управляющей машине, с которой должен быть открыт доступ по SSH ко всем серверам кластера. Это может быть ваш рабочий компьютер или отдельный сервер. На управляющей машине должен быть установлен Python (версии от `3.10` до `3.14`) и пакет для работы с виртуальными окружениями `venv`.

В руководстве используются YDB версии `24.4.4.12`, `ansible-core` версии `2.16.14`, репозиторий `ydb-ansible-examples` в ревизии `4e7cca2fa2ebb5a9e3c6bae186d2eed504d7277b` и коллекция `ydb-ansible` в ревизии `732eddb6d4aa99bdb4b2ca1658ba97c91e07aecd`. При использовании других версий порядок действий и результат могут отличаться.

Чтобы подготовить управляющую машину:

1. Создайте и активируйте новое виртуальное окружение Python:

    ```bash
    python3 -m venv venv-ansible
    source venv-ansible/bin/activate
    ```
1. Клонируйте репозиторий с примерами YDB:

    ```bash
    git clone https://github.com/ydb-platform/ydb-ansible-examples.git
    cd ydb-ansible-examples
    git checkout 4e7cca2fa2ebb5a9e3c6bae186d2eed504d7277b
    ```
1. Установите зависимости, необходимые для развертывания примера:

    ```bash
    pip3 install -r requirements.txt
    ansible-galaxy collection install git+https://github.com/ydb-platform/ydb-ansible.git,732eddb6d4aa99bdb4b2ca1658ba97c91e07aecd
    ```

    Из файла `requirements.txt` команда pip3 устанавливает `ansible-core` версии `2.16.14`, а команда ansible-galaxy устанавливает коллекцию плейбуков `ydb_platform.ydb` из репозитория `ydb-ansible` в указанной ревизии.

Подробнее о подготовке управляющей машины читайте в разделе [Подготовка к развертыванию](https://ydb.tech/docs/ru/devops/deployment-options/ansible/initial-deployment/deployment-preparation).

### Задайте настройки конфигурации кластера {#set-cluster-config-files}

Задайте настройки вашего будущего кластера. Файлы конфигурации расположены в директории с примером развертывания кластера в минимальной конфигурации (`3-nodes-mirror-3-dc`). Далее в инструкциях пути к файлам будут указываться относительно этой директории.

#### Настройки подключения по SSH {#ssh-connection}

Конфигурация Ansible сохранена в файле `ansible.cfg`. В примере из репозитория проверка подлинности SSH-хостов отключена с помощью параметра `host_key_checking = False`, а в параметре `ssh_args` указаны аргументы `UserKnownHostsFile=/dev/null` и `StrictHostKeyChecking=no`. Такая конфигурация повышает удобство автоматизации, но снижает уровень безопасности SSH-соединения. Используйте ее только для тестовых и временных установок.

При промышленной эксплуатации YDB рекомендуется включить проверку подлинности SSH-хостов и настроить доверенные ключи вручную. Для этого:

1. Перейдите в директорию с нужным примером:

    ```bash
    cd 3-nodes-mirror-3-dc
    ```
1. В любом текстовом редакторе откройте основной файл конфигурации Ansible `ansible.cfg`.
1. Замените значение параметра `host_key_checking` на `True`.
1. В параметре `ssh_args` удалите аргументы `UserKnownHostsFile=/dev/null` и `StrictHostKeyChecking=no`, затем сохраните изменения.
1. Получите открытые ключи серверов кластера и выведите их отпечатки:

    ```bash
    ssh-keyscan -H <fqdn_сервера_1> <fqdn_сервера_2> <fqdn_сервера_3> > ydb_known_hosts
    ssh-keygen -lf ydb_known_hosts
    ```
1. Сверьте полученные отпечатки по доверенному каналу.
1. Если отпечатки совпадают, добавьте проверенные ключи в файл `~/.ssh/known_hosts` на управляющей машине:

    ```bash
    cat ydb_known_hosts >> ~/.ssh/known_hosts
    ```

Подробнее о файле конфигурации Ansible читайте в [документации к Ansible](https://docs.ansible.com/projects/ansible/latest/reference_appendices/config.html).

#### Параметры установки {#setup-parameters}

Задайте параметры установки:

1. Убедитесь, что в терминале управляющей машины у вас открыта директория `3-nodes-mirror-3-dc` репозитория с примерами.
1. В любом текстовом редакторе откройте основной файл инвентаризации `inventory/50-inventory.yaml` и внесите в него следующие изменения:

    * В секциях `hosts` и `ydb_brokers` замените имена `static-node-1.ydb-cluster.com`, `static-node-2.ydb-cluster.com` и `static-node-3.ydb-cluster.com` на полные доменные имена (FQDN) ваших серверов.
    * В поле `ansible_user` задайте имя пользователя, от имени которого Ansible будет подключаться по SSH к серверам кластера.
    * В поле `ansible_ssh_private_key_file` укажите локальный путь к SSH-ключу, с которым Ansible будет подключаться к серверам кластера.
    * В разделе `ydb_disks` перечислите имена дисков для данных YDB, которые установлены на ваших серверах.

        Пример предполагает, что система установлена на диск `/dev/vda` (не указан в файле конфигурации), а диски `/dev/vdb`, `/dev/vdc` и `/dev/vdd` предназначены для данных YDB.

        {% note tip %}

        Чтобы узнать имена дисков на ваших серверах, используйте команду `lsblk`.

        {% endnote %}
    * В поле `ydb_version` укажите версию YDB из списка на [странице загрузок](https://ydb.tech/docs/ru/downloads/ydb-open-source-database).

        Если вы предварительно скачали дистрибутив, удалите поле `ydb_version`, раскомментируйте поле `ydb_archive` и укажите в нем локальный путь к архиву. Не указывайте путь к архиву в поле `ydb_version`.
    * В поле `ydb_tls_dir` указан путь к директории с TLS-сертификатами. Добавьте ваши сертификаты в эту директорию. Подробнее о добавлении сертификатов читайте в разделе [Подготовка ключей и сертификатов TLS](https://ydb.tech/docs/ru/devops/deployment-options/manual/initial-deployment/deployment-preparation#tls-certificates).

        Если у вас нет своих TLS-сертификатов, удалите строку `ydb_tls_dir`. В этом случае плейбук сгенерирует для всех серверов самоподписанные сертификаты и сохранит их на управляющей машине в каталоге `files/TLS`. Сертификаты для имен серверов кластера также выпускает скрипт, который расположен в директории `TLS` репозитория с примерами.
    * В полях `ydb_cores_static` и `ydb_cores_dynamic` задайте количество vCPU, резервируемых на каждом сервере соответственно под [узел хранения](https://ydb.tech/docs/ru/concepts/glossary#storage-node) и [узлы базы данных](https://ydb.tech/docs/ru/concepts/glossary#database-node).

        В примере для обоих полей задано значение `8`, при этом в разделе `ydb_dynnodes` указаны два узла базы данных на один сервер. Поэтому для этой конфигурации на сервере должно быть суммарно 24 vCPU (8 под узел хранения и 16 под узлы базы данных).
        
        Если на ваших серверах меньше vCPU, уменьшите значения полей `ydb_cores_static` и `ydb_cores_dynamic` или оставьте в разделе `ydb_dynnodes` только один узел базы данных.
    * В поле `ydb_database_groups` задайте начальное число групп хранения в базе данных. Для тестирования на дисках небольшого объема рекомендуется значение `1`.

        Для дисков объемом более 800 ГБ в режиме `mirror-3-dc` рекомендуется указать 84% от общего количества дисков с округлением вниз.
    * В полях `system_timezone` и `system_ntp_servers` задайте значения, которые соответствуют расположению вашей инфраструктуры. При развертывании кластера в on-premise инфраструктуре настоятельно рекомендуем использовать локальный NTP-сервер. Подробнее читайте в разделе [Развертывание кластера с использованием конфигурации V1](https://ydb.tech/docs/ru/devops/deployment-options/ansible/initial-deployment/deployment-configuration-v1#inventory-create).
    * В поле `ydb_domain` оставьте значение `Root`, которое используется в файле `files/config.yaml`. В поле `ydb_dbname` задайте имя базы данных. В примере путь к базе данных задан как `/Root/database`.

Подробнее о настройках в файле конфигурации `50-inventory.yaml` читайте в разделе [Развертывание кластера с использованием конфигурации V1](https://ydb.tech/docs/ru/devops/deployment-options/ansible/initial-deployment/deployment-configuration-v1#inventory-create).

#### Конфигурация YDB {#cluster-config}

1. Убедитесь, что в терминале управляющей машины у вас открыта директория `3-nodes-mirror-3-dc` репозитория с примерами.
1. В любом текстовом редакторе откройте конфигурационный файл YDB `files/config.yaml` и внесите в него следующие изменения:

    В секциях `hosts` и `blob_storage_config` замените имена хостов на FQDN серверов, которые вы будете использовать для создания кластера.

    В режиме `mirror-3-dc` на трех узлах каждый сервер рассматривается как отдельный дата-центр, поэтому значения поля `data_center` у трех хостов в конфигурации должны различаться.

    Пути вида `/dev/disk/by-partlabel/ydb_disk_1` оставьте без изменений, потому что плейбук создает на дисках разделы с метками, которые указаны в секции `ydb_disks` файла инвентаризации `inventory/50-inventory.yaml`. Остальные настройки в файле `files/config.yaml` также оставьте без изменений.

Подробнее о настройках в файле конфигурации `config.yaml` читайте в разделе [Развертывание кластера с использованием конфигурации V1](https://ydb.tech/docs/ru/devops/deployment-options/ansible/initial-deployment/deployment-configuration-v1#ydb-config-prepare).

#### Пароль пользователя root {#root-password}

Пароль пользователя `root` в YDB хранится в файле `inventory/99-inventory-vault.yaml`, который зашифрован с помощью [Ansible Vault](https://docs.ansible.com/projects/ansible/latest/vault_guide/index.html).

Чтобы установить пароль пользователя `root`:

1. Убедитесь, что в терминале управляющей машины у вас открыта директория `3-nodes-mirror-3-dc` репозитория с примерами.
1. Пароль для шифрования хранится в файле `ansible_vault_password_file`. Откройте этот файл в любом текстовом редакторе.

    В примере в этом файле указано слово `password` — замените его своим паролем.
1. Создайте файл с паролем пользователя `root` и зашифруйте его:

    ```bash
    cat > inventory/99-inventory-vault.yaml <<'EOF'
    all:
      children:
        ydb:
          vars:
            ydb_password: '<пароль_пользователя_root>'
    EOF
    ansible-vault encrypt inventory/99-inventory-vault.yaml
    ```

    Кавычки необходимы, чтобы YAML обрабатывал пароль как строку. Если пароль содержит одинарную кавычку, продублируйте ее, например `pa''ssword`.

В результате пользователь `root` получит полный доступ к кластеру. Позднее вы сможете ограничить этот доступ.

Подробнее о работе Ansible Vault читайте в [документации к Ansible](https://docs.ansible.com/projects/ansible/latest/vault_guide/index.html).

## Разверните кластер {#deploy-cluster}

После того как вы подготовили все конфигурационные файлы, запустите установку кластера:

1. Убедитесь, что в терминале управляющей машины у вас открыта директория `3-nodes-mirror-3-dc` репозитория с примерами.
1. Выполните команду:

    ```bash
    ansible-playbook ydb_platform.ydb.initial_setup
    ```

    Вскоре после начала процесса потребуется подтвердить полную очистку настроенных дисков (указаны в разделе `ydb_disks` файла инвентаризации `inventory/50-inventory.yaml`). Перед подтверждением еще раз убедитесь, что в списке нет системного диска или дисков с нужными данными.
    
Процесс развертывания кластера может занять десятки минут в зависимости от окружения и настроек.

Последним шагом плейбук выполняет тестовые запросы к временным таблицам. При успешной установке тестовые запросы возвращают значения `count 3` и `sum 6`, и итоговая сводка `PLAY RECAP` показывает `failed=0` для каждого из серверов:

```text
TASK [ydb_platform.ydb.ydbd_dynamic : run test queries] ****************
ok: [static-node-1.ydb-cluster.com] => (item={'instance': 'a'}) => {... "msg": "all test queries were successful, details: {\"count\":3,\"sum\":6}\n"}
...
PLAY RECAP *************************************************************
static-node-1.ydb-cluster.com : ok=167  changed=80   unreachable=0    failed=0    skipped=167  rescued=0    ignored=0
static-node-2.ydb-cluster.com : ok=136  changed=69   unreachable=0    failed=0    skipped=113  rescued=0    ignored=0
static-node-3.ydb-cluster.com : ok=136  changed=69   unreachable=0    failed=0    skipped=113  rescued=0    ignored=0
```

После установки в кластере появится домен `Root`, база данных с именем из поля `ydb_dbname` и пользователь `root`.

Подробнее о развертывании кластера YDB читайте в разделе [Развертывание кластера с использованием конфигурации V1](https://ydb.tech/docs/ru//devops/deployment-options/ansible/initial-deployment/deployment-configuration-v1).

## Проверьте работу кластера {#test-cluster-operation}

### Проверка в YDB UI {#ui-check}

Самый простой способ проверить работу только что развернутого кластера — использовать [YDB UI](https://ydb.tech/docs/ru/reference/ydb-ui/), который доступен на TCP-порте `8765` каждого сервера.

Если из браузера есть прямой доступ к этому порту, YDB UI доступен по адресу `http://<fqdn_сервера>:8765`.

Если прямого доступа нет, настройте SSH-туннелирование. Для этого на локальной машине выполните команду:

```bash
ssh -L 8765:localhost:8765 -i <закрытый_ключ> <имя_пользователя>@<FQDN_сервера_кластера>
```

После успешного установления соединения YDB UI сервера будет доступен в браузере по адресу `http://localhost:8765`.

Чтобы проверить работоспособность кластера:

1. В браузере откройте страницу состояния кластера:

    * при прямом доступе: `http://<fqdn_сервера>:8765/monitoring/cluster/tenants`
    * при подключении через SSH-туннель: `http://localhost:8765/monitoring/cluster/tenants`
    
    Убедитесь, что все параметры кластера отображаются зеленым цветом.
1. В браузере откройте страницу состояния группы хранения:

    * при прямом доступе: `http://<fqdn_сервера>:8765/monitoring/cluster/storage`
    * при подключении через SSH-туннель: `http://localhost:8765/monitoring/cluster/storage`
    
    Убедитесь, что все индикаторы `VDisks` отображаются зеленым цветом, а при наведении курсора на каждый из индикаторов для него всплывает статус `Ok`.

### Тестирование с помощью YDB CLI {#ydb-cli-test}

Протестировать работоспособность кластера можно с помощью встроенных нагрузочных тестов в YDB CLI. Для этого:

1. [Установите](https://ydb.tech/docs/ru/reference/ydb-cli/install) YDB CLI.
1. Убедитесь, что в терминале управляющей машины у вас открыта директория `3-nodes-mirror-3-dc` репозитория с примерами на управляющей машине.
1. Создайте профиль подключения YDB CLI:

    ```bash
    ydb \
      config profile create <имя_профиля> \
      -d /<домен>/<имя_базы> \
      -e grpcs://<FQDN_сервера>:2135 \
      --ca-file $(pwd)/files/TLS/certs/ca.crt \
      --user root \
      --password-file <путь_к_файлу_с_паролем>
    ```

    Где:

    * `<имя_профиля>` — имя создаваемого профиля подключения.
    * `-d` — путь к базе данных, где `<домен>` — значение поля `ydb_domain`, а `<имя_базы>` — значение поля `ydb_dbname` в файле `inventory/50-inventory.yaml`, который вы настроили [ранее](#setup-parameters). Путь к базе данных в примере — `/Root/database`.
    * `-e` — конечная точка (эндпоинт) хоста сервера, строка в формате `protocol://host:port`. Допускается указать FQDN любого сервера в кластере без указания порта. По умолчанию используется порт `2135`.
    * `--ca-file` — путь к корневому TLS-сертификату для подключений к базе данных по `grpcs`. Путь к файлу `ca.crt` в приведенном примере указывает на сертификаты, которые сгенерировал плейбук. Если вы использовали собственные сертификаты, укажите путь к вашему файлу `ca.crt`.
    * `--password-file` — путь к файлу с паролем. Удалите этот параметр, чтобы ввести пароль вручную.
1. Выполните тестовый [YQL](https://ydb.tech/docs/ru/yql/reference/)-запрос:

    ```bash
    ydb -p <имя_профиля> sql -s 'SELECT 1;'
    ```

    Команда выведет в терминал результат запроса `SELECT 1` в табличной форме.
1. Создайте тестовую таблицу `kv_test`:

    ```bash
    ydb -p <имя_профиля> workload kv init --init-upserts 1000 --cols 4
    ```

    Команда создаст тестовую таблицу `kv_test` из четырех столбцов и 1 000 строк.
1. Убедитесь, что таблица `kv_test` создалась и была заполнена тестовыми данными:

    ```bash
    ydb -p <имя_профиля> sql -s 'select * from kv_test limit 10;'
    ```

    Команда выведет в терминал таблицу из первых десяти строк.
1. Выполните нагрузочный тест `upsert` с выводом времени выполнения:

    ```bash
    ydb -p <имя_профиля> workload kv run upsert --print-timestamp
    ```

    В результате команда выведет таблицу с количеством транзакций в секунду, повторов и ошибок, а также процентили задержек запросов:

    ```text
    Window Txs/Sec Retries Errors  p50(ms) p95(ms) p99(ms) pMax(ms)        Timestamp
    1          727 0       0       11      27      71      116     2024-02-14T12:56:39Z
    2          882 0       0       10      21      29      38      2024-02-14T12:56:40Z
    3          848 0       0       10      22      30      105     2024-02-14T12:56:41Z
    4          901 0       0       9       20      27      42      2024-02-14T12:56:42Z
    5          879 0       0       10      22      31      59      2024-02-14T12:56:43Z
    ...
    ```
1. Удалите таблицу `kv_test`:

    ```bash
    ydb -p <имя_профиля> workload kv clean
    ```

Подробнее о параметрах создания тестовой таблицы и тестах читайте в разделе [Key-Value нагрузка](https://ydb.tech/docs/ru/reference/ydb-cli/workload-kv).

## Перенесите данные из резервной копии {#restore-data}

Если ранее вы выгружали данные из облачного кластера Yandex Managed Service for YDB в [бакет](../../storage/concepts/bucket.md) Yandex Object Storage с помощью [команды](https://ydb.tech/docs/ru/reference/ydb-cli/export-import/export-s3) YDB CLI `ydb export s3` или сохраняли их локальную копию с помощью [команды](https://ydb.tech/docs/ru/reference/ydb-cli/export-import/tools-dump#schema-objects) `ydb tools dump`, вы можете загрузить данные из таких резервных копий в новый кластер YDB во внешней инфраструктуре.

Чтобы восстановить данные, которые были сохранены в бакете, используйте команду YDB CLI `ydb import s3`. Подробнее об использовании этой команды с примерами восстановления читайте в разделе [Загрузка из S3-совместимого хранилища](https://ydb.tech/docs/ru/reference/ydb-cli/export-import/import-s3).

Чтобы восстановить данные из локальной копии, используйте команду YDB CLI `ydb tools restore`. Подробнее об использовании этой команды с примерами восстановления читайте в разделе [Загрузка из файловой системы](https://ydb.tech/docs/ru/reference/ydb-cli/export-import/tools-restore#schema-objects).

## Управляйте кластером {#manage-cluster}

Вы можете использовать проект Ansible, который настроили ранее, для дальнейшего обслуживания кластера. Запускайте плейбуки обслуживания кластера из той же директории, из которой вы этот кластер развертывали.

### Перезапуск кластера {#cluster-restart}

Чтобы перезапустить кластер, выполните плейбук `ydb_platform.ydb.restart`. Этот плейбук поочередно перезапустит сначала [узлы хранения](https://ydb.tech/docs/ru/concepts/glossary#storage-node), затем [узлы базы данных](https://ydb.tech/docs/ru/concepts/glossary#database-node).

Подробнее о перезапуске кластера читайте в разделе [Перезапуск кластеров YDB, развернутых с помощью Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/restart).

### Изменение конфигурации YDB {#update-ydb-config}

Чтобы изменить конфигурацию кластера, внесите необходимые изменения в файл `files/config.yaml` и выполните плейбук `ydb_platform.ydb.update_config`.

Подробнее об изменении конфигурации кластера читайте в разделе [Обновление конфигурации кластеров YDB, развернутых с Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/update-config).

### Обновление версии YDB {#update-ydb-version}

Чтобы обновить версию YDB, внесите изменения в основной файл инвентаризации `inventory/50-inventory.yaml` и выполните плейбук `ydb_platform.ydb.update_executable`. Этот плейбук поочередно перезапустит узлы кластера.

{% note alert %}

Прежде чем обновлять версию YDB, изучите [правила совместимости](https://ydb.tech/docs/ru/devops/concepts/versioning) версий YDB.

{% endnote %}

Подробнее об обновлении версии YDB кластера читайте в разделе [Обновление версии YDB на кластерах, развернутых с помощью Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/update-executable).

### Резервное копирование данных {#backup-data}

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

Чтобы настроить регулярное резервное копирование данных, используйте команду `ydb export s3` (копирование данных в бакет Yandex Object Storage) или команду `ydb tools dump` (копирование в локальные файлы). 

Подробнее о способах резервного копирования читайте в разделе [Резервное копирование и восстановление](https://ydb.tech/docs/ru/devops/backup-and-recovery/).

## Если Ansible вам не подходит {#ansible-alternatives}

Если Ansible по какой-то причине не устраивает вас как инструмент развертывания кластера YDB, вы можете развернуть кластер вручную. В этом случае на каждом сервере кластера вы самостоятельно выполните те шаги, которые выполняет плейбук Ansible:

1. Создание системного пользователя `ydb` и увеличение лимита открытых файловых дескрипторов.
1. Скачивание [дистрибутива](https://ydb.tech/docs/ru/downloads/ydb-open-source-database) YDB с открытым исходным кодом и установка исполняемого файла `ydbd` с библиотеками.
1. Разметка дисков под данные, подготовка ключей и сертификатов TLS для каждого сервера.
1. Подготовка файла конфигурации кластера и запуск узлов хранения.
1. Инициализация кластера, создание базы данных и запуск узлов базы данных.
1. Настройка учетных записей и проверка работы базы данных.

Подробнее о способах развертывания кластеров YDB во внешней инфраструктуре читайте в разделе [Способы развертывания YDB](https://ydb.tech/docs/ru/devops/deployment-options/).