Advertisement
dimcha

Clickhouse cross-replicated table creation

Nov 15th, 2017
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 10.20 KB | None | 0 0
  1. -- Создаем шарды для таблицы graphite под общим именем `graphite_sharded`. Это имя будет использовано
  2. -- для доступа через Distributed с именем graphite. В конфиге кросс-репликация прописана в кластере с
  3. -- именем `carbon_metrics`. Так-же называется и база.
  4.  
  5. -- Note: в конфиге этого кластера стоит `internal_replication = true`, т.к. мы используем шарды с репликацией, поэтому
  6. -- Distributed не надо дополнительно их реплицировать
  7.  
  8. -- <carbon_metrics>
  9. --     <shard>
  10. --         <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
  11. --         <weight>1</weight>
  12. --         <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
  13. --         <internal_replication>1</internal_replication>
  14. --         <replica>
  15. --             <host>graphite1</host>
  16. --             <port>9000</port>
  17. --         </replica>
  18. --         <replica>
  19. --             <host>graphite2</host>
  20. --             <port>9000</port>
  21. --         </replica>
  22. --     </shard>
  23. --     <shard>
  24. --         <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
  25. --         <weight>1</weight>
  26. --         <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
  27. --         <internal_replication>1</internal_replication>
  28. --         <replica>
  29. --             <host>graphite2</host>
  30. --             <port>9000</port>
  31. --         </replica>
  32. --         <replica>
  33. --             <host>graphite3</host>
  34. --             <port>9000</port>
  35. --         </replica>
  36. --     </shard>
  37. --     <shard>
  38. --         <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
  39. --         <weight>1</weight>
  40. --         <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
  41. --         <internal_replication>1</internal_replication>
  42. --         <replica>
  43. --             <host>graphite3</host>
  44. --             <port>9000</port>
  45. --         </replica>
  46. --         <replica>
  47. --             <host>graphite1</host>
  48. --             <port>9000</port>
  49. --         </replica>
  50. --     </shard>
  51. -- </carbon_metrics>
  52.  
  53. -- Пара моментов:
  54. -- {shard} разворачивается в номер сервера (1)
  55. -- {replica} разворачивается в hostname сервера (graphite1)
  56.  
  57. -- Запускаем на #1
  58. CREATE DATABASE IF NOT EXISTS carbon_metrics;
  59. CREATE TABLE carbon_metrics.graphite_sharded (
  60.     Path String,
  61.     VALUE Float64,
  62.     TIME UInt32,
  63.     DATE DATE,
  64.     TIMESTAMP UInt32
  65. )
  66. ENGINE = ReplicatedGraphiteMergeTree (
  67.     '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
  68.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  69.  
  70. -- Теперь создадим Distributed таблицу `graphite`, которая будет использовать все шарды с именем `graphite_sharded`
  71.  
  72. -- Запускаем на #1
  73. CREATE TABLE carbon_metrics.graphite (
  74.     Path String,
  75.     VALUE Float64,
  76.     TIME UInt32,
  77.     DATE DATE,
  78.     TIMESTAMP UInt32
  79. )
  80. ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
  81.  
  82.  
  83. -- Т.к. у нас кросс-репликация, то шард с сервера:
  84. -- #3 будет реплицироваться #1,
  85. -- #1 будет реплицироваться #2,
  86. -- #2 будет реплицироваться #3,
  87. -- Поэтому на #1 укажем, что он держит реплику с #3
  88. -- Note: имя `graphite_shard3_replica` может быть любым, т.к. нигде явно нами не используется, только в системных таблицах
  89. -- {replica} разворачивается в hostname сервера (graphite1)
  90. -- в пути для ZooKeeper'а явно указываем номер шарда(путь шарда), который будем тащить на #1 (3)
  91. CREATE TABLE carbon_metrics.graphite_shard3_replica (
  92.     Path String,
  93.     VALUE Float64,
  94.     TIME UInt32,
  95.     DATE DATE,
  96.     TIMESTAMP UInt32
  97. )
  98. ENGINE = ReplicatedGraphiteMergeTree (
  99.     '/clickhouse/tables/3/carbon_metrics.graphite', '{replica}-graphite',
  100.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  101.  
  102. -- С таблицей `carbon_metrics.graphite` на #1 закончили.
  103.  
  104. -- Далее создадим таблицу `carbon_metrics.graphite_tree`. Она будет Distributed, но без шардирования, т.к. изменяется
  105. -- редко и содержит относительно небольшое количество данных. В конфиге определен новый кластер `carbon_metrics_tree`.
  106. -- <carbon_metrics_tree>
  107. --     <shard>
  108. --     <!-- Не обязательно. Вес шарда при записи данных. По умолчанию, 1. -->
  109. --     <weight>1</weight>
  110. --     <!-- Не обязательно. Записывать ли данные только на одну, любую из реплик. По умолчанию, false - записывать данные на все реплики. -->
  111. --     <internal_replication>0</internal_replication>
  112. --     <replica>
  113. --         <host>graphite1</host>
  114. --         <port>9000</port>
  115. --     </replica>
  116. --     <replica>
  117. --         <host>graphite2</host>
  118. --         <port>9000</port>
  119. --     </replica>
  120. --     <replica>
  121. --         <host>graphite3</host>
  122. --         <port>9000</port>
  123. --     </replica>
  124. --     </shard>
  125. -- </carbon_metrics_tree>
  126.  
  127.  
  128. -- Note: в конфиге этого кластера стоит `internal_replication = false`, т.к. мы используем обычную таблицу, которая
  129. -- сама себя не реплицирует, поэтому репликацией будет заниматься сам Distributed.
  130.  
  131. -- `carbon_metrics.graphite_tree_distributed` является бекэндом для `carbon_metrics.graphite_tree`
  132. CREATE TABLE carbon_metrics.graphite_tree_distributed (
  133.     DATE DATE,
  134.     Level UInt32,
  135.     Path String,
  136.     Deleted UInt8,
  137.     Version UInt32
  138. )
  139. ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
  140.  
  141. -- и создаем саму `carbon_metrics.graphite_tree`
  142. CREATE TABLE carbon_metrics.graphite_tree (
  143.     DATE DATE,
  144.     Level UInt32,
  145.     Path String,
  146.     Deleted UInt8,
  147.     Version UInt32
  148. )
  149. ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
  150.  
  151. -- Все. С настройкой #1 закончили. Теперь то-же самое (с небольшими отличиями) надо повторить для #2 и #3
  152.  
  153.  
  154. -- Запускаем на #2
  155.  
  156. CREATE DATABASE IF NOT EXISTS carbon_metrics;
  157. CREATE TABLE carbon_metrics.graphite_sharded (
  158.     Path String,
  159.     VALUE Float64,
  160.     TIME UInt32,
  161.     DATE DATE,
  162.     TIMESTAMP UInt32
  163. )
  164. ENGINE = ReplicatedGraphiteMergeTree (
  165.     '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
  166.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  167.  
  168. CREATE TABLE carbon_metrics.graphite (
  169.     Path String,
  170.     VALUE Float64,
  171.     TIME UInt32,
  172.     DATE DATE,
  173.     TIMESTAMP UInt32
  174. )
  175. ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
  176.  
  177. -- созадем таблицу реплики с #1
  178. CREATE TABLE carbon_metrics.graphite_shard1_replica (
  179.     Path String,
  180.     VALUE Float64,
  181.     TIME UInt32,
  182.     DATE DATE,
  183.     TIMESTAMP UInt32
  184. )
  185. ENGINE = ReplicatedGraphiteMergeTree (
  186.     '/clickhouse/tables/1/carbon_metrics.graphite', '{replica}-graphite',
  187.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  188.  
  189. CREATE TABLE carbon_metrics.graphite_tree_distributed (
  190.     DATE DATE,
  191.     Level UInt32,
  192.     Path String,
  193.     Deleted UInt8,
  194.     Version UInt32
  195. )
  196. ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
  197.  
  198. CREATE TABLE carbon_metrics.graphite_tree (
  199.     DATE DATE,
  200.     Level UInt32,
  201.     Path String,
  202.     Deleted UInt8,
  203.     Version UInt32
  204. )
  205. ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
  206.  
  207.  
  208. -- Запускаем на #3
  209.  
  210. CREATE DATABASE IF NOT EXISTS carbon_metrics;
  211. CREATE TABLE carbon_metrics.graphite_sharded (
  212.     Path String,
  213.     VALUE Float64,
  214.     TIME UInt32,
  215.     DATE DATE,
  216.     TIMESTAMP UInt32
  217. )
  218. ENGINE = ReplicatedGraphiteMergeTree (
  219.     '/clickhouse/tables/{shard}/carbon_metrics.graphite', '{replica}-graphite',
  220.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  221.  
  222. CREATE TABLE carbon_metrics.graphite (
  223.     Path String,
  224.     VALUE Float64,
  225.     TIME UInt32,
  226.     DATE DATE,
  227.     TIMESTAMP UInt32
  228. )
  229. ENGINE = Distributed (carbon_metrics, carbon_metrics, graphite_sharded, sipHash64(Path));
  230.  
  231. -- созадем таблицу реплики с #2
  232. CREATE TABLE carbon_metrics.graphite_shard2_replica (
  233.     Path String,
  234.     VALUE Float64,
  235.     TIME UInt32,
  236.     DATE DATE,
  237.     TIMESTAMP UInt32
  238. )
  239. ENGINE = ReplicatedGraphiteMergeTree (
  240.     '/clickhouse/tables/2/carbon_metrics.graphite', '{replica}-graphite',
  241.     DATE, (Path, TIME), 8192, 'graphite_rollup');
  242.  
  243. CREATE TABLE carbon_metrics.graphite_tree_distributed (
  244.     DATE DATE,
  245.     Level UInt32,
  246.     Path String,
  247.     Deleted UInt8,
  248.     Version UInt32
  249. )
  250. ENGINE = ReplacingMergeTree(DATE, (Level, Path), 8192, Version);
  251.  
  252. CREATE TABLE carbon_metrics.graphite_tree (
  253.     DATE DATE,
  254.     Level UInt32,
  255.     Path String,
  256.     Deleted UInt8,
  257.     Version UInt32
  258. )
  259. ENGINE = Distributed (carbon_metrics_tree, carbon_metrics, graphite_tree_distributed, sipHash64(Path));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement