Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo

Sihlala sihlangana nesizindalwazi se-Apache Cassandra kanye nesidingo sokusisebenzisa ngaphakathi kwengqalasizinda esekwe ku-Kubernetes. Kulesi sihloko, sizokwabelana ngombono wethu wezinyathelo ezidingekayo, imibandela nezisombululo ezikhona (kuhlanganise nohlaka lwabasebenzisi) bokuthuthela i-Cassandra iye kuma-K8.

“Noma ngubani ongabusa owesifazane angabusa nombuso”

Ubani uCassandra? Iwuhlelo lokulondoloza olusabalalisiwe oluklanyelwe ukuphatha umthamo omkhulu wedatha ngenkathi iqinisekisa ukutholakala okuphezulu ngaphandle kwephuzu elilodwa lokwehluleka. Iphrojekthi ayidingi neze isingeniso eside, ngakho-ke ngizonikeza kuphela izici eziyinhloko zeCassandra ezizosebenza kumongo wendatshana ethile:

  • I-Cassandra ibhalwe ngeJava.
  • I-Cassandra topology ihlanganisa amazinga amaningana:
    • I-Node - isibonelo esisodwa se-Cassandra esisetshenzisiwe;
    • I-Rack iyiqembu lezimo ze-Cassandra, ezihlanganiswe izici ezithile, ezitholakala kusikhungo sedatha esifanayo;
    • I-Datacenter - iqoqo lawo wonke amaqembu ezenzakalo ze-Cassandra atholakala esikhungweni esisodwa sedatha;
    • I-Cluster iqoqo lazo zonke izikhungo zedatha.
  • I-Cassandra isebenzisa ikheli le-IP ukukhomba indawo.
  • Ukusheshisa ukubhala nokufunda, i-Cassandra igcina enye idatha ku-RAM.

Manje - ekuthutheleleni okungaba khona ku-Kubernetes.

Uhlu lokuhlola lokudluliswa

Uma sikhuluma ngokufuduka kweCassandra iye eKubernetes, sithemba ukuthi ngokuhamba kuzoba lula ukuphatha. Yini ezodingeka kulokhu, yini ezosiza kulokhu?

1. Ukugcinwa kwedatha

Njengoba sekucacisiwe, uCassanda ugcina ingxenye yedatha ku-RAM - ku Iyakhumbuleka. Kodwa kunenye ingxenye yedatha elondolozwe kudiski - ngefomu I-SSTable. Ibhizinisi lingeziwe kule datha Ilogi Yokuzinikela - amarekhodi akho konke ukuthengiselana, nawo agcinwa kudiski.

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Bhala umdwebo wokwenziwe nge-Cassandra

Ku-Kubernetes, singasebenzisa i-PersistentVolume ukuze sigcine idatha. Ngenxa yezindlela ezifakazelwe, ukusebenza ngedatha ku-Kubernetes kuba lula minyaka yonke.

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Sizonikeza i-pod ngayinye ne-Cassandra i-PersistentVolume yayo

Kubalulekile ukuqaphela ukuthi i-Cassandra ngokwayo isho ukuphindaphinda kwedatha, inikeza izindlela ezakhelwe ngaphakathi zalokhu. Ngakho-ke, uma wakha iqoqo le-Cassandra kusuka kunombolo enkulu yama-node, ngakho-ke asikho isidingo sokusebenzisa izinhlelo ezisabalalisiwe njenge-Ceph noma i-GlusterFS yokugcina idatha. Kulokhu, kungaba okunengqondo ukugcina idatha kudiski lomsingathi usebenzisa amadiski aqhubekayo wendawo noma ukukhweza hostPath.

Omunye umbuzo uthi uma ufuna ukwakha indawo ehlukile yonjiniyela kugatsha lesici ngasinye. Kulesi simo, indlela efanele ingaba ukuphakamisa i-node eyodwa ye-Cassandra nokugcina idatha endaweni yokugcina esabalalisiwe, i.e. I-Ceph ne-GlusterFS eshiwo kuzoba yizinketho zakho. Khona-ke umthuthukisi uzoqiniseka ukuthi ngeke alahlekelwe idatha yokuhlola ngisho noma enye ye-cluster node ye-Kuberntes ilahleka.

2. Ukuqapha

Inketho cishe engaphikiswanga yokusebenzisa ukuqapha e-Kubernetes yi-Prometheus (sikhulume ngalokhu ngokuningiliziwe ku umbiko ohlobene). Iqhuba kanjani i-Cassandra ngabathumeli bemethrikhi be-Prometheus? Futhi, yini ebaluleke kakhulu, ngamadeshibhodi afanayo e-Grafana?

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Isibonelo sokuvela kwamagrafu e-Grafana ye-Cassandra

Babili kuphela abathumeli ngaphandle: jmx_exporter и cassandra_exporter.

Sizikhethele eyokuqala ngoba:

  1. I-JMX Exporter iyakhula futhi iyathuthuka, kuyilapho i-Cassandra Exporter ingazange ikwazi ukuthola ukusekelwa okwanele komphakathi. I-Cassandra Exporter namanje ayizisekeli izinguqulo eziningi ze-Cassandra.
  2. Ungayisebenzisa njenge-javaagent ngokungeza ifulegi -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Kukhona okwakhe ideshibhodi eyanele, engahambisani ne-Cassandra Exporter.

3. Ukukhetha i-Kubernetes primitives

Ngokwesakhiwo esingenhla seqoqo le-Cassandra, ake sizame ukuhumusha yonke into echazwe lapho ibe yamagama e-Kubernetes:

  • I-Cassandra Node → I-Pod
  • I-Cassandra Rack → StatefulSet
  • I-Cassandra Datacenter → ichibi elivela ku-StatefulSets
  • I-Cassandra Cluster → ???

Kuvele ukuthi elinye ibhizinisi elengeziwe alikho ukuze liphathe lonke iqoqo le-Cassandra ngesikhathi esisodwa. Kodwa uma into ingekho, singayidala! I-Kubernetes inendlela yokuchaza izinsiza zayo ngale njongo - Izincazelo Zensiza Yangokwezifiso.

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Ukumemezela izinsiza ezengeziwe zamalogi nezexwayiso

Kodwa i-Custom Resource ngokwayo ayisho lutho: emva kwakho konke, idinga isilawuli. Kungase kudingeke ufune usizo U-Kubernetes opharetha...

4. Ukuhlonza ama-pods

Esigabeni esingenhla, sivumelene ngokuthi inodi eyodwa yeCassandra izolingana ne-pod eyodwa eKubernetes. Kodwa amakheli e-IP ama-pods azohluka isikhathi ngasinye. Futhi ukuhlonza i-node ku-Cassandra kusekelwe ekhelini le-IP ... Kuvela ukuthi ngemva kokususwa ngakunye kwe-pod, iqoqo le-Cassandra lizofaka i-node entsha.

Kukhona indlela yokuphuma, hhayi eyodwa kuphela:

  1. Singagcina amarekhodi ngezihlonzi zesikhungo (ama-UUID ahlonza ngokukhethekile izimo ze-Cassandra) noma ngamakheli e-IP futhi siwagcine wonke kwezinye izakhiwo/amathebula. Le ndlela inezinkinga ezimbili eziyinhloko:
    • Ingozi yesimo somjaho eyenzeka uma amanodi amabili ewa ngesikhathi esisodwa. Ngemuva kokukhuphuka, ama-Cassandra node azocela kanyekanye ikheli le-IP etafuleni futhi aqhudelane ngesisetshenziswa esifanayo.
    • Uma inodi ye-Cassandra ilahlekelwe idatha yayo, ngeke sisakwazi ukuyikhomba.
  2. Isixazululo sesibili sibonakala njenge-hack encane, kodwa nokho: singakha Isevisi nge-ClusterIP yenodi ngayinye ye-Cassandra. Izinkinga ngalokhu kuqaliswa:
    • Uma kunama-node amaningi kuqoqo le-Cassandra, kuzodingeka sakhe Izinsizakalo eziningi.
    • Isici se-ClusterIP sisetshenziswa ngama-iptables. Lokhu kungaba inkinga uma iqoqo leCassandra linamanodi amaningi (1000... noma ayi-100?). Nakuba ukulinganisa ngokusekelwe ku-IPVS ingaxazulula le nkinga.
  3. Isixazululo sesithathu ukusebenzisa inethiwekhi yamanodi e-Cassandra node esikhundleni senethiwekhi ezinikele yama-pod ngokunika amandla ukulungiselelwa. hostNetwork: true. Le ndlela ibeka imikhawulo ethile:
    • Ukushintsha amayunithi. Kudingeka ukuthi indawo entsha kufanele ibe nekheli le-IP elifanayo neledlule (emafwini afana ne-AWS, GCP cishe akunakwenzeka ukwenza lokhu);
    • Ngokusebenzisa inethiwekhi yama-cluster node, siqala ukuncintisana ngezinsiza zenethiwekhi. Ngakho-ke, ukubeka i-pod engaphezu kweyodwa nge-Cassandra endaweni eyodwa yeqoqo kuzoba yinkinga.

