ClickHouse unter Ubuntu/Debian installieren: Eine Schritt-für-Schritt-Anleitung von jemandem, der sich an falschen Berechtigungen verbrannt hat
Als ich ClickHouse zum ersten Mal in der Produktion installierte, dachte ich: „Was soll schon schwer daran sein – einfach apt install.“ Ergebnis: Ports waren geschlossen, Logs wurden nicht geschrieben, und nach 15 Minuten stürzte der Server ab, weil ich vergessen hatte, max_server_memory_usage zu konfigurieren. Zweiter Versuch: Ich verwechselte das offizielle Repository mit einem zwielichtigen PPA. Dritter: Ich setzte ulimit -n nicht, und ClickHouse konnte einfach nicht genügend Dateideskriptoren öffnen.
Unten folgt daher nicht nur eine Kopie der Dokumentation, sondern eine Anleitung, in der ich alle Fallstricke hervorhebe. Alle Befehle wurden auf einem sauberen Ubuntu 22.04 LTS und Debian 12 getestet.
Schritt 1. Offizielles Repository hinzufügen (keine vorgefertigten Skripte googeln)
Die offizielle Dokumentation enthält ein Skript curl https://clickhouse.com/ | sh. Ich würde davon abraten, es auf einem Server zu verwenden, wenn Sie nicht genau verstehen, was es tut. Besser ist eine manuelle Installation über apt mit Schlüsselüberprüfung. Dies ist ein Fall, in dem Sicherheit wichtiger ist als Geschwindigkeit.
# ClickHouse GPG-Schlüssel hinzufügen (Paketsignatur)
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
# Repository zu apt-Quellen hinzufügen
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
# Paketliste aktualisieren
sudo apt-get update
Warum so kompliziert? Denn ohne Signaturüberprüfung riskieren Sie, ein Paket aus einem inoffiziellen Repository zu installieren. In der Produktion hatten wir einen Fall, in dem ein Entwickler curl | sh ausführte und eine alte Version mit einer Sicherheitslücke erhielt. Wiederholen Sie das nicht.
Schritt 2. Server und Client installieren
# Pakete installieren
sudo apt-get install -y clickhouse-server clickhouse-client
# Falls Sie Benchmarking-Werkzeuge möchten
sudo apt-get install -y clickhouse-common-static
Während der Installation werden Sie nach einem Passwort für den Benutzer default gefragt. Wichtiger Hinweis: Wenn Sie es leer lassen, wird überhaupt kein Passwort gesetzt. In der Produktion ist das eine Katastrophe. Selbst für eine Entwicklungsumgebung setzen Sie ein einfaches Passwort wie clickhouse_dev – es ist später leichter zu merken.
Nach der Installation sehen Sie:
ClickHouse server has been installed.
Configuration file: /etc/clickhouse-server/config.xml
Logs directory: /var/log/clickhouse-server/
Data directory: /var/lib/clickhouse/
Schritt 3. Version prüfen – ein Life-Hack, den die Dokumentation nicht erwähnt
clickhouse-server --version
Erwartete Ausgabe (zum Zeitpunkt des Schreibens):
ClickHouse server version 24.8.2.3 (official build).
Persönliche Erfahrung: Nach einem Update der ClickHouse-Version ändert sich manchmal das Datenspeicherformat auf der Platte. Wenn Sie eine alte Version hatten und apt upgrade ausgeführt haben, könnte das System mit dem Fehler Unknown data type nicht starten. Führen Sie vor dem Update immer clickhouse-server --version aus und lesen Sie das Changelog.
Schritt 4. Start über systemd – und prüfen, ob Sie nichts vergessen haben
# Autostart beim Booten aktivieren
sudo systemctl enable clickhouse-server
# Server jetzt starten
sudo systemctl start clickhouse-server
# Status prüfen
sudo systemctl status clickhouse-server
Wenn alles in Ordnung ist, sehen Sie:
● clickhouse-server.service - ClickHouse Server (analytic DBMS)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled)
Active: active (running) since ...
Häufiger Fehler: Der Server startet aufgrund unzureichender Dateideskriptoren nicht. Überprüfen Sie:
# Aktuelles Limit für den Dienst anzeigen
cat /proc/$(pidof clickhouse-server)/limits | grep "open files"
# Wenn weniger als 262144, zu /etc/systemd/system/clickhouse-server.service.d/override.conf hinzufügen
[Service]
LimitNOFILE=262144
LimitNPROC=32768
Vergessen Sie nach Änderungen nicht:
sudo systemctl daemon-reload
sudo systemctl restart clickhouse-server
Schritt 5. Erster Login über clickhouse-client – und mein Lieblingstest
clickhouse-client --password
# Geben Sie das in Schritt 2 festgelegte Passwort ein
Wenn Sie kein Passwort gesetzt haben, einfach:
clickhouse-client
Die erste Abfrage ist immer eine Versionsprüfung:
SELECT version();
Ausgabe:
┌─version()─┐
│ 24.8.2.3 │
└───────────┘
Jetzt können Sie stolz sein – ClickHouse funktioniert.
Bonus-Performance-Test: Führen Sie diese Abfrage aus – sie zeigt, wie schnell Ihre Maschine Daten generieren und verarbeiten kann:
SELECT sum(number) FROM numbers(100000000);
Auf einem anständigen Server (4+ Kerne) wird sie in 0,3–0,5 Sekunden ausgeführt. Auf einer schwachen virtuellen Maschine – bis zu 2 Sekunden. Wenn es mehr als 5 Sekunden sind, haben Sie CPU- oder Drosselungsprobleme.
Schritt 6. Wo wichtige Dateien liegen – merken Sie sich diese Pfade
| Datei/Verzeichnis | Zweck | Was ich am häufigsten geändert habe |
|---|---|---|
/etc/clickhouse-server/config.xml |
Hauptkonfiguration | listen_host (um auf mehr als nur localhost zu hören), max_server_memory_usage, http_port |
/etc/clickhouse-server/users.xml |
Benutzereinstellungen | password für default, readonly, quota |
/var/log/clickhouse-server/clickhouse-server.log |
Hauptlog | Wenn es nicht startet, zuerst hier prüfen |
/var/log/clickhouse-server/clickhouse-server.err.log |
Fehlerlog | Hier fange ich Speicher- und Festplattenfehler ab |
/var/lib/clickhouse/ |
Tabellendaten | Prüfen, ob die Festplatte voll ist |
/var/lib/clickhouse/status |
PID und Status | Für Überwachungsskripte |
Praxis-Moment: Einmal hörte ClickHouse auf, Anfragen anzunehmen. Alles lief, aber die Konsole hing. Es stellte sich heraus, dass die Logdatei auf 80 GB angewachsen war und die Root-Partition gefüllt hatte. Fügen Sie Rotation zur Konfiguration hinzu:
<logger>
<size>1000M</size>
<count>10</count>
</logger>
Schritt 7. Minimale Konfiguration für die Entwicklung
Für einen lokalen Rechner oder Entwicklungsserver verwende ich diese config.xml (ich ändere nur das Nötigste):
<!-- /etc/clickhouse-server/config.d/dev-override.xml -->
<clickhouse>
<!-- Auf allen Schnittstellen hören, nicht nur localhost -->
<listen_host>0.0.0.0</listen_host>
<!-- Speicher begrenzen, um den Laptop nicht zu killen -->
<max_server_memory_usage>0.75</max_server_memory_usage> <!-- 75% des gesamten RAM -->
<max_memory_usage_for_all_queries>0</max_memory_usage_for_all_queries>
<!-- Timeouts für Entwicklungsumgebung -->
<keep_alive_timeout>3</keep_alive_timeout>
<!-- Vermeiden, zu viele Partitionen auf der Platte zu erzeugen -->
<merge_tree>
<max_parts_in_total>1000</max_parts_in_total>
</merge_tree>
</clickhouse>
Anwenden:
sudo systemctl restart clickhouse-server
Warum eine separate Datei statt Bearbeitung von config.xml? Wenn das Paket aktualisiert wird, kann config.xml überschrieben werden. Legen Sie alle eigenen Änderungen in /etc/clickhouse-server/config.d/ ab. Ich habe dies nach einem Downgrade nach einem fehlgeschlagenen Update gelernt – ich verlor eine Woche Einstellungen.
Schritt 8. Ports für externe Verbindungen öffnen
ClickHouse hört auf drei Ports:
- 8123 – HTTP (für REST API, Grafana, intuitiv)
- 9000 – Natives TCP-Protokoll (für clickhouse-client und Treiber)
- 9009 – Inter-Server-Kommunikation (für Cluster, nicht unnötig anfassen)
Auf einem Entwicklungsrechner öffne ich mindestens 8123, um von TablePlus oder DBeaver aus eine Verbindung herzustellen:
# Prüfen, ob der Prozess lauscht
sudo netstat -tulpn | grep clickhouse
# Wenn nicht, in UFW erlauben
sudo ufw allow 8123/tcp
sudo ufw allow 9000/tcp
Häufiger Fehler: Unter Ubuntu 22.04 kann die Firewall standardmäßig blockieren, selbst wenn ClickHouse auf 0.0.0.0 lauscht. Überprüfen Sie immer mit telnet localhost 8123 und telnet $(hostname -I) 8123.
Typische Installationsprobleme und wie ich sie gelöst habe
Problem 1: Code: 210. DB::NetException: Connection refused
Ursache: Der Server wurde nicht gestartet oder lauscht nur auf 127.0.0.1.
Lösung:
# Status prüfen
systemctl status clickhouse-server
# Log ansehen
tail -n 50 /var/log/clickhouse-server/clickhouse-server.log
# Konfiguration bearbeiten
sudo nano /etc/clickhouse-server/config.xml
# <listen_host>0.0.0.0</listen_host> finden und auskommentieren
Problem 2: cannot create directory '/var/lib/clickhouse/' Permission denied
Ursache: Berechtigungen des Datenverzeichnisses wurden nach manuellem Eingriff durcheinandergebracht.
Lösung:
sudo chown -R clickhouse:clickhouse /var/lib/clickhouse
sudo chmod 755 /var/lib/clickhouse
Problem 3: Server startet, stürzt aber nach 30 Sekunden mit Out of memory ab
Ursache: ClickHouse möchte standardmäßig fast den gesamten Arbeitsspeicher nutzen.
Lösung: In einer Entwicklungsumgebung den Speicher strikt begrenzen:
# In /etc/clickhouse-server/config.xml hinzufügen
<max_server_memory_usage>2147483648</max_server_memory_usage> # 2 GB
Oder über Systemlimit:
sudo systemctl edit clickhouse-server
# Hinzufügen:
[Service]
MemoryMax=2G
Problem 4: Installation schlägt aufgrund eines Konflikts mit clickhouse-common-static fehl
Ursache: Überreste einer vorherigen Version oder ein beschädigter apt-Cache.
Lösung:
sudo apt-get remove --purge clickhouse-*
sudo rm -rf /etc/clickhouse-server /var/lib/clickhouse
sudo apt-get clean
# Installation von Anfang an wiederholen
Gesundheitscheck – meine persönliche Checkliste
Nach der Installation führe ich immer drei Tests durch:
Lokale Verbindung
clickhouse-client -q "SELECT 1" # Sollte 1 zurückgebenRemote-HTTP-Verbindung (von einem anderen Rechner)
curl "http://YOUR_SERVER_IP:8123/?query=SELECT+version()"Datenschreiben
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;
Wenn alles bestanden ist, war die Installation erfolgreich.
Wie geht es weiter?
Jetzt haben Sie ein funktionierendes ClickHouse unter Ubuntu/Debian. Der nächste Schritt ist zu lernen, wie man es in Docker einpackt und einen Drei-Knoten-Cluster mit Replikation einrichtet.
➡️ Nächster Artikel: [ClickHouse per Docker installieren: Produktionscluster in 10 Minuten] (Link folgt)
⬅️ Vorheriger Artikel: [Was ist ClickHouse: Warum columnar DBMS Analysen zerlegt] (Link folgt)
Viel Erfolg bei der Installation. Wenn Sie nicht weiterkommen, prüfen Sie zuerst /var/log/clickhouse-server/clickhouse-server.err.log. Dieser Fehler hat mir öfter geholfen als Kaffee am Montagmorgen.
← Vorherige: ClickHouse: Warum spaltenorientierte DBMS Analysen in Stücke reißen
→ Nächste: ClickHouse in Docker: Wie ich aufhörte, mir Sorgen zu machen und Analysen in 2 Minuten startete
— Editorial Team
Noch keine Kommentare.