Управление хостами ZooKeeper
Шарды из одного хоста не отказоустойчивы и не обеспечивают репликацию данных. Чтобы сделать такие шарды отказоустойчивыми, нужно добавить в них еще хосты. Если в кластере уже есть шард из нескольких хостов, то можно сразу добавлять хосты ClickHouse® в нужный шард, в противном случае сначала нужно включить отказоустойчивость и только потом добавлять хосты ClickHouse®.
Важно
Если для кластера уже включена отказоустойчивость и созданы хосты ZooKeeper, то полностью удалить эти хосты невозможно — в кластере всегда будет минимум три хоста ZooKeeper.
Вы можете выполнить следующие действия над хостами ZooKeeper в отказоустойчивом кластере:
- получить список хостов в кластере;
- включить отказоустойчивость для кластера с помощью хостов ZooKeeper;
- добавить хост;
- перезапустить хост;
- удалить хост.
Всего в отказоустойчивом кластере может быть от трех до пяти хостов ZooKeeper включительно.
О том, как перенести хосты ZooKeeper в другую зону доступности, читайте в инструкции.
Получить список хостов в кластере
- Перейдите на страницу каталога
и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список хостов в кластере, выполните команду:
yc managed-clickhouse host list \
--cluster-name=<имя_кластера>
+----------------------------+--------------+---------+--------+---------------+
| NAME | CLUSTER ID | ROLE | HEALTH | ZONE ID |
+----------------------------+--------------+---------+--------+---------------+
| rc1b...mdb.yandexcloud.net | c9qp71dk1... | MASTER | ALIVE | ru-central1-b |
| rc1a...mdb.yandexcloud.net | c9qp71dk1... | REPLICA | ALIVE | ru-central1-a |
+----------------------------+--------------+---------+--------+---------------+
Имя кластера можно запросить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.ListHosts и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>/hosts'
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.ListHosts и выполните запрос, например, с помощью 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": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.ListHosts
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Включить отказоустойчивость для кластера
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Хосты.
- Справа сверху нажмите Настроить хосты ZooKeeper.
- Укажите класс хостов.
- Задайте настройки хранилища.
- При необходимости измените настройки хостов ZooKeeper. Чтобы это сделать, наведите курсор на строку нужного хоста и нажмите на значок
. - Для преобразования нереплицируемых таблиц в реплицируемые включите настройку Преобразовать нереплицируемые таблицы.
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы включить отказоустойчивость для кластера:
-
Посмотрите описание команды CLI для добавления хостов ZooKeeper:
yc managed-clickhouse cluster add-zookeeper --help
-
Запустите операцию с характеристиками хостов по умолчанию:
yc managed-clickhouse cluster add-zookeeper <имя_кластера> \ --host zone-id=ru-central1-d,subnet-name=default-d \ --host zone-id=ru-central1-a,subnet-name=default-a \ --host zone-id=ru-central1-b,subnet-name=default-b
Если в сети, в которой расположен кластер, ровно 3 подсети, по одной в каждой зоне доступности, то явно указывать подсети для хостов необязательно: Managed Service for ClickHouse® автоматически распределит хосты по этим подсетям.
Для преобразования нереплицируемых таблиц в реплицируемые добавьте в команду параметр
--convert-tables-to-replicated
.Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Убедитесь, что в конфигурационном файле описаны три подсети — по одной для каждой зоны доступности. При необходимости добавьте недостающие:
resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети_в_зоне_ru-central1-a>" { name = "<имя_подсети_в_зоне_ru-central1-a>" zone = "ru-central1-a" network_id = yandex_vpc_network.<имя_сети>.id v4_cidr_blocks = [ "<диапазон_адресов_подсети_в_зоне_ru-central1-a>" ] } resource "yandex_vpc_subnet" "<имя_подсети_в_зоне_ru-central1-b>" { name = "<имя_подсети_в_зоне_ru-central1-b>" zone = "ru-central1-b" network_id = yandex_vpc_network.<имя_сети>.id v4_cidr_blocks = [ "<диапазон_адресов_подсети_в_зоне_ru-central1-b>" ] } resource "yandex_vpc_subnet" "<имя_подсети_в_зоне_ru-central1-d>" { name = "<имя_подсети_в_зоне_ru-central1-d>" zone = "ru-central1-d" network_id = yandex_vpc_network.<имя_сети>.id v4_cidr_blocks = [ "<диапазон_адресов_подсети_в_зоне_ru-central1-d>" ] }
-
Добавьте к описанию кластера ClickHouse® необходимое количество блоков
host
с типомCLICKHOUSE
.Требования к хостам ClickHouse®:
- Минимальный класс хоста —
b1.medium
. - Если хостов больше одного, они должны размещаться в разных зонах доступности.
При необходимости измените класс существующих хостов ClickHouse® и зоны доступности, добавьте необходимое количество новых хостов.
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" { name = "<имя_кластера>" ... clickhouse { resources { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } } ... host { type = "CLICKHOUSE" zone = "ru-central1-a" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-a>.id } ... }
Где
resource_preset_id
— класс хоста:b1.medium
или выше. - Минимальный класс хоста —
-
Добавьте к описанию кластера ClickHouse® не меньше трех блоков
host
с типомZOOKEEPER
.Требования к хостам ZooKeeper:
- В каждой зоне доступности должно быть минимум по одному хосту.
- Минимальный класс хоста —
b1.medium
. - Тип диска —
network-ssd
. - Минимальный размер хранилища — 10 гигабайт.
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" { ... zookeeper { resources { resource_preset_id = "<класс_хоста>" disk_type_id = "network-ssd" disk_size = <размер_хранилища_ГБ> } } ... host { type = "ZOOKEEPER" zone = "ru-central1-a" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-a>.id } host { type = "ZOOKEEPER" zone = "ru-central1-b" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-b>.id } host { type = "ZOOKEEPER" zone = "ru-central1-d" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-d>.id } }
Где
resource_preset_id
— класс хоста:b1.medium
или выше. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.AddZookeeper и выполните запрос, например, с помощью 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/<идентификатор_кластера>:addZookeeper' \ --data '{ "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "hostSpecs": [ { "zoneId": "<зона_доступности>", "type": "ZOOKEEPER", "subnetId": "<идентификатор_подсети>", "shardName": "<имя_шарда>", "assignPublicIp": <публичный_доступ_к_хосту> }, { <аналогичный_набор_настроек_для_создаваемого_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_создаваемого_хоста_N> } ], "convertTablesToReplicated": true }'
Где:
-
resources
— набор ресурсов для хостов ZooKeeper:resourcePresetId
— класс хостов;diskSize
— размер диска в байтах;diskTypeId
— тип диска.
-
hostSpecs
— массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста, в кластере должно быть минимум три хоста ZooKeeper. Элемент массива имеет следующую структуру:type
— тип хостаZOOKEEPER
;zoneId
— зона доступности;subnetId
— идентификатор подсети;assignPublicIp
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
-
convertTablesToReplicated
— преобразование нереплицируемых таблиц в реплицируемые:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.AddZookeeper и выполните запрос, например, с помощью 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": "<идентификатор_кластера>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "host_specs": [ { "type": "ZOOKEEPER", "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <публичный_доступ_к_хосту> }, { <аналогичный_набор_настроек_для_создаваемого_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_создаваемого_хоста_N> } ], "convert_tables_to_replicated": true }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.AddZookeeper
Где:
-
resources
— набор ресурсов для хостов ZooKeeper:resource_preset_id
— класс хостов;disk_size
— размер диска в байтах;disk_type_id
— тип диска.
-
host_specs
— массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста, в кластере должно быть минимум три хоста ZooKeeper.Элемент массива имеет следующую структуру:
type
— тип хостаZOOKEEPER
;zone_id
— зона доступности;subnet_id
— идентификатор подсети;assign_public_ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
-
convert_tables_to_replicated
— преобразование нереплицируемых таблиц в реплицируемые:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примечание
По умолчанию для хостов ZooKeeper задаются следующие характеристики:
- Класс хоста
b2.medium
. - Хранилище на сетевых SSD-дисках (
network-ssd
) размером 10 ГБ.
Добавить хост ZooKeeper
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
- Нажмите кнопку Добавить хосты ZooKeeper.
- При необходимости измените настройки хоста.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы добавить хост в кластер:
-
Соберите необходимую информацию:
-
Запросите идентификатор подсети, выполнив команду:
yc vpc subnet list
Если нужной подсети в списке нет, создайте ее.
-
Запросите имя кластера со списком кластеров в каталоге.
-
-
Посмотрите описание команды CLI для добавления хостов:
yc managed-clickhouse host add --help
-
Выполните команду добавления хоста ZooKeeper:
yc managed-clickhouse hosts add \ --cluster-name <имя_кластера> \ --host zone-id=<зона_доступности>,subnet-id=<идентификатор_подсети>,type=zookeeper
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Добавьте к описанию кластера Managed Service for ClickHouse® блок
host
с типомZOOKEEPER
:resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" { ... host { type = "ZOOKEEPER" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<имя_подсети_в_выбранной_зоне_доступности>.id } ... }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом 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
— массив, содержащий настройки создаваемого хоста.Важно
Не указывайте настройки для нескольких хостов в параметре
hostSpecs
. Хосты ZooKeeper добавляются в кластер по одному в отличие от хостов ClickHouse®, которых можно добавить сразу несколько.Один элемент массива
hostSpecs
содержит настройки для одного хоста и имеет следующую структуру:type
— тип хостаZOOKEEPER
;zoneId
— зона доступности;subnetId
— идентификатор подсети;assignPublicIp
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом 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
— массив, содержащий настройки создаваемых хостов.Важно
Не указывайте настройки для нескольких хостов в параметре
hostSpecs
. Хосты ZooKeeper добавляются в кластер по одному в отличие от хостов ClickHouse®, которых можно добавить сразу несколько.Один элемент массива
host_specs
содержит настройки для одного хоста и имеет следующую структуру:type
— тип хостаZOOKEEPER
;zone_id
— зона доступности;subnet_id
— идентификатор подсети;assign_public_ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Перезапустить хост ZooKeeper
Перезапуск хостов может понадобиться, если нужно экстренно устранить такие проблемы, как:
- перерасход ресурсов;
- утечка памяти;
- взаимоблокировка (deadlock) между запросами;
- зависание операций и внутренних процессов ClickHouse®.
Чтобы перезапустить хост:
- Перейдите на страницу каталога
и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и перейдите на вкладку Хосты.
- В строке нужного хоста нажмите на значок
и выберите пункт Перезагрузить. - Подтвердите перезагрузку хоста.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы перезапустить хост, выполните команду:
yc managed-clickhouse host restart <имя_хоста> \
--cluster-name=<имя_кластера>
Имя хоста можно запросить со списком хостов в кластере, имя кластера — со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.RestartHosts и выполните запрос, например, с помощью 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:restartHosts' \ --data '{ "hostNames": [ <перечень_имен_хостов> ] }'
Где
hostNames
— массив строк. Каждая строка — имя хоста, который нужно перезапустить. Имена хостов можно запросить со списком хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.RestartHosts и выполните запрос, например, с помощью 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": [ <перечень_имен_хостов> ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.RestartHosts
Где
host_names
— массив строк. Каждая строка — имя хоста, который нужно перезапустить. Имена хостов можно запросить со списком хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Преобразовать нереплицируемые таблицы в реплицируемые
Чтобы автоматически преобразовать нереплицируемые таблицы на движке семейства MergeTree
Подробнее читайте в разделе Репликация и в документации ClickHouse®
Чтобы преобразовать нереплицируемые таблицы в реплицируемые:
-
В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. -
Нажмите на имя нужного кластера и выберите вкладку
Хосты. -
Справа сверху нажмите Настроить хосты ZooKeeper.
-
На странице добавления хостов по умолчанию включена опция Преобразовать нереплицируемые таблицы.
-
Чтобы оставить таблицы нереплицируемыми, отключите опцию Преобразовать нереплицируемые таблицы. Чтобы включить поддержку реплицируемых таблиц, оставьте опцию включенной.
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы преобразовать нереплицируемые таблицы в реплицируемые, выполните команду:
yc managed-clickhouse cluster add-zookeeper \
--name <имя_кластера> \
--resource-preset <класс_хостов> \
--disk-size <размер_хранилища_ГБ> \
--disk-type <тип_диска> \
--host zone-id=<зона_доступности>,subnet-name=<имя_подсети> \
--host <аналогичный_набор_настроек_для_создаваемого_хоста_2> \
--host ... \
--host <аналогичный_набор_настроек_для_создаваемого_хоста_N> \
--convert-tables-to-replicated
В команде укажите не меньше трех параметров --host
, так как в кластере должно быть минимум три хоста ZooKeeper.
Параметр --convert-tables-to-replicated
включает преобразование нереплицируемых таблиц на движке семейства MergeTree
в реплицируемые на движке семейства ReplicatedMergeTree
.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.AddZookeeper и выполните запрос, например, с помощью 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/<идентификатор_кластера>:addZookeeper' \ --data '{ "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "hostSpecs": [ { "zoneId": "<зона_доступности>", "type": "ZOOKEEPER", "subnetId": "<идентификатор_подсети>", "shardName": "<имя_шарда>", "assignPublicIp": <публичный_доступ_к_хосту> }, { <аналогичный_набор_настроек_для_создаваемого_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_создаваемого_хоста_N> } ], "convertTablesToReplicated": true }'
Где:
-
resources
— набор ресурсов для хостов ZooKeeper:resourcePresetId
— класс хостов;diskSize
— размер диска в байтах;diskTypeId
— тип диска.
-
hostSpecs
— массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста, в кластере должно быть минимум три хоста ZooKeeper. Элемент массива имеет следующую структуру:type
— тип хостаZOOKEEPER
;zoneId
— зона доступности;subnetId
— идентификатор подсети;assignPublicIp
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
-
convertTablesToReplicated
— преобразование нереплицируемых таблиц в реплицируемые:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService.AddZookeeper и выполните запрос, например, с помощью 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": "<идентификатор_кластера>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "host_specs": [ { "type": "ZOOKEEPER", "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <публичный_доступ_к_хосту> }, { <аналогичный_набор_настроек_для_создаваемого_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_создаваемого_хоста_N> } ], "convert_tables_to_replicated": true }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.AddZookeeper
Где:
-
resources
— набор ресурсов для хостов ZooKeeper:resource_preset_id
— класс хостов;disk_size
— размер диска в байтах;disk_type_id
— тип диска.
-
host_specs
— массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста, в кластере должно быть минимум три хоста ZooKeeper.Элемент массива имеет следующую структуру:
type
— тип хостаZOOKEEPER
;zone_id
— зона доступности;subnet_id
— идентификатор подсети;assign_public_ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.
-
convert_tables_to_replicated
— преобразование нереплицируемых таблиц в реплицируемые:true
илиfalse
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Удалить хост ZooKeeper
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
- Наведите курсор на строку нужного хоста и нажмите на значок
. - В открывшемся окне нажмите кнопку Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы удалить хост из кластера, выполните команду:
yc managed-clickhouse hosts delete <имя_хоста> \
--cluster-name=<имя_кластера>
Имя хоста можно запросить со списком хостов в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Удалите из описания кластера Managed Service for ClickHouse® блок
host
с типомZOOKEEPER
. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Введите слово
yes
и нажмите Enter.-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом 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": [ <перечень_имен_хостов> ] }'
Где
hostNames
— массив строк. Каждая строка — имя хоста, который нужно удалить. Имена хостов можно запросить со списком хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом 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": [ <перечень_имен_хостов> ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.DeleteHosts
Где
host_names
— массив строк. Каждая строка — имя хоста, который нужно удалить. Имена хостов можно запросить со списком хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc