ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space

ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space

Kumusta habr.

Kung adunay nag-operate sa sistema graphite web ug midagan ngadto sa storage performance isyu paghunghong (IO, ang espasyo sa disk nahurot), unya ang higayon nga ang ClickHouse gitan-aw ingon usa ka kapuli kinahanglan hapit sa usa. Kini nga pahayag nagpasabot nga ang usa ka ikatulo nga partido nga pagpatuman gigamit na ingon nga nakadawat nga daemon, pananglitan magsusulat sa carbon o adto sa carbon.

Gisulbad sa ClickHouse ang mga problema nga gihulagway nga maayo. Pananglitan, pagkahuman sa pagbubo sa 2TiB nga datos gikan sa hunghong, kini mohaum sa 300GiB. Dili ako maghisgot sa pagtandi sa detalye, adunay igo nga mga artikulo bahin niini nga hilisgutan. Dugang pa, hangtod karon, dili tanan perpekto sa among pagtipig sa ClickHouse.

Mga Isyu sa Gikonsumo nga Luna

Sa una nga pagtan-aw, ang tanan kinahanglan nga molihok nga maayo. Nagsunod dokumentasyon, paghimo og config para sa metrics storage scheme (human niini retention), dayon paghimo ug lamesa sumala sa rekomendasyon sa pinili nga graphite-web backend: carbon-clickhouse+graphite-clickhouse o graphhouse, depende kung asa nga stack ang gigamit. Ug… usa ka bomba sa panahon ang gipalihok.

Aron masabtan kung hain, kinahanglan nimo mahibal-an kung giunsa ang mga pagsal-ot ug ang dugang nga agianan sa kinabuhi sa datos sa mga lamesa sa mga makina sa pamilya *MergeTree ClickHouse (mga diagram nga gikuha gikan sa mga presentasyon Alexey Zatelepin):

  • Gisulod Π±Π»ΠΎΠΊ datos. Sa among kaso, kini ang mga sukatan.
    ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space
  • Ang matag ingon nga bloke gihan-ay sumala sa yawe sa wala pa isulat sa disk. ORDER BYAng gipiho kung kanus-a gihimo ang lamesa.
  • Human sa pag-sorte, кусок (part) ang datos gisulat sa disk.
    ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space
  • Ang server nag-monitor sa background aron dili daghan ang ingon nga mga piraso, ug maglansad sa background слияния (merge, unya i-merge).
    ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space
    ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space
  • Ang server mohunong sa paglansad sa paghiusa sa kaugalingon sa diha nga ang data mohunong sa aktibong pag-agos ngadto ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (partition), apan mahimo nimong sugdan ang proseso nga mano-mano gamit ang sugo OPTIMIZE.
  • Kung adunay usa ra ka piraso nga nahabilin sa partisyon, nan dili nimo masugdan ang paghiusa sa naandan nga mando, kinahanglan nimo gamiton OPTIMIZE ... FINAL

Mao nga, ang una nga mga sukatan moabut. Ug nagkuha sila og luna. Ang sunod nga mga panghitabo mahimong magkalainlain depende sa daghang mga hinungdan:

  • Ang yawe sa partisyon mahimong gamay kaayo (usa ka adlaw) o dako kaayo (pila ka bulan).
  • Ang retention config mahimong mohaum sa daghang mahinungdanong data aggregation thresholds sulod sa aktibong partition (diin gisulat ang metrics), o tingali dili.
  • Kung adunay daghang mga datos, nan ang labing una nga mga tipik, nga mahimo’g dako na tungod sa paghiusa sa background (kung nagpili usa ka dili kamalaumon nga yawe sa partisyon), dili maghiusa sa ilang mga kaugalingon sa bag-ong gagmay nga mga tipik.

Ug kini kanunay nga matapos. Ang lugar nga giokupar sa mga sukatan sa ClickHouse motubo lamang kung:

  • ayaw pag-apply OPTIMIZE ... FINAL manwal o
  • ayaw pagsal-ot og data sa tanang partisyon sa padayon nga basehan aron makasugod ug background merge sa madugay o sa madali

Ang ikaduha nga pamaagi ingon nga labing kadali nga ipatuman ug, busa, kini sayup ug gisulayan sa una.
Nagsulat ako usa ka yano nga script sa python nga nagpadala mga dummy metric alang sa matag adlaw sa miaging 4 ka tuig ug nagdagan matag oras nga adunay cron.
Tungod kay ang tanan nga mga buhat sa ClickHouse DBMS gibase sa kamatuoran nga kini nga sistema sa madugay o sa madali mobuhat sa tanan nga mga buhat sa background, apan wala mahibal-an kung kanus-a, wala ako makahulat sa higayon nga ang daan nga dagkong mga piraso deign nga magsugod sa paghiusa. uban sa bag-ong mga gagmay. Nahimong klaro nga kinahanglan namon nga mangita usa ka paagi aron ma-automate ang pinugos nga pag-optimize.

ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space

Impormasyon sa ClickHouse system tables

Atong tan-awon ang istruktura sa lamesa sistema.mga bahin. Kini usa ka komprehensibo nga kasayuran bahin sa matag piraso sa tanan nga mga lamesa sa ClickHouse server. Naglangkob, taliwala sa ubang mga butang, ang mosunod nga mga kolum:

  • ngalan sa database (database);
  • ngalan sa lamesa (table);
  • ngalan sa partisyon ug ID (partition & partition_id);
  • sa dihang gihimo ang piraso (modification_time);
  • minimum ug maximum nga petsa sa tipak (pagbahin sa adlaw) (min_date & max_date);

Adunay usab usa ka lamesa system.graphite_retentions, uban sa mosunod nga makapaikag nga mga natad:

  • ngalan sa database (Tables.database);
  • ngalan sa lamesa (Tables.table);
  • ang edad sa metric kung kanus-a kinahanglan i-apply ang sunod nga aggregation (age);

Busa:

  1. Kami adunay usa ka lamesa sa mga tipak ug usa ka lamesa sa mga lagda sa panagsama.
  2. Among gihiusa ang ilang intersection ug among nadawat ang tanang *GraphiteMergeTree nga mga lamesa.
  3. Gipangita namon ang tanan nga mga partisyon diin:
    • labaw pa sa usa ka piraso
    • o niabot na ang panahon nga ipadapat ang sunod nga lagda sa aggregation, ug modification_time mas tigulang kay niining higayona.

Pagpatuman

Kini nga hangyo

SELECT
    concat(p.database, '.', p.table) AS table,
    p.partition_id AS partition_id,
    p.partition AS partition,
    -- Π‘Π°ΠΌΠΎΠ΅ "староС" ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ для
    -- ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, см (*)
    max(g.age) AS age,
    -- ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ кусков Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ
    countDistinct(p.name) AS parts,
    -- Π—Π° ΡΠ°ΠΌΡƒΡŽ ΡΡ‚Π°Ρ€ΡˆΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ принимаСтся 00:00:00 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дня
    toDateTime(max(p.max_date + 1)) AS max_time,
    -- Когда партиция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°
    max_time + age AS rollup_time,
    -- Когда самый старый кусок Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½
    min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
    -- ВсС ΠΏΡ€Π°Π²ΠΈΠ»Π° для всСх Ρ‚Π°Π±Π»ΠΈΡ† *GraphiteMergeTree
    SELECT
        Tables.database AS database,
        Tables.table AS table,
        age
    FROM system.graphite_retentions
    ARRAY JOIN Tables
    GROUP BY
        database,
        table,
        age
) AS g ON
    (p.table = g.table)
    AND (p.database = g.database)
WHERE
    -- Волько Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ куски
    p.active
    -- (*) И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, Π³Π΄Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π°Π³Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹
    AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
    table,
    partition
HAVING
    -- Волько ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ младшС ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
    (modified_at < rollup_time)
    -- Или с нСсколькими кусками
    OR (parts > 1)
ORDER BY
    table ASC,
    partition ASC,
    age ASC

ibalik ang matag usa sa *GraphiteMergeTree nga mga partisyon sa lamesa nga kinahanglan i-merge aron mapahigawas ang espasyo sa disk. Nagpabilin lamang kini nga kaso alang sa gagmay nga mga butang: susiha ang tanan nga adunay usa ka hangyo OPTIMIZE ... FINAL. Giisip usab sa katapusan nga pagpatuman ang kamatuoran nga dili kinahanglan nga hikapon ang mga partisyon nga adunay aktibo nga rekord.

Mao kini ang gibuhat sa proyekto. graphite-ch-optimizer. Ang kanhi mga kauban gikan sa Yandex.Market nagsulay niini sa produksyon, ang resulta sa trabaho makita sa ubos.

ClickHouse + Graphite: Giunsa ang Mahinungdanon nga Pagpakunhod sa Gikonsumo sa Disk Space

Kung gipadagan nimo ang programa sa usa ka server nga adunay ClickHouse, magsugod ra kini sa pagtrabaho sa daemon mode. Kausa sa usa ka oras, usa ka pangutana ang ipatuman, pagsusi kung adunay bag-ong mga partisyon nga mas tigulang sa tulo ka adlaw nga mahimong ma-optimize.

Sa duol nga umaabot - sa paghatag sa labing menos deb packages, ug kon mahimo - usab rpm.

Kay sa usa ka konklusyon

For the past 9+ months, naa ko sa sulod sa akong company Mga InnoGames migahin og daghang panahon sa pagluto sa junction sa ClickHouse ug graphite-web. Kini usa ka maayo nga kasinatian, nga miresulta sa usa ka dali nga pagbalhin gikan sa hunghong ngadto sa ClickHouse isip usa ka tipiganan sa mga sukatan. Nanghinaut ko nga kini nga artikulo usa ka matang sa pagsugod sa usa ka siklo bahin sa kung unsang mga pag-uswag ang among nahimo sa lainlaing mga bahin sa kini nga stack, ug kung unsa ang buhaton sa umaabot.

Pipila ka litro sa beer ug admin nga mga adlaw ang gigugol sa pagpalambo sa hangyo, uban sa v0 yawanga gusto nakong ipahayag ang akong pagpasalamat kaniya. Ug alang usab sa pagrepaso niini nga artikulo.

Pahina sa proyekto sa github

Source: www.habr.com

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS πŸ”₯ Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster