Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem

Peb niaj hnub ntsib Apache Cassandra database thiab xav tau kev khiav haujlwm hauv Kubernetes-based infrastructure. Hauv cov ntaub ntawv no, peb yuav qhia peb lub zeem muag ntawm cov kauj ruam tsim nyog, cov txheej txheem thiab cov kev daws teeb meem uas twb muaj lawm (nrog rau cov ntsiab lus ntawm cov neeg ua haujlwm) rau kev tsiv teb tsaws Cassandra mus rau K8s.

"Leej twg los kav ib tug poj niam kuj yuav kav lub xeev"

Cassandra yog leej twg? Nws yog ib qho kev faib cia uas tsim los tswj cov ntaub ntawv ntau ntau thaum kom ntseeg tau tias muaj ntau yam tsis muaj qhov tsis ua tiav. Qhov project tsis xav tau kev taw qhia ntev, yog li kuv tsuas yog muab cov yam ntxwv tseem ceeb ntawm Cassandra uas yuav cuam tshuam rau hauv cov ntsiab lus ntawm ib tsab xov xwm tshwj xeeb:

  • Cassandra sau hauv Java.
  • Cassandra topology suav nrog ntau theem:
    • Node - ib qho piv txwv Cassandra;
    • Khib yog ib pawg ntawm Cassandra piv txwv, koom ua ke los ntawm qee tus yam ntxwv, nyob hauv tib lub chaw cov ntaub ntawv;
    • Datacenter - ib qho kev sau ntawm txhua pawg ntawm Cassandra piv txwv nyob rau hauv ib lub chaw ntaub ntawv;
    • Cluster yog ib qho kev sau ntawm txhua qhov chaw khaws ntaub ntawv.
  • Cassandra siv qhov chaw nyob IP los txheeb xyuas qhov node.
  • Txhawm rau ua kom ceev kev sau ntawv thiab nyeem ntawv, Cassandra khaws qee cov ntaub ntawv hauv RAM.

Tam sim no - mus rau qhov muaj peev xwm txav mus rau Kubernetes.

Kos npe rau kev hloov

Hais txog kev tsiv teb tsaws chaw ntawm Cassandra mus rau Kubernetes, peb cia siab tias nrog kev txav mus los nws yuav yooj yim dua los tswj. Dab tsi yuav xav tau rau qhov no, dab tsi yuav pab nrog qhov no?

1. Cov ntaub ntawv khaws cia

Raws li twb tau hais meej lawm, Cassanda khaws ib feem ntawm cov ntaub ntawv hauv RAM - hauv Memtable. Tab sis muaj lwm qhov ntawm cov ntaub ntawv uas tau txais kev cawmdim rau disk - hauv daim ntawv SSTable. Ib qhov chaw raug ntxiv rau cov ntaub ntawv no Ua Log - Cov ntaub ntawv ntawm txhua qhov kev hloov pauv, uas tseem khaws cia rau disk.

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Sau daim duab pauv hauv Cassandra

Hauv Kubernetes, peb tuaj yeem siv PersistentVolume khaws cov ntaub ntawv. Ua tsaug rau cov txheej txheem pov thawj, kev ua haujlwm nrog cov ntaub ntawv hauv Kubernetes tau yooj yim dua txhua xyoo.

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Peb yuav faib peb tus kheej PersistentVolume rau txhua Cassandra pod

Nws yog ib qho tseem ceeb uas yuav tsum nco ntsoov tias Cassandra nws tus kheej cuam tshuam cov ntaub ntawv rov ua dua, muab cov txheej txheem tsim ua rau qhov no. Yog li ntawd, yog tias koj tab tom tsim Cassandra pawg los ntawm ntau cov nodes, ces tsis tas yuav siv cov tshuab faib xws li Ceph lossis GlusterFS rau cov ntaub ntawv khaws cia. Hauv qhov no, nws yuav yog qhov laj thawj los khaws cov ntaub ntawv ntawm tus tswv disk siv local persistent disks los yog mounting hostPath.

Lwm lo lus nug yog yog tias koj xav tsim ib qho chaw sib cais rau cov neeg tsim khoom rau txhua ceg haujlwm. Hauv qhov no, txoj hauv kev kom raug yog los tsa ib qho Cassandra node thiab khaws cov ntaub ntawv hauv ib qho chaw khaws cia, piv txwv li. cov Ceph thiab GlusterFS hais yuav yog koj cov kev xaiv. Tom qab ntawd tus tsim tawm yuav paub tseeb tias nws yuav tsis poob cov ntaub ntawv sim txawm tias ib qho ntawm Kuberntes pawg nodes ploj lawm.

2. Saib xyuas

Qhov kev xaiv zoo tshaj plaws uas tsis muaj kev sib tw rau kev saib xyuas hauv Kubernetes yog Prometheus (Peb tau tham txog qhov no hauv kev nthuav dav hauv hais txog tsab ntawv ceeb toom). Cassandra ua li cas nrog metrics exporters rau Prometheus? Thiab, dab tsi tseem ceeb tshaj, nrog rau kev sib tw dashboards rau Grafana?

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Ib qho piv txwv ntawm cov duab kos hauv Grafana rau Cassandra

Tsuas muaj ob lub exporters: jmx_exporter ΠΈ cassandra_exporter.

Peb xaiv thawj tus rau peb tus kheej vim tias:

  1. JMX Exporter tab tom loj hlob thiab txhim kho, thaum Cassandra Exporter tsis tuaj yeem tau txais kev txhawb nqa hauv zej zog txaus. Cassandra Exporter tseem tsis txhawb feem ntau ntawm Cassandra.
  2. Koj tuaj yeem khiav nws li javaagent los ntawm kev ntxiv tus chij -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Muaj ib qho rau nws txaus dashboad, uas yog incompatible nrog Cassandra Exporter.

3. Xaiv Kubernetes primitives

Raws li cov qauv saum toj no ntawm Cassandra pawg, cia peb sim txhais txhua yam uas tau piav qhia nyob rau hauv Kubernetes cov ntsiab lus:

  • Cassandra Node β†’ Pod
  • Cassandra khib β†’ StatefulSet
  • Cassandra Datacenter β†’ pas dej ua ke los ntawm StatefulSets
  • Cassandra Cluster β†’ ???

Nws hloov tawm tias qee qhov chaw ntxiv ploj lawm los tswj tag nrho Cassandra pawg ib zaug. Tab sis yog tias tsis muaj ib yam dab tsi, peb tuaj yeem tsim nws! Kubernetes muaj cov txheej txheem los txiav txim siab nws tus kheej cov peev txheej rau lub hom phiaj no - Custom Resource Txhais.

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Tshaj tawm cov peev txheej ntxiv rau cov cav thiab kev ceeb toom

Tab sis Custom Resource nws tus kheej tsis txhais tau dab tsi: tom qab tag nrho, nws xav tau tus maub los. Tej zaum koj yuav tau nrhiav kev pab Kubernetes tus neeg ua haujlwm...

4. Kev txheeb xyuas ntawm cov kaus mom

Hauv kab lus saum toj no, peb tau pom zoo tias ib qho Cassandra node yuav sib npaug ib lub plhaub hauv Kubernetes. Tab sis tus IP chaw nyob ntawm cov pods yuav txawv txhua zaus. Thiab qhov kev txheeb xyuas ntawm ib qho ntawm Cassandra yog raws li qhov chaw nyob IP ... Nws hloov tawm tias tom qab txhua qhov tshem tawm ntawm lub plhaub taum pauv, Cassandra pawg yuav ntxiv ib qho tshiab.

Muaj ib txoj hauv kev tawm, thiab tsis yog ib qho:

  1. Peb tuaj yeem khaws cov ntaub ntawv los ntawm tus neeg txheeb xyuas tus tswv tsev (UUIDs uas cim qhov xwm txheej Cassandra) lossis los ntawm tus IP chaw nyob thiab khaws nws tag nrho hauv qee qhov qauv / rooj. Txoj kev muaj ob lub ntsiab tsis zoo:
    • Qhov kev pheej hmoo ntawm ib qho kev sib tw tshwm sim yog tias ob lub pob poob ib zaug. Tom qab qhov nce, Cassandra nodes yuav ib txhij thov tus IP chaw nyob los ntawm lub rooj thiab sib tw rau tib qhov chaw.
    • Yog tias Cassandra node tau poob nws cov ntaub ntawv, peb yuav tsis tuaj yeem txheeb xyuas nws.
  2. Qhov kev daws thib ob zoo li lub hack me me, tab sis txawm li cas los xij: peb tuaj yeem tsim Kev Pabcuam nrog ClusterIP rau txhua qhov Cassandra node. Teeb meem nrog qhov kev siv no:
    • Yog tias muaj ntau cov nodes hauv Cassandra pawg, peb yuav tau tsim ntau Cov Kev Pabcuam.
    • ClusterIP feature yog siv los ntawm iptables. Qhov no tuaj yeem dhau los ua teeb meem yog tias Cassandra pawg muaj ntau (1000... lossis txawm tias 100?) nodes. Txawm tias ntsuas raws li IPVS daws tau qhov teeb meem no.
  3. Qhov thib peb kev daws teeb meem yog siv lub network ntawm nodes rau Cassandra nodes es tsis txhob ntawm ib tug mob siab rau network ntawm pods los ntawm kev ua kom qhov chaw. hostNetwork: true. Txoj kev no imposes tej yam kev txwv:
    • Hloov cov units. Nws yog qhov tsim nyog uas cov node tshiab yuav tsum muaj tib qhov chaw nyob IP ib yam li yav dhau los (hauv huab zoo li AWS, GCP qhov no yuav luag ua tsis tau);
    • Siv lub network ntawm pawg nodes, peb pib sib tw rau cov peev txheej network. Yog li ntawd, tso ntau tshaj ib lub pod nrog Cassandra ntawm ib pawg ntawm pawg yuav muaj teeb meem.

5. Thaub qab

Peb xav kom txuag tau ib daim ntawv qhia tag nrho ntawm ib qho Cassandra node cov ntaub ntawv ntawm lub sijhawm. Kubernetes muab ib qho yooj yim feature siv CronJob, tab sis ntawm no Cassandra nws tus kheej tso ib tug hais nyob rau hauv peb lub log.

Cia kuv ceeb toom koj tias Cassandra khaws qee cov ntaub ntawv hauv lub cim xeeb. Txhawm rau ua kom tag nrho thaub qab, koj xav tau cov ntaub ntawv los ntawm lub cim xeeb (Memtables) txav mus rau disk (SSTables). Lub sijhawm no, Cassandra node nres txais kev sib txuas, kaw tag nrho ntawm pawg.

Tom qab no, lub thaub qab raug tshem tawm (snapshot) thiab txoj kev cawmdim (keyspace). Thiab tom qab ntawd nws hloov tawm tias tsuas yog thaub qab tsis muab rau peb ib yam dab tsi: peb yuav tsum khaws cov ntaub ntawv txheeb xyuas uas Cassandra ntawm lub luag haujlwm - cov no yog cov cim tshwj xeeb.

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Kev faib tawm ntawm tokens los txheeb xyuas cov ntaub ntawv Cassandra nodes yog lub luag haujlwm rau

Ib qho piv txwv tsab ntawv rau kev noj Cassandra thaub qab los ntawm Google hauv Kubernetes tuaj yeem pom ntawm qhov txuas no. Tib lub ntsiab lus uas tsab ntawv tsis coj mus rau hauv tus account yog rov pib dua cov ntaub ntawv rau ntawm node ua ntej noj cov snapshot. Ntawd yog, qhov thaub qab tau ua tsis yog rau lub xeev tam sim no, tab sis rau lub xeev me ntsis ua ntej. Tab sis qhov no yuav pab kom tsis txhob coj cov node tawm ntawm kev ua haujlwm, uas zoo li muaj laj thawj.

set -eu

if [[ -z "$1" ]]; then
  info "Please provide a keyspace"
  exit 1
fi

KEYSPACE="$1"

result=$(nodetool snapshot "${KEYSPACE}")

if [[ $? -ne 0 ]]; then
  echo "Error while making snapshot"
  exit 1
fi

timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')

mkdir -p /tmp/backup

for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
  table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
  mkdir /tmp/backup/$table
  mv $path /tmp/backup/$table
done


tar -zcf /tmp/backup.tar.gz -C /tmp/backup .

nodetool clearsnapshot "${KEYSPACE}"

Ib qho piv txwv ntawm tsab ntawv bash rau kev siv thaub qab los ntawm ib qho Cassandra node

Npaj cov kev daws teeb meem rau Cassandra hauv Kubernetes

Dab tsi yog tam sim no siv los xa Cassandra hauv Kubernetes thiab qhov twg ntawm qhov zoo tshaj plaws haum rau cov kev cai muab?

1. Cov kev daws teeb meem raws li StatefulSet lossis Helm kab kos

Siv lub hauv paus StatefulSets ua haujlwm los khiav Cassandra pawg yog qhov kev xaiv zoo. Siv daim ntawv qhia Helm thiab Go templates, koj tuaj yeem muab tus neeg siv nrog qhov hloov pauv tau yooj yim rau kev xa Cassandra.

Qhov no feem ntau ua haujlwm zoo ... txog thaum muaj ib yam dab tsi tshwm sim, xws li cov node tsis ua haujlwm. Standard Kubernetes cov cuab yeej tsuas tsis tuaj yeem coj mus rau hauv tus account tag nrho cov yam ntxwv tau piav qhia saum toj no. Tsis tas li ntawd, txoj hauv kev no muaj kev txwv ntau npaum li cas nws tuaj yeem txuas ntxiv mus rau kev siv ntau dua: kev hloov pauv, thaub qab, rov qab, saib xyuas, thiab lwm yam.

Cov neeg sawv cev:

Ob daim duab zoo sib npaug, tab sis raug rau cov teeb meem tau piav qhia saum toj no.

2. Kev daws teeb meem raws li Kubernetes tus neeg teb xov tooj

Cov kev xaiv zoo li no nthuav ntau dua vim tias lawv muab sijhawm txaus rau kev tswj hwm pawg. Rau kev tsim tus neeg teb xov tooj Cassandra, zoo li lwm yam database, tus qauv zoo zoo li Sidecar <-> Controller <-> CRD:

Kev tsiv teb tsaws ntawm Cassandra mus rau Kubernetes: nta thiab kev daws teeb meem
Node tswj tswvyim nyob rau hauv ib tug zoo-tsim Cassandra tus neeg teb xov tooj

Cia peb saib cov neeg ua haujlwm uas twb muaj lawm.

1. Cassandra-operator los ntawm instaclustr

  • GitHub
  • Kev Npaj: Alpha
  • Daim ntawv tso cai: Apache 2.0
  • Implemented nyob rau hauv: Java

Qhov no yog ib qho kev cog lus zoo heev thiab nquag tsim qhov project los ntawm lub tuam txhab uas muaj kev tswj hwm Cassandra xa mus. Nws, raws li tau piav qhia saum toj no, siv lub thawv sab hauv uas lees txais cov lus txib ntawm HTTP. Sau hauv Java, qee zaum nws tsis muaj kev ua haujlwm siab dua ntawm cov neeg siv khoom mus tsev qiv ntawv. Tsis tas li, tus neeg teb xov tooj tsis txhawb cov Racks sib txawv rau ib qho Datacenter.

Tab sis tus neeg teb xov tooj muaj qhov zoo xws li kev txhawb nqa rau kev saib xyuas, kev tswj hwm qib siab hauv pawg siv CRD, thiab txawm tias cov ntaub ntawv los ua thaub qab.

2. Navigator los ntawm Jetstack

  • GitHub
  • Kev Npaj: Alpha
  • Daim ntawv tso cai: Apache 2.0
  • Implemented nyob rau hauv: Golang

Ib nqe lus tsim los siv DB-as-a-Service. Tam sim no txhawb nqa ob lub databases: Elasticsearch thiab Cassandra. Nws muaj cov kev daws teeb meem zoo li kev tswj hwm kev tswj hwm ntawm RBAC (rau qhov no nws muaj nws tus kheej cais navigator-apiserver). Ib qho kev nthuav dav uas yuav tsim nyog los saib ze dua, tab sis qhov kev cog lus kawg tau ua ib xyoos thiab ib nrab dhau los, uas ua kom pom tseeb txo nws lub peev xwm.

3. Cassandra-operator by vgkowski

  • GitHub
  • Kev Npaj: Alpha
  • Daim ntawv tso cai: Apache 2.0
  • Implemented nyob rau hauv: Golang

Lawv tsis xav txog nws "qhov hnyav", txij li qhov kev cog lus zaum kawg rau lub chaw khaws cia yog ntau tshaj ib xyoos dhau los. Kev txhim kho tus neeg teb xov tooj raug tso tseg: qhov tseeb version ntawm Kubernetes tau tshaj tawm raws li kev txhawb nqa yog 1.9.

4. Cassandra-operator los ntawm Rook

  • GitHub
  • Kev Npaj: Alpha
  • Daim ntawv tso cai: Apache 2.0
  • Implemented nyob rau hauv: Golang

Tus neeg teb xov tooj uas nws txoj kev loj hlob tsis tau nce sai npaum li peb xav tau. Nws muaj CRD qauv zoo rau kev tswj hwm pawg, daws qhov teeb meem ntawm kev txheeb xyuas cov nodes siv Kev Pabcuam nrog ClusterIP (tib yam "hack") ... tab sis qhov ntawd yog tag nrho rau tam sim no. Tam sim no tsis muaj kev saib xyuas lossis thaub qab tawm ntawm lub thawv (los ntawm txoj kev, peb yog rau kev saib xyuas coj nws peb tus kheej). Lub ntsiab lus nthuav yog tias koj tuaj yeem siv ScyllaDB siv tus neeg teb xov tooj no.

NB: Peb siv tus neeg teb xov tooj no nrog kev hloov kho me me hauv ib qho ntawm peb cov haujlwm. Tsis muaj teeb meem tau pom hauv tus neeg teb xov tooj txoj haujlwm thaum lub sijhawm ua haujlwm tag nrho (~ 4 lub hlis ntawm kev ua haujlwm).

5. CassKop ntawm txiv kab ntxwv

  • GitHub
  • Kev Npaj: Alpha
  • Daim ntawv tso cai: Apache 2.0
  • Implemented nyob rau hauv: Golang

Tus neeg ua haujlwm yau tshaj plaws ntawm daim ntawv teev npe: thawj qhov kev cog lus tau ua rau lub Tsib Hlis 23, 2019. Tam sim no nws muaj nyob rau hauv nws cov arsenal ib tug loj tus naj npawb ntawm cov nta los ntawm peb cov npe, ntau cov ntsiab lus uas yuav nrhiav tau nyob rau hauv qhov project repository. Tus neeg teb xov tooj yog tsim los ntawm tus neeg teb xov tooj nrov-sdk. Txhawb kev saib xyuas tawm ntawm lub thawv. Qhov sib txawv tseem ceeb ntawm lwm tus neeg ua haujlwm yog kev siv CassKop plugin, siv hauv Python thiab siv rau kev sib txuas lus ntawm Cassandra nodes.

tshawb pom

Tus naj npawb ntawm txoj hauv kev thiab cov kev xaiv ua tau rau kev xa khoom Cassandra mus rau Kubernetes hais rau nws tus kheej: lub ntsiab lus xav tau.

Nyob rau theem no, koj tuaj yeem sim ib qho ntawm cov saum toj no ntawm koj tus kheej txaus ntshai thiab pheej hmoo: tsis muaj ib tus neeg tsim khoom lav 100% kev ua haujlwm ntawm lawv cov kev daws teeb meem hauv ib puag ncig tsim khoom. Tab sis tam sim no, ntau cov khoom zoo li cog lus tias yuav sim siv hauv cov rooj zaum loj hlob.

Kuv xav tias yav tom ntej tus poj niam no ntawm lub nkoj yuav los ua ke!

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib