Управление хостами ZooKeeper
ZooKeeper — это сервис, который обеспечивает координацию и распределение запросов между хостами ClickHouse® для репликации данных. Для обеспечения репликации в кластере Managed Service for ClickHouse® должно быть три или пять хостов ZooKeeper. Такой кластер будет отказоустойчивым.
Если вы создаете кластер с двумя или более хостами ClickHouse® на шард и включенным сервисом координации ZooKeeper, в кластер автоматически добавятся три хоста ZooKeeper. При создании вы можете настроить только их конфигурацию. Если вы создали кластер из одного хоста или нескольких однохостовых шардов и выключенным сервисом координации, хосты ZooKeeper можно добавить позднее.
Подробнее о работе хостов ZooKeeper читайте в разделе ZooKeeper.
Вы можете выполнить следующие действия при управлении хостами ZooKeeper:
- получить список хостов в кластере;
- добавить хосты ZooKeeper;
- изменить настройки хостов ZooKeeper;
- перезагрузить хост;
- преобразовать нереплицируемые таблицы в реплицируемые;
- удалить хост.
О том, как перенести хосты ZooKeeper в другую зону доступности, читайте в инструкции.
Получить список хостов в кластере
- В консоли управления
выберите каталог, в котором находится кластер. - Перейдите в сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --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Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Добавить хосты ZooKeeper
Примечание
В зоне доступности ru-central1-d недоступно использование платформы Intel Broadwell.
-
В консоли управления
выберите каталог, в котором находится кластер. -
Перейдите в сервис Managed Service for ClickHouse.
-
Нажмите на имя нужного кластера и выберите вкладку Хосты.
-
Справа сверху нажмите Настроить сервис координации.
-
Укажите класс хостов.
-
Задайте настройки хранилища.
-
При необходимости измените настройки хостов ZooKeeper. Чтобы это сделать, наведите курсор на строку нужного хоста и нажмите на значок
. -
Чтобы преобразовать нереплицируемые таблицы в реплицируемые, включите настройку Преобразовать нереплицируемые таблицы. Нереплицируемые таблицы на движке семейства MergeTree
будут автоматически преобразованы в реплицируемые на движке ReplicatedMergeTree .Важно
После включения этой настройки ее нельзя отключить.
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы добавить в кластер хосты ZooKeeper:
-
Посмотрите описание команды 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. Нереплицируемые таблицы на движке семейства MergeTree будут автоматически преобразованы в реплицируемые на движке ReplicatedMergeTree .Важно
После включения этой настройки ее нельзя отключить.
Имя кластера можно запросить со списком кластеров в каталоге.
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Чтобы добавить в кластер хосты ZooKeeper:
-
Откройте актуальный конфигурационный файл 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®:
- блок
zookeeperс конфигурацией ZooKeeper; - не менее трех хостов ZooKeeper в блок
hosts.
Три хоста ZooKeeper должны быть размещены в разных зонах доступности.
Требования к хостам ZooKeeper:
- Минимальный класс хоста —
b1.medium. - Тип диска —
network-ssd. - Минимальный размер хранилища — 10 гигабайт.
Пример конфигурационного файла:
resource "yandex_mdb_clickhouse_cluster_v2" "<имя_кластера>" { ... zookeeper = { resources = { resource_preset_id = "<класс_хостов>" disk_type_id = "network-ssd" disk_size = <размер_хранилища_ГБ> } } hosts = { ... <имя_хоста_1> = { type = "ZOOKEEPER" zone = "ru-central1-a" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-a>.id } <имя_хоста_2> = { type = "ZOOKEEPER" zone = "ru-central1-b" subnet_id = yandex_vpc_subnet.<имя_подсети_в_зоне_ru-central1-b>.id } <имя_хоста_3> = { 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_v2" "<имя_кластера>" {
...
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": [ { "type": "ZOOKEEPER", "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>" }, { <аналогичный_набор_настроек_для_создаваемого_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_создаваемого_хоста_N> } ], "convertTablesToReplicated": true }'Где:
-
resources— набор ресурсов для хостов ZooKeeper:resourcePresetId— идентификатор класса хостов;diskSize— размер диска в байтах;diskTypeId— тип диска.
-
hostSpecs— массив, содержащий настройки создаваемых хостов. Один элемент массива содержит настройки для одного хоста, в кластере должно быть минимум три хоста ZooKeeper. Элемент массива имеет следующую структуру:type— тип хостаZOOKEEPER;zoneId— зона доступности;subnetId— идентификатор подсети.
-
convertTablesToReplicated— преобразование нереплицируемых таблиц в реплицируемые:trueилиfalse. Нереплицируемые таблицы на движке семейства MergeTree будут автоматически преобразованы в реплицируемые на движке ReplicatedMergeTree .Важно
После включения этой настройки ее нельзя отключить.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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": "<идентификатор_подсети>" }, { <аналогичный_набор_настроек_для_создаваемого_хоста_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— идентификатор подсети.
-
convert_tables_to_replicated— преобразование нереплицируемых таблиц в реплицируемые:trueилиfalse. Нереплицируемые таблицы на движке семейства MergeTree будут автоматически преобразованы в реплицируемые на движке ReplicatedMergeTree .Важно
После включения этой настройки ее нельзя отключить.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Изменить настройки хостов ZooKeeper
После создания хостов ZooKeeper вы можете изменить их класс, размер хранилища и тип диска.
Рекомендуется изменять класс хостов только во время отсутствия рабочей нагрузки на кластер.
Минимальное количество ядер для одного хоста ZooKeeper зависит от суммарного количества ядер хостов ClickHouse®. Подробнее в разделе Сервисы координации.
- В консоли управления
выберите каталог, в котором находится кластер. - Перейдите в сервис Managed Service for ClickHouse.
- Выберите кластер и нажмите кнопку Редактировать на панели сверху.
- В блоке Класс хоста ZooKeeper выберите платформу, тип виртуальной машины и нужный класс хоста ZooKeeper.
- В блоке Размер хранилища ZooKeeper задайте размер хранилища и тип диска для хостов ZooKeeper.
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы изменить конфигурацию хостов ZooKeeper:
-
Посмотрите описание команды CLI для изменения кластера:
yc managed-clickhouse cluster update --help -
Запросите список доступных классов хостов (в колонке
ZONE IDSуказаны зоны доступности, в которых можно выбрать соответствующий класс):yc managed-clickhouse resource-preset list +-----------+--------------------------------+-------+----------+ | ID | ZONE IDS | CORES | MEMORY | +-----------+--------------------------------+-------+----------+ | s1.micro | ru-central1-a, ru-central1-b, | 2 | 8.0 GB | | | ru-central1-d | | | | ... | +-----------+--------------------------------+-------+----------+ -
В команде изменения кластера передайте новый класс хоста ZooKeeper, тип диска и размер хранилища:
yc managed-clickhouse cluster update <имя_или_идентификатор_кластера> \ --zookepeer-resource-preset=<класс_хостов> \ --zookeeper-disk-size=<размер_хранилища_ГБ> \ --zookeeper-disk-type=<тип_диска>Имя и идентификатор кластера можно запросить со списком кластеров в каталоге.
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Чтобы изменить настройки хостов ZooKeeper:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, в разделе Создание кластера.
-
В блоке с конфигурацией ZooKeeper укажите новый класс хоста, тип диска и размер хранилища.
Требования к хостам ZooKeeper:
- Минимальный класс хоста —
b1.medium. - Минимальный размер хранилища — 10 гигабайт.
resource "yandex_mdb_clickhouse_cluster_v2" "<имя_кластера>" { ... zookeeper = { resources = { resource_preset_id = "<класс_хостов>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } } ... } - Минимальный класс хоста —
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_clickhouse_cluster_v2" "<имя_кластера>" {
...
timeouts = {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Запросите список доступных классов хостов:
-
Воспользуйтесь методом ResourcePreset.List и выполните запрос, например с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/resourcePresets' -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
-
Измените класс хостов, тип диска и размер хранилища:
-
Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-clickhouse/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.zookeeper.resources.resourcePresetId,configSpec.zookeeper.resources.diskTypeId,configSpec.zookeeper.resources.diskSize", "configSpec": { "zookeeper": { "resources": { "resourcePresetId": "<класс_хостов>", "diskTypeId": "<тип_диска>", "diskSize": "<размер_хранилища_ГБ>" } } } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.Укажите нужные параметры:
configSpec.zookeeper.resources.resourcePresetId— если нужно изменить класс хостов ZooKeeper.configSpec.zookeeper.resources.diskTypeId— если нужно изменить тип диска для хостов ZooKeeper.configSpec.zookeeper.resources.diskSize— если нужно изменить размер хранилища ZooKeeper.
-
configSpec.zookeeper.resources.resourcePresetId— идентификатор класса хостов. -
configSpec.zookeeper.resources.diskTypeId— тип диска. -
configSpec.zookeeper.resources.diskSize— размер хранилища в гигабайтах.
Идентификатор кластера можно запросить со списком кластеров в каталоге. Список доступных классов хостов с их идентификаторами был получен ранее.
-
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Запросите список доступных классов хостов:
-
Воспользуйтесь вызовом ResourcePresetService.List и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/clickhouse/v1/resource_preset_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ResourcePresetService.List -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
-
Измените класс хостов, тип диска и размер хранилища:
-
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }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": "<идентификатор_кластера>", "update_mask": { "paths": [ "config_spec.zookeeper.resources.resource_preset_id", "config_spec.zookeeper.resources.disk_type_id", "config_spec.zookeeper.resources.disk_size" ] }, "config_spec": { "zookeeper": { "resources": { "resource_preset_id": "<класс_хостов>", "disk_type_id": "<тип_диска>", "disk_size": "<размер_хранилища_ГБ>" } } } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.clickhouse.v1.ClusterService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Укажите нужные параметры:
config_spec.zookeeper.resources.resource_preset_id— если нужно изменить класс хостов ZooKeeper.config_spec.zookeeper.resources.disk_type_id— если нужно изменить тип диска для хостов ZooKeeper.config_spec.zookeeper.resources.disk_size— если нужно изменить размер хранилища ZooKeeper.
-
config_spec.zookeeper.resources.resource_preset_id— идентификатор класса хостов. -
config_spec.zookeeper.resources.disk_type_id— тип диска. -
config_spec.zookeeper.resources.disk_size— размер хранилища в гигабайтах.
Идентификатор кластера можно запросить со списком кластеров в каталоге. Список доступных классов хостов с их идентификаторами был получен ранее.
-
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Перезагрузить хост ZooKeeper
Перезагрузка хостов может понадобиться, если нужно экстренно устранить такие проблемы, как:
- перерасход ресурсов;
- утечка памяти;
- взаимоблокировка (deadlock) между запросами;
- зависание операций и внутренних процессов ClickHouse®.
Чтобы перезагрузить один хост:
- В консоли управления
выберите каталог, в котором находится кластер. - Перейдите в сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и перейдите на вкладку Хосты.
- В строке нужного хоста нажмите на значок
и выберите пункт Перезагрузить. - В открывшемся окне включите опцию Я перезагружаю хост и нажмите кнопку Подтвердить.
Чтобы перезагрузить несколько хостов сразу:
- В консоли управления
выберите каталог, в котором находится кластер. - Перейдите в сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и перейдите на вкладку Хосты.
- Выберите хосты, которые хотите перезагрузить, и нажмите Перезагрузить в нижней части экрана.
- В открывшемся окне нажмите кнопку Подтвердить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --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 в реплицируемые на движке ReplicatedMergeTree можно:
- автоматически при включении сервиса координации;
- с помощью SQL после включения сервиса координации.
Подробнее о движках таблиц читайте в документации ClickHouse®
Чтобы автоматически преобразовать нереплицируемые таблицы в реплицируемые, добавьте хосты ZooKeeper с включенным преобразованием таблиц.
Чтобы преобразовать нереплицируемую таблицу в реплицируемую:
-
Сделайте таблицу недоступной для использования:
DETACH TABLE <имя_таблицы>; -
Преобразуйте таблицу в реплицируемую:
ATTACH TABLE <имя_таблицы> AS REPLICATED; -
Восстановите и синхронизируйте состояние реплики таблицы в ZooKeeper:
SYSTEM RESTORE REPLICA <имя_таблицы>;
Удалить хост ZooKeeper
Важно
Если в кластере уже созданы хосты ZooKeeper, то удалить их полностью невозможно — в кластере всегда будет минимум три хоста ZooKeeper.
- В консоли управления
выберите каталог, в котором находится кластер. - Перейдите в сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера, затем выберите вкладку Хосты.
- Наведите курсор на строку нужного хоста и нажмите на значок
. - В открывшемся окне нажмите кнопку Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы удалить хост из кластера, выполните команду:
yc managed-clickhouse hosts delete <имя_хоста> \
--cluster-name=<имя_кластера>
Имя хоста можно запросить со списком хостов в кластере, имя кластера — со списком кластеров в каталоге.
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Чтобы удалить хост ZooKeeper:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, в разделе Создание кластера.
-
Удалите хост с типом
ZooKeeperиз блокаhosts. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы 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_v2" "<имя_кластера>" {
...
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