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.
Bhala umdwebo wokwenziwe nge-Cassandra
Ku-Kubernetes, singasebenzisa i-PersistentVolume ukuze sigcine idatha. Ngenxa yezindlela ezifakazelwe, ukusebenza ngedatha ku-Kubernetes kuba lula minyaka yonke.
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 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
Isibonelo sokuvela kwamagrafu e-Grafana ye-Cassandra
Babili kuphela abathumeli ngaphandle:
Sizikhethele eyokuqala ngoba:
- 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.
- Ungayisebenzisa njenge-javaagent ngokungeza ifulegi
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - 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 -
Ukumemezela izinsiza ezengeziwe zamalogi nezexwayiso
Kodwa i-Custom Resource ngokwayo ayisho lutho: emva kwakho konke, idinga isilawuli. Kungase kudingeke ufune usizo
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:
- 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.
- 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.
- 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
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.
Ukusatshalaliswa kwamathokheni ukukhomba ukuthi iyiphi idatha ye-Cassandra node enesibopho sayo
Isibonelo sombhalo wokuthatha ikhophi yasenqolobaneni ye-Cassandra ku-Google ku-Kubernetes ingatholakala kokuthi
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:
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
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
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:
- «
Ukufuduka okungenamthungo kwe-MongoDB kuya ku-Kubernetes "; - «
Ukufuduka okungenamthungo kwe-RabbitMQ kuya e-Kubernetes "; - «
Imininingo egciniwe kanye ne-Kubernetes (isibuyekezo kanye nombiko wevidiyo) "; - «
Amathiphu namasu e-K8s: Ukusheshisa i-bootstrap kusizindalwazi esikhulu ".
Source: www.habr.com