5. Izipele

Sifuna ukulondoloza inguqulo egcwele yedatha yenodi eyodwa ye-Cassandra kushejuli. I-Kubernetes inikeza isici esisebenziseka kalula CronJobe, kodwa lapha uCassandra ngokwakhe usifakela isipikha emasondweni ethu.

Ake ngikukhumbuze ukuthi u-Cassandra ugcina enye idatha enkumbulweni. Ukuze wenze isipele esigcwele, udinga idatha evela kumemori (Ama-Memtables) hambisa kudiski (Ama-SSTables). Kuleli qophelo, i-node ye-Cassandra iyayeka ukwamukela ukuxhumeka, ivale ngokuphelele kusukela kuqoqo.

Ngemuva kwalokhu, isipele siyasuswa (isifinyezo) futhi uhlelo luyagcinwa (indawo engukhiye). Futhi-ke kuvela ukuthi isipele nje asisiniki lutho: sidinga ukulondoloza izihlonzi zedatha lapho i-Cassandra node yayinesibopho - lawa amathokheni akhethekile.

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Ukusatshalaliswa kwamathokheni ukukhomba ukuthi iyiphi idatha ye-Cassandra node enesibopho sayo

Isibonelo sombhalo wokuthatha ikhophi yasenqolobaneni ye-Cassandra ku-Google ku-Kubernetes ingatholakala kokuthi lesi sixhumanisi. Okuwukuphela kwephuzu iskripthi esingalicabangeli ukusetha kabusha idatha ku-node ngaphambi kokuthatha isifinyezo. Okusho ukuthi, ikhophi yasenqolobaneni ayenzelwanga isimo samanje, kodwa okwesimo ngaphambili kancane. Kodwa lokhu kusiza ukuthi ungayikhiphi i-node ekusebenzeni, okubonakala kunengqondo kakhulu.

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}"

Isibonelo sombhalo we-bash wokuthatha ikhophi yasenqolobaneni endaweni eyodwa ye-Cassandra

Izixazululo ezilungile ze-Cassandra e-Kubernetes

Yini okwamanje esetshenziselwa ukuphakela i-Cassandra e-Kubernetes futhi iyiphi kulezi evumelana kangcono nezidingo ezinikeziwe?

1. Izixazululo ezisekelwe kumashadi e-StatefulSet noma e-Helm

Ukusebenzisa imisebenzi eyisisekelo ye-StatefulSets ukuze usebenzise iqoqo le-Cassandra kuyinketho enhle. Usebenzisa ishadi le-Helm kanye nezifanekiso ze-Go, unganikeza umsebenzisi isixhumi esibonakalayo esivumelana nezimo ukuze kusetshenziswe i-Cassandra.

Lokhu kuvame ukusebenza kahle... kuze kwenzeke okuthile okungalindelekile, njengokuhluleka kwenodi. Amathuluzi ajwayelekile e-Kubernetes awakwazi nje ukucabangela zonke izici ezichazwe ngenhla. Ukwengeza, le ndlela ilinganiselwe kakhulu ekutheni inganwetshwa kangakanani ukuze kusetshenziswe izinto eziyinkimbinkimbi: ukushintshwa kwamanodi, ikhophi yasenqolobaneni, ukubuyisela, ukuqapha, njll.

Abameleli:

Womabili amashadi mahle ngokulinganayo, kodwa angaphansi kwezinkinga ezichazwe ngenhla.

2. Izixazululo ezisekelwe ku-Kubernetes Operator

Izinketho ezinjalo zithakazelisa kakhulu ngoba zinikeza amathuba amaningi okuphatha iqoqo. Ngokuklama u-opharetha we-Cassandra, njenganoma iyiphi enye isizindalwazi, iphethini enhle ibukeka njenge-Sidecar Controller CRD:

Ukufuduka kweCassandra kuya eKubernetes: izici nezisombululo
Isikimu sokuphathwa kwe-Node ku-opharetha ye-Cassandra eklanywe kahle

Ake sibheke ama-opharetha akhona.

1. Cassandra-opharetha kusukela instaclustr

  • GitHub
  • Ukulungela: Alpha
  • Ilayisensi: Apache 2.0
  • Kusetshenziswe ku: Java

Lona ngempela iphrojekthi ethembisayo futhi ethuthukayo evela enkampanini ehlinzeka ngokusetshenziswa kwe-Cassandra ephethwe. Yona, njengoba kuchazwe ngenhla, isebenzisa isiqukathi se-sidecar esamukela imiyalo nge-HTTP. Ibhalwe nge-Java, kwesinye isikhathi ayinakho ukusebenza okuthuthuke kakhulu komtapo wolwazi weklayenti. Futhi, u-opharetha akasekeli amaRakhi ahlukene we-Datacenter eyodwa.

Kodwa opharetha unezinzuzo ezinjengokusekela ukuqapha, ukuphathwa kweqoqo eliphezulu kusetshenziswa i-CRD, ngisho nemibhalo yokwenza izipele.

2. I-Navigator evela ku-Jetstack

  • GitHub
  • Ukulungela: Alpha
  • Ilayisensi: Apache 2.0
  • Kusetshenziswe ku: Golang

Isitatimende esidizayinelwe ukusebenzisa i-DB-as-a-Service. Okwamanje isekela izizindalwazi ezimbili: i-Elasticsearch ne-Cassandra. Inezixazululo ezithakazelisayo njengokulawula ukufinyelela kusizindalwazi nge-RBAC (yalokhu ine-navigator-apiserver yayo ehlukile). Iphrojekthi ethokozisayo engafaneleka ukuyibhekisisa, kodwa ukuzibophezela kokugcina kwenziwa ngonyaka nengxenye edlule, okunciphisa ngokusobala amandla ayo.

3. Cassandra-opharetha by vgkowski

  • GitHub
  • Ukulungela: Alpha
  • Ilayisensi: Apache 2.0
  • Kusetshenziswe ku: Golang

Abazange bakubheke “ngokubalulekile”, njengoba ukuzibophezela kokugcina endaweni yokugcina bekungaphezu konyaka odlule. Ukuthuthukiswa komsebenzisi kushiywe: inguqulo yakamuva ye-Kubernetes ebikwe njengoba isekelwa yi-1.9.

4. Cassandra-opharetha by Rook

  • GitHub
  • Ukulungela: Alpha
  • Ilayisensi: Apache 2.0
  • Kusetshenziswe ku: Golang

Umsebenzisi ontuthuko yakhe ingaqhubeki ngokushesha ngendlela esingathanda ngayo. Inesakhiwo se-CRD esicatshangelwe kahle sokuphathwa kweqoqo, ixazulula inkinga yokuhlonza ama-node usebenzisa Isevisi nge-ClusterIP ("i-hack" efanayo)... kodwa yilokho kuphela okwamanje. Okwamanje akukho ukuqapha noma izipele ngaphandle kwebhokisi (njengoba kunjalo, singesokuqapha sizithathele thina). Iphuzu elithokozisayo ukuthi ungakwazi futhi ukuphakela i-ScyllaDB usebenzisa lo opharetha.

QAPHELA: Sisebenzise lo opharetha ngokulungiswa okuncane kwenye yamaphrojekthi ethu. Azikho izinkinga eziphawulwe emsebenzini womqhubi phakathi nesikhathi sonke sokusebenza (~ izinyanga ezi-4 zokusebenza).

5. I-CassKop evela ku-Orange

  • GitHub
  • Ukulungela: Alpha
  • Ilayisensi: Apache 2.0
  • Kusetshenziswe ku: Golang

Umsebenzisi omncane kakhulu ohlwini: ukuzibophezela kokuqala kwenziwa ngoMeyi 23, 2019. Kakade manje inqolobane yayo inenombolo enkulu yezici ezivela ohlwini lwethu, imininingwane eyengeziwe engatholakala endaweni yokugcina iphrojekthi. Umsebenzisi wakhiwe phezu kwesisekelo se-opharetha-sdk ethandwayo. Isekela ukuqapha ngaphandle kwebhokisi. Umehluko omkhulu kwabanye opharetha ukusetshenziswa I-plugin ye-CassKop, isetshenziswe kuPython futhi isetshenziselwe ukuxhumana phakathi kwamanodi e-Cassandra.

okutholakele

Inani lezindlela nezinketho ezingenzeka zokuthutha uCassandra ku-Kubernetes liyazikhulumela: isihloko siyadingeka.

Kulesi sigaba, ungazama noma yikuphi okungenhla ngengozi yakho kanye nengozi: akekho kubathuthukisi oqinisekisa ukusebenza okungu-100% kwesixazululo sabo endaweni yokukhiqiza. Kodwa kakade manje imikhiqizo eminingi ibonakala ithembisa ukuzama ukuyisebenzisa emabhentshini okuthuthukiswa.

Ngicabanga ukuthi esikhathini esizayo lo wesifazane osemkhunjini uzofika kahle!

PS

Funda futhi kubhulogi yethu:

Source: www.habr.com

Engeza amazwana