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.
# 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:
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:
● 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:
Lokální připojení
clickhouse-client -q "SELECT 1" # Mělo by vrátit 1Vzdálené připojení přes HTTP (z jiného stroje)
curl "http://YOUR_SERVER_IP:8123/?query=SELECT+version()"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í: ClickHouse: Proč sloupcové DBMS trhají analytiku na kusy
→ Další: ClickHouse v Dockeru: jak jsem přestal mít strach a spustil analytiku za 2 minuty
— Editorial Team
Zatím žádné komentáře.