Clickhouseär en mycket intressant kolumnbaserad databas med öppen källkod, som främst används för onlineanalys (OLAP). Den använder ett eget inbyggt TCP-protokoll, men stöder även HTTP, så man behöver egentligen ingen speciell klient eller ”drivrutin” för att kommunicera med den.
Det finns många fantastiska funktioner, alldeles för många för att rymmas här, men jag ska nämna några riktigt bra som jag har använt:
Du kan läsa det härutmärkta blogginläggetom replikerade/distribuerade installationer. De viktigaste punkterna är:
Hur passar HAProxy in i det här sammanhanget? Det är väldigt enkelt: det kan hjälpa dig med datainläsning, övervaka och vidarebefordra trafiken till rätt ClickHouse-server, balansera datainläsningen och simulera ”sticky sessions” för dina ClickHouse-användare (eller tvinga dem att byta till en ny server varje gång, så att de inte glömmer att använda distribuerade tabeller – precis som en riktigBOFH).
Om jag ville vara rolig skulle jag säga att det finns en fantastisk synergi mellan HAProxy och ClickHouse.
listen clickhouse_http
mode http
bind :8443 ssl crt /path/to/cert.pem alpn h2,http/1.1
option httpchk GET /ping
http-check expect string Ok.
balansering roundrobin
server ch01_shard01 10.0.0.1:8443 kontroll ssl verifiera krävs ca-fil CA_chain.pem
server ch02_shard01 10.0.0.2:8443 kontroll ssl verifiera krävs ca-fil CA_chain.pem
server ch03_shard02 10.0.0.3:8443 check ssl verify required ca-file CA_chain.pem
server ch04_shard02 10.0.0.4:8443 check ssl verify required ca-file CA_chain.pem
listen clickhouse_tcp
läge tcp
bind :9440 ssl crt /path/to/cert.pem
alternativ httpchk GET /ping
http-kontroll förväntar sträng Ok.
balansering leastconn
server ch01_shard01 10.0.0.1:9440 ssl-kontroll port 8443 ssl-verifiering krävs ca-fil CA_chain.pem
server ch02_shard01 10.0.0.2:9440 check-ssl port 8443 ssl verify required ca-file CA_chain.pem
server ch03_shard02 10.0.0.3:9440 check-ssl port 8443 ssl verify required ca-file CA_chain.pem
server ch04_shard02 10.0.0.4:9440 check-ssl port 8443 ssl verify required ca-file CA_chain.pemDet är nästan otroligt hur effektiv den här enkla konfigurationen är. Vi vidarebefordrar både HTTP- och TCP-trafik till ClickHouse (skyddad med SSL). Ren TCP-trafik kan användas av officiella ClickHouse-klienter på följande sätt:
cat ldjson.data | clickhouse client --host 1.2.3.4 --query "INSERT INTO mydb.mytable FORMAT JSONEachRow" --max_insert_block_size=100000Japp, man kan lägga inradavgränsad JSONdirekt i ClickHouse – livet är underbart, eller hur? Dessutom, som du ser, använder vi olika portar och protokoll för kontrollerna, och vi har valt algoritmenleastconnför lastbalansering (med tanke på att TCP-anslutningarna förväntas vara långvariga).
Det är också väldigt enkelt att använda HTTP-gränssnittet:
cat ldjson.data | gzip | curl --data-binary "@-" \
-H "Content-Encoding: gzip" \ "https://1.2.3.4:8443?query=INSERT+INTO+mydb.mytable+FORMAT+JSONEachRow"Vi kan till och med utnyttja komprimering på klientsidan till vår egen fördel!
HAProxy erbjuder automatiskroutningochsharding; den väljer ut en av våra fyra servrar och vidarebefordrar data dit, varefter ClickHouse replikerar data till de övriga servrarna i samma shard. HAProxy underlättar även den dagliga driften av klustret; man kan till exempel tömma specifika servrar eller stänga av dem utan att det påverkar den normala användningen av klustret.
Här är länken: go.
Jag hoppas att ni har uppskattat denna serie med flera artiklar i form av ”recept” som handlar om hur man bygger tillförlitliga applikationer med (HA)Proxy.
Om du av någon anledning skulle ha missat någon av de tidigare essäerna har jag listat dem i kronologisk ordning nedan.
Ta för dig:
P.S. Om du har några frågor om någon del av den här serien är du välkommen att ställa dem i kommentarfältet.
1. Pålitliga appar med (HA)Proxy — Inledning
2. Club sandwich + Double PostgreSQL — Att lösa problem med fler lager
3. TLS Calzone + Wrap Crispy JWT — Autentisering i nätverkets ytterkant
4. ”Docker ” Cake + ”Say my name” — Logga in och reda ut tvivel
5. Service Discovery Ice cream — Den långa och krokiga vägen till K8s