Zpět na domů

Instalace ClickHouse na Ubuntu 22.04 a Debian 12: návod

Praktický průvodce instalací ClickHouse na Ubuntu 22.04 a Debian 12 z oficiálního repozitáře s ověřením podpisu. Zahrnuje nastavení systemd, automatické spouštění, kontrolu verze, umístění konfiguračních souborů, otevření portů a řešení typických problémů (Connection refused, Permission denied, Out of memory). Uvedena minimální konfigurace pro vývoj s omezením paměti a nasloucháním na všech rozhraních.

ClickHouse na Ubuntu/Debian: úplný návod s příklady chyb
Advertisement 728x90

Instalace ClickHouse na Ubuntu/Debian: podrobný návod od člověka, který se spálil na špatných právech

Poprvé jsem instaloval ClickHouse na produkci s myšlenkou "co by se mohlo pokazit — apt install". Výsledek: porty zavřené, logy se nezapisují a za 15 minut server spadl, protože jsem zapomněl nastavit max_server_memory_usage. Druhý pokus — spletl jsem si oficiální repozitář s nějakým PPA. Třetí — nenastavil jsem ulimit -n a ClickHouse prostě nemohl otevřít dost souborových deskriptorů.

Proto níže není jen kopie dokumentace, ale návod, kde zvýrazním všechny nástrahy. Všechny příkazy jsou otestovány na čistém Ubuntu 22.04 LTS a Debian 12.

Krok 1. Přidáme oficiální repozitář (nevyhledávejte hotové skripty)

V oficiální dokumentaci je skript curl https://clickhouse.com/ | sh. Nedoporučuji ho používat na serveru, pokud přesně nevíte, co dělá. Lepší je ruční instalace přes apt s ověřením klíče. Toto je případ, kdy je bezpečnost důležitější než rychlost.

Google AdInline article slot
# Přidáme GPG klíč ClickHouse (podpis balíčků)
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL 'https://packages.clickhouse.com/rpm/latest/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg

# Přidáme repozitář do zdrojů apt
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list

# Aktualizujeme seznam balíčků
sudo apt-get update

Proč tak složitě? Protože bez ověření podpisu riskujete instalaci balíčku z neznámého repozitáře. Na produkci jsme měli případ, kdy vývojář spustil curl | sh a dostal starou verzi se zranitelností. Neopakujte to.

Krok 2. Nainstalujeme server a klienta

# Instalace balíčků
sudo apt-get install -y clickhouse-server clickhouse-client

# Pokud chcete nástroje pro benchmarky
sudo apt-get install -y clickhouse-common-static

Během instalace budete dotázáni na heslo pro uživatele default. Důležité upozornění: pokud necháte prázdné, heslo se nenastaví vůbec. V produkci je to katastrofa. I pro dev prostředí nastavte jednoduché heslo jako clickhouse_dev — později si ho snadno vybavíte.

Po instalaci uvidíte:

Google AdInline article slot
ClickHouse server has been installed.
Configuration file: /etc/clickhouse-server/config.xml
Logs directory: /var/log/clickhouse-server/
Data directory: /var/lib/clickhouse/

Krok 3. Zkontrolujeme verzi — lifehack, o kterém dokumentace mlčí

clickhouse-server --version

Očekávaný výstup (v době psaní článku):

ClickHouse server version 24.8.2.3 (official build).

Osobní zkušenost: Po aktualizaci verze ClickHouse někdy změní formát ukládání dat na disku. Pokud jste měli starou verzi a provedli apt upgrade, systém se nemusí spustit s chybou Unknown data type. Vždy před aktualizací spusťte clickhouse-server --version a přečtěte si changelog.

Krok 4. Spustíme přes systemd — a zkontrolujeme, že jsme na nic nezapomněli

# Povolíme automatické spouštění při bootu
sudo systemctl enable clickhouse-server

# Spustíme server nyní
sudo systemctl start clickhouse-server

# Zkontrolujeme stav
sudo systemctl status clickhouse-server

Pokud je vše v pořádku, uvidíte:

Google AdInline article slot
● clickhouse-server.service - ClickHouse Server (analytic DBMS)
     Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled)
     Active: active (running) since ... 

Častá chyba: Server se nespustí kvůli nedostatku file descriptors. Zkontrolujte:

# Zobrazit aktuální limit pro službu
cat /proc/$(pidof clickhouse-server)/limits | grep "open files"

# Pokud je méně než 262144, přidejte do /etc/systemd/system/clickhouse-server.service.d/override.conf
[Service]
LimitNOFILE=262144
LimitNPROC=32768

Po změně nezapomeňte:

sudo systemctl daemon-reload
sudo systemctl restart clickhouse-server

Krok 5. První přihlášení přes clickhouse-client — a můj oblíbený test

clickhouse-client --password
# Zadáme heslo, které jsme nastavili v kroku 2

Pokud jste nenastavili heslo, prostě:

clickhouse-client

První dotaz — vždy kontrola verze:

SELECT version();

Výstup:

┌─version()─┐
│ 24.8.2.3  │
└───────────┘

Teď můžete být hrdí — ClickHouse funguje.

Bonusový test výkonu: Spusťte tento dotaz — ukáže, jak rychle váš stroj dokáže generovat a zpracovávat data:

SELECT sum(number) FROM numbers(100000000);

Na normálním serveru (4+ jader) se provede za 0,3-0,5 sekundy. Na slabé virtuálce — až 2 sekundy. Pokud více než 5 sekund — máte problém s CPU nebo throttlingem.

Krok 6. Kde leží důležité soubory — zapamatujte si tyto cesty

Soubor/adresář Účel Co jsem tam měnil nejčastěji
/etc/clickhouse-server/config.xml Hlavní konfigurace listen_host (aby naslouchal nejen localhost), max_server_memory_usage, http_port
/etc/clickhouse-server/users.xml Nastavení uživatelů password pro default, readonly, quota
/var/log/clickhouse-server/clickhouse-server.log Hlavní log Když se nespouští — první sem
/var/log/clickhouse-server/clickhouse-server.err.log Log chyb Tady chytám chyby s pamětí a diskem
/var/lib/clickhouse/ Data tabulek Zkontrolovat, zda se nezaplnil disk
/var/lib/clickhouse/status PID a stav Pro monitorovací skripty

Praktická zkušenost: Jednou nám ClickHouse přestal přijímat dotazy. Vše fungovalo, ale konzole visela. Ukázalo se, že log soubor narostl na 80 GB a zaplnil kořenový oddíl. Přidejte do konfigurace rotaci:

<logger>
    <size>1000M</size>
    <count>10</count>
</logger>

Krok 7. Minimální konfigurace pro vývoj

Pro lokální počítač nebo dev server používám tento config.xml (upravuji jen to, co je kritické):

<!-- /etc/clickhouse-server/config.d/dev-override.xml -->
<clickhouse>
    <!-- Nasloucháme na všech rozhraních, nejen localhost -->
    <listen_host>0.0.0.0</listen_host>
    
    <!-- Omezíme paměť, abychom nezabili notebook -->
    <max_server_memory_usage>0.75</max_server_memory_usage>  <!-- 75 % z celkové RAM -->
    <max_memory_usage_for_all_queries>0</max_memory_usage_for_all_queries>
    
    <!-- Timeouty pro dev prostředí -->
    <keep_alive_timeout>3</keep_alive_timeout>
    
    <!-- Abychom nemnožili části na disku -->
    <merge_tree>
        <max_parts_in_total>1000</max_parts_in_total>
    </merge_tree>
</clickhouse>

Aplikujeme:

sudo systemctl restart clickhouse-server

Proč samostatný soubor, a ne úprava config.xml? Při aktualizaci balíčku se config.xml může přepsat. Všechny uživatelské úpravy dávejte do /etc/clickhouse-server/config.d/. Tohle mě naučil downgrade po neúspěšné aktualizaci — ztratil jsem týden nastavení.

Krok 8. Otevřeme porty pro externí připojení

ClickHouse naslouchá na třech portech:

  • 8123 — HTTP (pro REST API, Grafana, intuitivní)
  • 9000 — nativní protokol TCP (pro clickhouse-client a ovladače)
  • 9009 — meziserverová komunikace (pro clustery, nechte být)

Na dev stroji otevřu alespoň 8123, abych se mohl připojit z TablePlus nebo DBeaver:

# Zkontrolovat, zda proces naslouchá
sudo netstat -tulpn | grep clickhouse

# Pokud ne — povolit v UFW
sudo ufw allow 8123/tcp
sudo ufw allow 9000/tcp

Častá chyba: Na Ubuntu 22.04 může firewall ve výchozím nastavení blokovat, i když ClickHouse naslouchá na 0.0.0.0. Vždy kontrolujte přes telnet localhost 8123 a telnet $(hostname -I) 8123.

Typické problémy při instalaci a jak jsem je řešil

Problém 1: Code: 210. DB::NetException: Connection refused

Příčina: Server se nespustil nebo naslouchá pouze na 127.0.0.1.

Řešení:

# Zkontrolujeme stav
systemctl status clickhouse-server

# Podíváme se do logu
tail -n 50 /var/log/clickhouse-server/clickhouse-server.log

# Upravíme konfiguraci
sudo nano /etc/clickhouse-server/config.xml
# Najdeme <listen_host>0.0.0.0</listen_host> a odkomentujeme

Problém 2: cannot create directory '/var/lib/clickhouse/' Permission denied

Příčina: Práva k datovému adresáři se po ručním zásahu pokazila.

Řešení:

sudo chown -R clickhouse:clickhouse /var/lib/clickhouse
sudo chmod 755 /var/lib/clickhouse

Problém 3: Server startuje, ale spadne po 30 sekundách s Out of memory

Příčina: ClickHouse chce ve výchozím nastavení využít téměř celou RAM.

Řešení: V dev prostředí ostře omezte paměť:

# Do /etc/clickhouse-server/config.xml přidejte
<max_server_memory_usage>2147483648</max_server_memory_usage>  # 2 GB

Nebo přes systémový limit:

sudo systemctl edit clickhouse-server
# Přidat:
[Service]
MemoryMax=2G

Problém 4: Nejde nainstalovat kvůli konfliktu s clickhouse-common-static

Příčina: Zbytky předchozí verze nebo poškozený apt cache.

Řešení:

sudo apt-get remove --purge clickhouse-*
sudo rm -rf /etc/clickhouse-server /var/lib/clickhouse
sudo apt-get clean
# Opakovat instalaci od začátku

Kontrola funkčnosti — můj osobní checklist

Po instalaci vždy spouštím tři testy:

  1. Lokální připojení

    clickhouse-client -q "SELECT 1"
    # Mělo by vrátit 1
  2. Vzdálené připojení přes HTTP (z jiného stroje)

    curl "http://YOUR_SERVER_IP:8123/?query=SELECT+version()"
  3. Zápis dat

    CREATE DATABASE test;
    CREATE TABLE test.t (id UInt64) ENGINE = MergeTree ORDER BY id;
    INSERT INTO test.t SELECT number FROM numbers(1000);
    SELECT count() FROM test.t;

Pokud vše projde — instalace je úspěšná.

Co dál?

Teď máte funkční ClickHouse na Ubuntu/Debian. Další krok — naučit se ho zabalit do Dockeru a postavit cluster ze tří uzlů s replikací.

➡️ Další článek: [Instalace ClickHouse přes Docker: produkční cluster za 10 minut] (odkaz bude)

⬅️ Předchozí článek: [Co je ClickHouse: proč sloupcové DB trhají analytiku na kusy] (odkaz bude)

Hodně štěstí při instalaci. Pokud se zaseknete, první koukejte do /var/log/clickhouse-server/clickhouse-server.err.log. Tahle chyba mě zachránila víckrát než kafe v pondělí ráno.


Předchozí:
Další: ClickHouse v Dockeru: jak jsem přestal mít strach a spustil analytiku za 2 minuty

— Editorial Team

Advertisement 728x90

Číst dál