Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for ClickHouse®
  • Начало работы
    • Все инструкции
      • Информация об имеющихся кластерах
      • Создание кластера
      • Изменение настроек кластера
      • Обновление версии ClickHouse®
      • Остановка и запуск кластера
        • Управление хостами ClickHouse®
        • Управление хостами ZooKeeper
        • Миграция хостов в другую зону доступности
      • Управление резервными копиями
      • Удаление кластера
  • Управление доступом
  • Справочник Terraform
  • Метрики Yandex Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перенести хосты ClickHouse®
  • Перенести хосты ZooKeeper
  • Особенности миграции в сервисе Yandex Data Transfer
  1. Пошаговые инструкции
  2. Кластеры
  3. Управление хостами
  4. Миграция хостов в другую зону доступности

Миграция хостов кластера ClickHouse® в другую зону доступности

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Перенести хосты ClickHouse®
  • Перенести хосты ZooKeeper
  • Особенности миграции в сервисе Yandex Data Transfer

Хосты ClickHouse® и ZooKeeper кластера Managed Service for ClickHouse® располагаются в зонах доступности Yandex Cloud. Хосты ClickHouse® и ZooKeeper можно перенести из одной зоны в другую с помощью этой инструкции, а хосты c ClickHouse® Keeper — с помощью обращения в службу поддержки.

Примечание

Для кластеров, хосты которых располагаются в зоне доступности ru-central1-d, недоступно:

  • использование платформы Intel Broadwell;
  • хранилище на локальных SSD-дисках при использовании платформы Intel Cascade Lake.

Перенести хосты ClickHouse®Перенести хосты ClickHouse®

  1. Убедитесь, что в результате миграции будут перенесены только реплицируемые таблицы на движке семейства ReplicatedMergeTree.

    Нереплицируемые таблицы будут потеряны во время миграции.

  2. Если вы создали кластер без поддержки ClickHouse® Keeper, добавьте не менее трех хостов ZooKeeper для обеспечения отказоустойчивости. Иначе вы не сможете добавить новые хосты в шарды и выполнить миграцию.

  3. Создайте подсеть в зоне доступности, в которую вы переносите хосты.

  4. Добавьте хост в кластер:

    Консоль управления
    CLI
    Terraform
    REST API
    gRPC API
    1. Перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.

    2. Нажмите на имя нужного кластера и перейдите на вкладку Хосты.

    3. Нажмите кнопку Создать хост.

    4. Укажите параметры хоста:

      • Зону доступности, куда переносятся хосты.
      • Новую подсеть.
      • Выберите опцию Публичный доступ, если хост должен быть доступен извне Yandex Cloud.
    5. Нажмите Сохранить.

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    Выполните команду:

    yc managed-clickhouse host add \
       --cluster-name <имя_кластера> \
       --host type=clickhouse,`
             `zone-id=<зона_доступности>,`
             `subnet-id=<идентификатор_новой_подсети>,`
             `assign-public-ip=<публичный_доступ_к_хосту:_true_или_false>
    

    Имя кластера можно получить со списком кластеров в каталоге. В параметре zone-id укажите зону, куда вы переносите хосты.

    1. В конфигурационный файл Terraform с планом инфраструктуры добавьте манифест хоста:

      resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
        ...
        host {
          type             = "CLICKHOUSE"
          zone             = "<зона_доступности>"
          subnet_id        = "<идентификатор_новой_подсети>"
          assign_public_ip = <публичный_доступ_к_хосту:_true_или_false>
        }
      }
      

      В параметре zone укажите зону, куда вы переносите хосты.

    2. Проверьте корректность настроек.

      1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

      2. Выполните команду:

        terraform validate
        

        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    3. Подтвердите изменение ресурсов.

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

    1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

      export IAM_TOKEN="<IAM-токен>"
      
    2. Воспользуйтесь методом Cluster.AddHosts и выполните запрос, например, с помощью cURL:

      curl \
          --request POST \
          --header "Authorization: Bearer $IAM_TOKEN" \
          --header "Content-Type: application/json" \
          --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>/hosts:batchCreate' \
          --data '{
                    "hostSpecs": [
                      {
                        "type": "CLICKHOUSE",
                        "zoneId": "<зона_доступности>",
                        "subnetId": "<идентификатор_подсети>",
                        "assignPublicIp": <публичный_доступ_к_хосту>
                      }
                    ]
                  }'
      

      Где hostSpecs — массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста и имеет следующую структуру:

      • type — тип хоста, всегда CLICKHOUSE для хостов ClickHouse®;
      • zoneId — зона доступности;
      • subnetId — идентификатор подсети;
      • assignPublicIp — доступность хоста из интернета по публичному IP-адресу: true или false.

      Идентификатор кластера можно запросить со списком кластеров в каталоге.

    3. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

    1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

      export IAM_TOKEN="<IAM-токен>"
      
    2. Клонируйте репозиторий cloudapi:

      cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
      

      Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

    3. Воспользуйтесь вызовом ClusterService.AddHosts и выполните запрос, например, с помощью gRPCurl:

      grpcurl \
          -format json \
          -import-path ~/cloudapi/ \
          -import-path ~/cloudapi/third_party/googleapis/ \
          -proto ~/cloudapi/yandex/cloud/mdb/clickhouse/v1/cluster_service.proto \
          -rpc-header "Authorization: Bearer $IAM_TOKEN" \
          -d '{
                  "cluster_id": "<идентификатор_кластера>",
                  "host_specs": [
                      {
                          "type": "CLICKHOUSE",
                          "zone_id": "<зона_доступности>",
                          "subnet_id": "<идентификатор_подсети>",
                          "assign_public_ip": <публичный_доступ_к_хосту>
                      }
                  ]
              }' \
          mdb.api.cloud.yandex.net:443 \
          yandex.cloud.mdb.clickhouse.v1.ClusterService.AddHosts
      

      Где host_specs — массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста и имеет следующую структуру:

      • type — тип хоста, всегда CLICKHOUSE для хостов ClickHouse®;
      • zone_id — зона доступности;
      • subnet_id — идентификатор подсети;
      • assign_public_ip — доступность хоста из интернета по публичному IP-адресу: true или false.

      Идентификатор кластера можно запросить со списком кластеров в каталоге.

    4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  5. Чтобы успешно выполнять подключение к базе данных после миграции, укажите FQDN нового хоста в вашем бэкенде или клиенте (например, в коде или графической IDE). Удалите FQDN прежнего хоста в первоначальной зоне.

    Чтобы узнать FQDN, получите список хостов в кластере:

    yc managed-clickhouse host list --cluster-name <имя_кластера>
    

    FQDN указан в выводе команды, в столбце NAME. Также вы можете использовать особый FQDN для подключения.

  6. Удалите хосты в первоначальной зоне доступности:

    Консоль управления
    CLI
    Terraform
    REST API
    gRPC API
    1. Перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
    2. Нажмите на имя нужного кластера и выберите вкладку Хосты.
    3. Нажмите на значок в строке нужного хоста, выберите пункт Удалить и подтвердите удаление.

    Выполните команду для каждого хоста:

    yc managed-clickhouse host delete <FQDN_хоста> --cluster-name <имя_кластера>
    
    1. В конфигурационном файле Terraform с планом инфраструктуры удалите из описания кластера блоки host с первоначальной зоной доступности.

    2. Проверьте корректность настроек.

      1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

      2. Выполните команду:

        terraform validate
        

        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    3. Введите слово yes и нажмите Enter.

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

    1. Воспользуйтесь методом Cluster.DeleteHosts и выполните запрос, например, с помощью cURL:

      curl \
         --request POST \
         --header "Authorization: Bearer $IAM_TOKEN" \
         --header "Content-Type: application/json" \
         --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>/hosts:batchDelete' \
         --data '{
                   "hostNames": [
                     "<FQDN_хоста>"
                   ]
                 }'
      

      Где hostNames — массив с удаляемым хостом.

      В одном запросе можно передать только один FQDN хоста. Если нужно удалить несколько хостов, выполните запрос для каждого хоста.

    2. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

    1. Воспользуйтесь вызовом ClusterService.DeleteHosts и выполните запрос, например, с помощью gRPCurl:

      grpcurl \
         -format json \
         -import-path ~/cloudapi/ \
         -import-path ~/cloudapi/third_party/googleapis/ \
         -proto ~/cloudapi/yandex/cloud/mdb/clickhouse/v1/cluster_service.proto \
         -rpc-header "Authorization: Bearer $IAM_TOKEN" \
         -d '{
               "cluster_id": "<идентификатор_кластера>",
               "host_names": [
                 "<FQDN_хоста>"
               ]
             }' \
         mdb.api.cloud.yandex.net:443 \
         yandex.cloud.mdb.clickhouse.v1.ClusterService.DeleteHosts
      

      Где host_names — массив с удаляемым хостом.

      В одном запросе можно передать только один FQDN хоста. Если нужно удалить несколько хостов, выполните запрос для каждого хоста.

    2. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  7. Дождитесь, когда кластер перейдет в состояние Alive. В консоли управления перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. Состояние кластера отображается в столбце Доступность.

Перенести хосты ZooKeeperПеренести хосты ZooKeeper

  1. Создайте подсеть в зоне доступности, в которую вы переносите хосты.

  2. Добавьте хост в кластер:

    Консоль управления
    CLI
    Terraform
    REST API
    gRPC API
    1. Перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
    2. Нажмите на имя нужного кластера и перейдите на вкладку Хосты.
    3. Нажмите кнопку Добавить хосты ZooKeeper.
    4. Укажите новую подсеть и зону доступности, куда переносятся хосты.
    5. Нажмите Сохранить.

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    Выполните команду:

    yc managed-clickhouse host add \
       --cluster-name <имя_кластера> \
       --host type=zookeeper,`
             `zone-id=<зона_доступности>,`
             `subnet-id=<идентификатор_новой_подсети>,`
             `assign-public-ip=<публичный_доступ_к_хосту:_true_или_false>
    

    Имя кластера можно получить со списком кластеров в каталоге. В параметре zone-id укажите зону, куда вы переносите хосты.

    1. В конфигурационный файл Terraform с планом инфраструктуры добавьте манифест хоста:

      resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
        ...
        host {
          type             = "ZOOKEEPER"
          zone             = "<зона_доступности>"
          subnet_id        = "<идентификатор_новой_подсети>"
          assign_public_ip = <публичный_доступ_к_хосту:_true_или_false>
        }
      }
      

      В параметре zone укажите зону, куда вы переносите хосты.

    2. Проверьте корректность настроек.

      1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

      2. Выполните команду:

        terraform validate
        

        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    3. Подтвердите изменение ресурсов.

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

    1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

      export IAM_TOKEN="<IAM-токен>"
      
    2. Воспользуйтесь методом Cluster.AddHosts и выполните запрос, например, с помощью cURL:

      curl \
          --request POST \
          --header "Authorization: Bearer $IAM_TOKEN" \
          --header "Content-Type: application/json" \
          --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>/hosts:batchCreate' \
          --data '{
                    "hostSpecs": [
                      {
                        "type": "ZOOKEEPER",
                        "zoneId": "<зона_доступности>",
                        "subnetId": "<идентификатор_подсети>",
                        "assignPublicIp": <публичный_доступ_к_хосту>
                      }
                    ]
                  }'
      

      Где hostSpecs — массив, содержащий настройки создаваемого хоста. Один элемент массива содержит настройки для одного хоста и имеет следующую структуру:

      • type — тип хоста ZOOKEEPER;
      • zoneId — зона доступности;
      • subnetId — идентификатор подсети;
      • assignPublicIp — доступность хоста из интернета по публичному IP-адресу: true или false.

      Идентификатор кластера можно запросить со списком кластеров в каталоге.

    3. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

    1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

      export IAM_TOKEN="<IAM-токен>"
      
    2. Клонируйте репозиторий cloudapi:

      cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
      

      Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

    3. Воспользуйтесь вызовом ClusterService.AddHosts и выполните запрос, например, с помощью gRPCurl:

      grpcurl \
          -format json \
          -import-path ~/cloudapi/ \
          -import-path ~/cloudapi/third_party/googleapis/ \
          -proto ~/cloudapi/yandex/cloud/mdb/clickhouse/v1/cluster_service.proto \
          -rpc-header "Authorization: Bearer $IAM_TOKEN" \
          -d '{
                  "cluster_id": "<идентификатор_кластера>",
                  "host_specs": [
                      {
                          "type": "ZOOKEEPER",
                          "zone_id": "<зона_доступности>",
                          "subnet_id": "<идентификатор_подсети>",
                          "assign_public_ip": <публичный_доступ_к_хосту>
                      }
              }' \
          mdb.api.cloud.yandex.net:443 \
          yandex.cloud.mdb.clickhouse.v1.ClusterService.AddHosts
      

      Где host_specs — массив, содержащий настройки создаваемых хостов. Один элемент массива host_specs содержит настройки для одного хоста и имеет следующую структуру:

      • type — тип хоста ZOOKEEPER;
      • zone_id — зона доступности;
      • subnet_id — идентификатор подсети;
      • assign_public_ip — доступность хоста из интернета по публичному IP-адресу: true или false.

      Идентификатор кластера можно запросить со списком кластеров в каталоге.

    4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  3. Удалите хосты в первоначальной зоне доступности:

    Консоль управления
    CLI
    Terraform
    REST API
    gRPC API
    1. Перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
    2. Нажмите на имя нужного кластера и выберите вкладку Хосты.
    3. Нажмите на значок в строке нужного хоста, выберите пункт Удалить и подтвердите удаление.

    Выполните команду для каждого хоста:

    yc managed-clickhouse host delete <FQDN_хоста> --cluster-name <имя_кластера>
    
    1. В конфигурационном файле Terraform с планом инфраструктуры удалите из описания кластера блоки host с первоначальной зоной доступности.

    2. Проверьте корректность настроек.

      1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

      2. Выполните команду:

        terraform validate
        

        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    3. Введите слово yes и нажмите Enter.

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

    1. Воспользуйтесь методом Cluster.DeleteHosts и выполните запрос, например, с помощью cURL:

      curl \
         --request POST \
         --header "Authorization: Bearer $IAM_TOKEN" \
         --header "Content-Type: application/json" \
         --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>/hosts:batchDelete' \
         --data '{
                   "hostNames": [
                     "<FQDN_хоста>"
                   ]
                 }'
      

      Где hostNames — массив с удаляемым хостом.

      В одном запросе можно передать только один FQDN хоста. Если нужно удалить несколько хостов, выполните запрос для каждого хоста.

    2. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

    1. Воспользуйтесь вызовом ClusterService.DeleteHosts и выполните запрос, например, с помощью gRPCurl:

      grpcurl \
         -format json \
         -import-path ~/cloudapi/ \
         -import-path ~/cloudapi/third_party/googleapis/ \
         -proto ~/cloudapi/yandex/cloud/mdb/clickhouse/v1/cluster_service.proto \
         -rpc-header "Authorization: Bearer $IAM_TOKEN" \
         -d '{
               "cluster_id": "<идентификатор_кластера>",
               "host_names": [
                 "<FQDN_хоста>"
               ]
             }' \
         mdb.api.cloud.yandex.net:443 \
         yandex.cloud.mdb.clickhouse.v1.ClusterService.DeleteHosts
      

      Где host_names — массив с удаляемым хостом.

      В одном запросе можно передать только один FQDN хоста. Если нужно удалить несколько хостов, выполните запрос для каждого хоста.

    2. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  4. Дождитесь, когда кластер перейдет в состояние Alive. В консоли управления перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. Состояние кластера отображается в столбце Доступность.

Особенности миграции в сервисе Yandex Data TransferОсобенности миграции в сервисе Yandex Data Transfer

Если кластер выступает в роли эндпоинта при передаче данных с помощью сервиса Data Transfer и используется тип трансфера Репликация или Копирование и репликация, перезапустите трансфер после миграции кластера. Так трансфер получит сведения о новой топологии кластера.

Трансферы типа Копирование перезапускать не нужно, так как во время их активации информация о новой топологии передается автоматически.

Чтобы перезапустить трансфер, выберите один из двух способов:

  • Деактивируйте трансфер и дождитесь его перехода в статус Остановлен. Затем активируйте трансфер и дождитесь его перехода в статус Реплицируется.
  • Измените какую-либо настройку трансфера или эндпоинта.

Подробнее см. в разделе Миграция эндпоинтов и трансфера Data Transfer в другую зону доступности.

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.

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

Предыдущая
Управление хостами ZooKeeper
Следующая
Управление резервными копиями
Проект Яндекса
© 2025 ООО «Яндекс.Облако»