Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Создаем шарды для таблицы graphite под общим именем `graphite_sharded`. Это имя будет использовано
- -- для доступа через Distributed с именем graphite. В конфиге кросс-репликация прописана в кластере с
- -- именем `carbon_metrics`. Так-же называется и база.
- -- Note: в конфиге этого кластера стоит `internal_replication = true`, т.к. мы используем шарды с репликацией, поэтому
- -- Distributed не надо дополнительно их реплицировать
- -- <carbon_metrics>
- -- <shard>
- -- <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
- -- <weight>1</weight>
- -- <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
- -- <internal_replication>1</internal_replication>
- -- <replica>
- -- <host>graphite1</host>
- -- <port>9000</port>
- -- </replica>
- -- <replica>
- -- <host>graphite2</host>
- -- <port>9000</port>
- -- </replica>
- -- </shard>
- -- <shard>
- -- <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
- -- <weight>1</weight>
- -- <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
- -- <internal_replication>1</internal_replication>
- -- <replica>
- -- <host>graphite2</host>
- -- <port>9000</port>
- -- </replica>
- -- <replica>
- -- <host>graphite3</host>
- -- <port>9000</port>
- -- </replica>
- -- </shard>
- -- <shard>
- -- <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
- -- <weight>1</weight>
- -- <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
- -- <internal_replication>1</internal_replication>
- -- <replica>
- -- <host>graphite3</host>
- -- <port>9000</port>
- -- </replica>
- -- <replica>
- -- <host>graphite1</host>
- -- <port>9000</port>
- -- </replica>
- -- </shard>
- -- </carbon_metrics>
- -- Пара моментов:
- -- {shard} разворачивается в номер сервера (1)
- -- {replica} разворачивается в hostname сервера (graphite1)
- -- Запускаем на #1
- CREATE DATABASE IF NOT EXISTS carbon_metrics;
- CREATE TABLE carbon_metrics.graphite_sharded (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- -- Теперь создадим Distributed таблицу `graphite`, которая будет использовать все шарды с именем `graphite_sharded`
- -- Запускаем на #1
- CREATE TABLE carbon_metrics.graphite (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
- -- Т.к. у нас кросс-репликация, то шард с сервера:
- -- #3 будет реплицироваться #1,
- -- #1 будет реплицироваться #2,
- -- #2 будет реплицироваться #3,
- -- Поэтому на #1 укажем, что он держит реплику с #3
- -- Note: имя `graphite_shard3_replica` может быть любым, т.к. нигде явно нами не используется, только в системных таблицах
- -- {replica} разворачивается в hostname сервера (graphite1)
- -- в пути для ZooKeeper'а явно указываем номер шарда(путь шарда), который будем тащить на #1 (3)
- CREATE TABLE carbon_metrics.graphite_shard3_replica (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/3/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- -- С таблицей `carbon_metrics.graphite` на #1 закончили.
- -- Далее создадим таблицу `carbon_metrics.graphite_tree`. Она будет Distributed, но без шардирования, т.к. изменяется
- -- редко и содержит относительно небольшое количество данных. В конфиге определен новый кластер `carbon_metrics_tree`.
- -- <carbon_metrics_tree>
- -- <shard>
- -- <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
- -- <weight>1</weight>
- -- <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
- -- <internal_replication>0</internal_replication>
- -- <replica>
- -- <host>graphite1</host>
- -- <port>9000</port>
- -- </replica>
- -- <replica>
- -- <host>graphite2</host>
- -- <port>9000</port>
- -- </replica>
- -- <replica>
- -- <host>graphite3</host>
- -- <port>9000</port>
- -- </replica>
- -- </shard>
- -- </carbon_metrics_tree>
- -- Note: в конфиге этого кластера стоит `internal_replication = false`, т.к. мы используем обычную таблицу, которая
- -- сама себя не реплицирует, поэтому репликацией будет заниматься сам Distributed.
- -- `carbon_metrics.graphite_tree_distributed` является бекэндом для `carbon_metrics.graphite_tree`
- CREATE TABLE carbon_metrics.graphite_tree_distributed (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
- -- и создаем саму `carbon_metrics.graphite_tree`
- CREATE TABLE carbon_metrics.graphite_tree (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
- -- Все. С настройкой #1 закончили. Теперь то-же самое (с небольшими отличиями) надо повторить для #2 и #3
- -- Запускаем на #2
- CREATE DATABASE IF NOT EXISTS carbon_metrics;
- CREATE TABLE carbon_metrics.graphite_sharded (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- CREATE TABLE carbon_metrics.graphite (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
- -- созадем таблицу реплики с #1
- CREATE TABLE carbon_metrics.graphite_shard1_replica (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/1/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- CREATE TABLE carbon_metrics.graphite_tree_distributed (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
- CREATE TABLE carbon_metrics.graphite_tree (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
- -- Запускаем на #3
- CREATE DATABASE IF NOT EXISTS carbon_metrics;
- CREATE TABLE carbon_metrics.graphite_sharded (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- CREATE TABLE carbon_metrics.graphite (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
- -- созадем таблицу реплики с #2
- CREATE TABLE carbon_metrics.graphite_shard2_replica (
- Path String,
- VALUE Float64,
- TIME UInt32,
- DATE DATE,
- TIMESTAMP UInt32
- )
- ENGINE = ReplicatedGraphiteMergeTree (
- '/clickhouse/tables/2/carbon_metrics.graphite', '{replica}-graphite',
- DATE, (Path, TIME), 8192, 'graphite_rollup');
- CREATE TABLE carbon_metrics.graphite_tree_distributed (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
- CREATE TABLE carbon_metrics.graphite_tree (
- DATE DATE,
- Level UInt32,
- Path String,
- Deleted UInt8,
- Version UInt32
- )
- ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement