Управление хостами 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 минут
}
}
Чтобы включить отказоустойчивость для кластера, воспользуйтесь методом addZookeeper для ресурса Cluster или вызовом gRPC API ClusterService/AddZookeeper и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. Чтобы узнать идентификатор, получите список кластеров в каталоге. - Настройки для трех хостов ZooKeeper в параметре
hostSpecs
. - Необходимость преобразования нереплицируемых таблиц в реплицируемые в параметре
convertTablesToReplicated
.
Примечание
По умолчанию для хостов 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 минут
}
}
Чтобы добавить хост ZooKeeper, воспользуйтесь методом REST API addHosts для ресурса Cluster или вызовом gRPC API ClusterService/AddHosts и передайте в запросе:
- Идентификатор кластера, в котором нужно разместить хост, в параметре
clusterId
. Чтобы узнать идентификатор, получите список кластеров в каталоге. - Настройки для хоста в параметре
hostSpecs
(в том числе укажите типZOOKEEPER
в параметреhostSpecs.type
). Не указывайте настройки для нескольких хостов в этом параметре — хосты ZooKeeper добавляются в кластер по одному, в отличие от хостов ClickHouse®, которых можно добавить сразу несколько.
Перезапустить хост 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
— массив строк. Каждая строка — имя хоста, который нужно перезапустить. Имена хостов можно запросить со списком хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Удалить хост 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 минут
}
}
Чтобы удалить хост ZooKeeper, воспользуйтесь методом REST API deleteHosts для ресурса Cluster или вызовом gRPC API ClusterService/DeleteHosts и передайте в запросе:
- Идентификатор кластера, в котором находится хост, в параметре
clusterId
. Чтобы узнать идентификатор, получите список кластеров в каталоге. - Имя хоста в параметре
hostNames
. Чтобы узнать имя, получите список хостов в кластере.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc