Risoluzione dei problemi — ClickHouse
ClickHouse Keeper instabile (numero pari di repliche)
Causa: il numero di repliche ClickHouse Keeper è pari (2, 4, ecc.), il che impedisce il mantenimento del quorum. Il protocollo Raft necessità di una maggioranza stretta per eleggere un leader, e un numero pari di nodi non garantisce questa maggioranza in caso di partizione di rete.
Soluzione:
- Verificate il numero attuale di repliche Keeper:
kubectl get pods -l app=clickhouse-keeper-<name> - Modificate il numero di repliche per usare un numero dispari (3 o 5):
clickhouse.yaml
spec:
clickhouseKeeper:
enabled: true
replicas: 3 # Sempre dispari - Applicate la modifica:
kubectl apply -f clickhouse.yaml - Verificate i log del Keeper per confermare che il quorum sia ristabilito:
kubectl logs -l app=clickhouse-keeper-<name>
Query lente su grandi volumi
Causa: la configurazione di sharding non è ottimale, le tabelle non usano i motori corretti, o le risorse allocate sono insufficienti.
Soluzione:
- Verificate che usiate tabelle Distributed per distribuire le query su tutti gli shard.
- Assicuratevi che le tabelle locali usino il motore
ReplicatedMergeTreecon unORDER BYadatto alle vostre query più frequenti. - Aumentate il numero di shard per distribuire il carico:
clickhouse.yaml
spec:
shards: 4 # Aumentare il numero di shard - Verificate le risorse allocate e aumentatele se necessario:
kubectl top pod -l app=clickhouse-<name> - Analizzate le query lente tramite il
query_logdi sistema:SELECT query, elapsed, read_rows, memory_usage
FROM system.query_log
WHERE type = 'QueryFinish'
ORDER BY elapsed DESC
LIMIT 10;
Spazio disco insufficiente
Causa: il volume di dati supera la dimensione del PVC, o i log di sistema (query_log, query_thread_log) accumulano troppi dati.
Soluzione:
- Aumentate la dimensione del volume dati:
clickhouse.yaml
spec:
size: 50Gi # Aumentare dal valore attuale - Verificate anche la dimensione del volume log e regolatela se necessario:
clickhouse.yaml
spec:
logStorageSize: 5Gi # Aumentare se i log saturano - Riducete la retention dei log di sistema tramite
logTTL:clickhouse.yamlspec:
logTTL: 7 # Ridurre da 15 a 7 giorni ad esempio - Verificate le politiche di retention dei vostri dati applicativi ed eliminate le partizioni obsolete.
Pod ClickHouse in stato Pending
Causa: il PersistentVolumeClaim (PVC) non riesce a legarsi a un volume, generalmente a causa di una storageClass inesistente o di una quota di risorse superata.
Soluzione:
- Verificate lo stato del pod e gli eventi associati:
kubectl describe pod clickhouse-<name>-0-0 - Verificate lo stato dei PVC:
kubectl get pvc -l app=clickhouse-<name> - Verificate che la
storageClassutilizzata sia una delle classi disponibili:local,replicatedoreplicated-async. - Verificate che le quote di risorse (CPU, memoria, archiviazione) non siano state raggiunte.
- Correggete la configurazione nel vostro manifesto e riapplicate:
kubectl apply -f clickhouse.yaml
Replica inter-shard fallita
Causa: ClickHouse Keeper non è funzionale, la rete tra i pod e instabile, o la configurazione delle repliche per shard e errata.
Soluzione:
- Verificate che ClickHouse Keeper sia operativo:
kubectl get pods -l app=clickhouse-keeper-<name> - Consultate i log del Keeper per identificare gli errori:
kubectl logs -l app=clickhouse-keeper-<name> - Verificate la connettività di rete tra i pod ClickHouse:
kubectl exec clickhouse-<name>-0-0 -- clickhouse-client --query "SELECT * FROM system.clusters" - Assicuratevi che la configurazione delle repliche sia coerente:
clickhouse.yaml
spec:
shards: 2
replicas: 3 # Ogni shard deve avere lo stesso numero di repliche
clickhouseKeeper:
enabled: true
replicas: 3 - Se il Keeper e instabile, riavviate i pod Keeper e attendete la stabilizzazione del quorum.