7.4 KiB
7.4 KiB
Resource nubes_clickhouse
Service ID: 120
Service Name: ClickHouse
Overview | Parameters | Operations
MAN
Инструкция по управлению кластерами и пользователями ClickHouse
---
## Общая информация
ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.
Кластер создаётся через оператор Altinity (https://github.com/Altinity/clickhouse-operator) в ресурсной платформе типа k8s
Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра Создать ClickHouse-Keeper.
Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу S3 Object Storage.
---
## Доступные операции
* create — Создание кластера
* delete — Удаление кластера
* suspend — Приостановка работы кластера
* resume — Возобновление работы кластера
* create_database — Создание базы данных
* delete_database — Удаление базы данных
* create_user — Создание пользователя и настройка прав доступа к базе данных
* delete_user — Удаление пользователя
## Процесс создания и первого подключения
1. Выполнить операцию create - будет создан кластер
2. Выполнить операцию create_database - будет создана база данных
3. Выполнить операцию create_user - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)
## Примеры подключения
### Подключение через HTTP-интерфейс
bash<br/># Проверка доступности кластера<br/>curl "http://<username>:<password>@<host>:8123/" -d "SELECT 1"<br/><br/># Выполнение запроса<br/>curl "http://<username>:<password>@<host>:8123/" -d "SHOW DATABASES"<br/>
## Простые кейсы
Создать БД и обычной таблицы
clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>
Базы и таблицы не реплицируются без специального ключа (ON CLUSTER 'clickhousek8s')
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах
Создание БД и шардированной таблицы
clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse
Создание реплицируемой и шардированной таблицы
clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>
Summary
Инструкция по управлению кластерами и пользователями ClickHouse
Example
resource "nubes_clickhouse" "example" {
resource_realm = "TODO"
s3_uid = "235e0546-..."
resource_instances = 1
resource_instances_shards = 1
resource_c_p_u = 1000
resource_memory = 1536
app_version = 25.10
resource_disk = 10
need_external_address_master = false
need_create_keeper = true
resource_c_p_u_keeper = 50
resource_memory_keeper = 152
resource_instances_keeper = 1
ext__b_a_c_k_u_p__s_c_h_e_d_u_l_e = 0 0 * * *
ext__b_a_c_k_u_p__n_u_m__t_o__r_e_t_a_i_n = 7
adopt_existing_on_create = НЕТ
suspend_on_destroy = ДА
}
Outputs
state_params(map)state_out(map)state_params_flat(map)state_out_flat(map)vault_secrets(map)vault_url(string)vault_user_path(string)vault_fields(list)
Lifecycle defaults
suspend_on_destroy_default=Trueadopt_existing_on_create_default=False
Lifecycle behavior
- For suspend-capable services: cloud status
missing/deleted=> create,suspend+ key params match => resume. runningrequires explicitadopt_existing_on_create=truefor adopt/import behavior, otherwise error.- Destroy uses
suspend_on_destroy: true => suspend, false => remove from state only.