Isu tinogara tichisangana neApache Cassandra dhatabhesi uye kukosha kwekuishandisa mukati meKubernetes-yakavakirwa zvivakwa. Muchinyorwa ichi, tichagovera chiono chedu chenhanho dzinodiwa, maitiro uye zvigadziriso zviripo (kusanganisira muono wevashandisi) wekutama Cassandra kuenda kuK8s.
"Ani nani anogona kutonga mukadzi anogona kutonga nyika"
Cassandra ndiani? Iyo yakagoverwa yekuchengetedza sisitimu yakagadzirirwa kubata yakakura mavhoriyamu e data uchive nechokwadi chekuwanikwa kwepamusoro pasina kana imwe pfungwa yekutadza. Iyo purojekiti haidi sumo refu, saka ini ndinongopa iwo makuru maficha eCassandra anozove akakodzera mumamiriro echinyorwa chakati:
- Cassandra yakanyorwa muJava.
- Iyo Cassandra topology inosanganisira akati wandei mazinga:
- Node - imwe yakashandiswa Cassandra muenzaniso;
- Rack iboka reCassandra zviitiko, zvakabatana nehumwe hunhu, huri munzvimbo imwechete yedata;
- Datacenter - muunganidzwa wemapoka ese eCassandra zviitiko zviri mune imwe data data;
- Cluster muunganidzwa weese data centers.
- Cassandra inoshandisa IP kero kuona node.
- Kuti ikurumidze kunyora uye kuverenga mabasa, Cassandra inochengeta imwe yedata mu RAM.
Iye zvino - kune chaiyo inogona kuenda kuKubernetes.
Tarisa-runyorwa rwekutamisa
Kutaura nezve kutama kweCassandra kuenda Kubernetes, isu tinovimba kuti nekufamba kuchava nyore kubata. Chii chichadiwa kune izvi, chii chichabatsira neizvi?
1. Kuchengetedza data
Sezvakatojekeswa, Cassanda inochengeta chikamu che data mu RAM - mukati Memtable. Asi pane chimwe chikamu che data chakachengetedzwa ku diski - mune fomu SSTable. Chinhu chinowedzerwa kune iyi data Commit Log - marekodhi ezvese kutengeserana, ayo anochengetwawo ku diski.
Nyora dhizaini yekutengeserana muCassandra
MuKubernetes, tinogona kushandisa PersistentVolume kuchengetedza data. Nekuda kwemaitiro akasimbiswa, kushanda nedata muKubernetes kuri kuita nyore gore rega rega.
Isu tichagovera yedu PersistentVolume kune yega yega Cassandra pod
Izvo zvakakosha kuti uzive kuti Cassandra pachayo inoreva kudzokororwa kwedata, ichipa yakavakirwa-mukati maitiro eizvi. Saka, kana iwe uri kuvaka Cassandra cluster kubva kune nhamba huru ye node, saka hapana chikonzero chekushandisa yakagoverwa masisitimu seCeph kana GlusterFS yekuchengetedza data. Muchiitiko ichi, zvingava zvine musoro kuchengeta data pane host disk uchishandisa hostPath
.
Mumwe mubvunzo ndewekuti kana iwe uchida kugadzira yakaparadzana nharaunda yevagadziri kune yega yega chikamu bazi. Muchiitiko ichi, nzira yakarurama ingadai iri yekusimudza imwe Cassandra node uye kuchengetedza data mune yakagoverwa kuchengetedza, i.e. iyo yakataurwa Ceph neGlusterFS ichava sarudzo dzako. Ipapo mugadziri achave nechokwadi chekuti haazorasikirwe nedata rekuyedza kunyangwe imwe yeKuberntes cluster node yakarasika.
2. Monitoring
Iyo inenge isina kupikiswa sarudzo yekushandisa yekutarisa muKubernetes ndeye Prometheus (takataura pamusoro peizvi zvakadzama mu
Muenzaniso wekuonekwa kwemagirafu muGrafana yeCassandra
Kune vatengesi vaviri chete:
Isu takazvisarudzira yekutanga isu nekuti:
- JMX Exporter iri kukura nekusimudzira, ukuwo Cassandra Exporter haana kukwanisa kuwana rubatsiro rwakakwana munharaunda. Cassandra Exporter haisati ichitsigira akawanda mavhezheni eCassandra.
- Unogona kumhanya sejavaagent nekuwedzera mureza
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - Pane imwe yake
dashboad yakakwana , iyo isingaenderani neCassandra Exporter.
3. Kusarudza Kubernetes primitives
Zvinoenderana nechimiro chepamusoro cheCassandra cluster, ngatiedze kushandura zvese zvinotsanangurwa ipapo muKubernetes terminology:
- Cassandra Node β Pod
- Cassandra Rack β StatefulSet
- Cassandra Datacenter β dziva kubva kuStatefulSets
- Cassandra Cluster β ???
Zvinoitika kuti chimwe chikamu chekuwedzera hachina kubata iyo yese Cassandra cluster kamwechete. Asi kana chimwe chinhu chisipo, tinogona kuchigadzira! Kubernetes ine nzira yekutsanangura zviwanikwa zvayo zvechinangwa ichi -
Kuzivisa zvimwe zviwanikwa zvelog uye zviziviso
Asi Tsika Resource pachayo haireve chero chinhu: mushure mezvose, inoda mutongi. Ungada kutsvaka rubatsiro
4. Kuzivikanwa kwePod
Mundima iri pamusoro, takabvumirana kuti imwe Cassandra node ichaenzana podhi muKubernetes. Asi iyo IP kero yepods ichave yakasiyana nguva imwe neimwe. Uye kuzivikanwa kwenode muCassandra kunobva pane IP kero ... Zvinoitika kuti mushure mekubviswa kwega kwega pod, boka reCassandra richawedzera node itsva.
Pane nzira yekubuda, uye kwete imwe chete:
- Tinogona kuchengeta marekodhi nemazita ekugamuchira (UUIDs anonyatso ratidza Cassandra zviitiko) kana neIP kero tozvichengeta zvese mune zvimwe zvimiro/matafura. Iyo nzira ine zvipingamupinyi zviviri zvikuru:
- Ngozi yemamiriro emujaho anoitika kana node mbiri dzinodonha kamwechete. Mushure mekusimuka, maCassandra node achakumbira panguva imwe chete kero yeIP kubva patafura uye kukwikwidza kune imwechete sosi.
- Kana Cassandra node yakarasa data yayo, isu hatichakwanisa kuiziva.
- Yechipiri mhinduro inoita senge diki hack, asi zvakadaro: isu tinogona kugadzira Sevhisi neClusterIP kune yega yega Cassandra node. Matambudziko nekushandiswa uku:
- Kana paine akawanda ma node muCassandra cluster, isu tichafanirwa kugadzira akawanda maSevhisi.
- Iyo ClusterIP ficha inoshandiswa kuburikidza ne iptables. Izvi zvinogona kuve dambudziko kana Cassandra cluster ine akawanda (1000... kana kunyange zana?) node. Nyangwe
kuenzanisa kwakavakirwa paIPVS inogona kugadzirisa dambudziko iri.
- Mhinduro yechitatu ndeye kushandisa network yemanode eCassandra node panzvimbo yetiweki yakatsaurirwa yemapods nekugonesa kuseta.
hostNetwork: true
. Iyi nzira inoisa zvimwe zvipimo:- Kutsiva mayunitsi. Izvo zvinodikanwa kuti iyo node nyowani inofanirwa kuve neiyo IP kero seyapfuura (mumakore seAWS, GCP izvi hazvigoneke kuita);
- Tichishandisa network ye cluster node, tinotanga kukwikwidza kune network zviwanikwa. Naizvozvo, kuisa inopfuura podhi imwe neCassandra pane imwe cluster node zvichanetsa.
5. Backups
Tinoda kuchengetedza yakazara vhezheni yeimwe Cassandra node data pane hurongwa. Kubernetes inopa chinhu chiri nyore kushandisa
Rega ndikuyeuchidze kuti Cassandra inochengeta imwe data mundangariro. Kuti uite backup yakazara, unoda data kubva mundangariro (Memtables) enda kune dhisiki (SSTables) Panguva ino, node yeCassandra inomira kugamuchira zvisungo, ichivhara zvachose kubva musumbu.
Mushure meizvi, backup inobviswa (snapshot) uye chirongwa chinochengetwa (keyspace) Uye zvino zvinozoitika kuti kungoita backup haitipi chero chinhu: isu tinofanirwa kuchengetedza data identifiers iyo Cassandra node yaive nebasa - aya ma tokeni akakosha.
Kugoverwa kwematokeni kuona kuti Cassandra node dzinoita sei data
Muenzaniso script yekutora Cassandra backup kubva kuGoogle muKubernetes inogona kuwanikwa pa
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}"
Muenzaniso we bash script yekutora backup kubva kune imwe Cassandra node
Yakagadzirira mhinduro yeCassandra muKubernetes
Chii chiri kushandiswa kuendesa Cassandra muKubernetes uye ndeipi yeizvi inonyatsoenderana nezvakapihwa zvinodiwa?
1. Mhinduro dzinobva paStatefulSet kana Helm machati
Kushandisa ekutanga StatefulSets mabasa kumhanyisa Cassandra cluster isarudzo yakanaka. Uchishandisa iyo Helm chati uye Go matemplate, unogona kupa mushandisi ine inochinjika interface yekuendesa Cassandra.
Izvi zvinowanzoshanda zvakanaka ... kusvikira chimwe chinhu chisingatarisirwi chikaitika, sekutadza kwenode. Standard Kubernetes zvishandiso hazvigone kufunga nezve ese maficha anotsanangurwa pamusoro. Pamusoro pezvo, nzira iyi inogumira mukuti yakawanda sei inogona kuwedzerwa kune mamwe mashandisiro akaomarara: kutsiva node, backup, kudzoreredza, kutarisa, nezvimwe.
Vamiririri:
Machati ese ari maviri akanaka zvakaenzana, asi ari pasi pematambudziko atsanangurwa pamusoro apa.
2. Mhinduro dzakavakirwa paKubernetes Operator
Sarudzo dzakadaro dzinonyanya kunakidza nekuti dzinopa mikana yakawanda yekugadzirisa sumbu. Pakugadzira Cassandra opareta, senge chero imwe dhatabhesi, yakanaka patani inotaridzika seSidecar <-> Controller <-> CRD:
Node manejimendi chirongwa mune yakanyatsogadzirwa Cassandra opareta
Ngatitarisei kune varipo vashandisi.
1. Cassandra-operator kubva instaclustr
-
GitHub - Kugadzirira: Alpha
- Rezinesi: Apache 2.0
- Inoshandiswa mu: Java
Ichi chokwadi chinovimbisa uye chinoshingairira kusimudzira chirongwa kubva kukambani inopa yakachengetedzwa Cassandra deployments. Iyo, sezvakatsanangurwa pamusoro, inoshandisa sidecar mudziyo inogamuchira mirairo kuburikidza neHTTP. Yakanyorwa muJava, dzimwe nguva inoshaya basa repamusoro re library-go raibhurari. Zvakare, mushandisi haatsigire akasiyana Racks kune imwe Datacenter.
Asi mushandisi ane mabhenefiti akadai serutsigiro rwekutarisa, yakakwirira-level cluster manejimendi uchishandisa CRD, uye kunyangwe zvinyorwa zvekugadzira backups.
2. Navigator kubva kuJetstack
-
GitHub - Kugadzirira: Alpha
- Rezinesi: Apache 2.0
- Yakaitwa mu: Golang
Chirevo chakagadzirirwa kuendesa DB-as-a-Service. Parizvino inotsigira maviri dhatabhesi: Elasticsearch uye Cassandra. Iyo ine mhinduro dzinonakidza dzakadai sedhizaini yekuwana control kuburikidza neRBAC (nekuda kweizvi ine yayo yakaparadzana navigator-apiserver). Chirongwa chinonakidza chingave chakakodzera kunyatsotarisisa, asi yekupedzisira kuzvipira yakaitwa gore nehafu yapfuura, iyo inoderedza zvakajeka kugona kwayo.
3. Cassandra-operator ne vgkowski
-
GitHub - Kugadzirira: Alpha
- Rezinesi: Apache 2.0
- Yakaitwa mu: Golang
Ivo havana kuzviona se "zvakakomba", sezvo yekupedzisira kuzvipira kune repository yaive inopfuura gore rapfuura. Kuvandudza Operator kwakasiiwa: yazvino vhezheni yeKubernetes yakashumwa seyakatsigirwa ndeye 1.9.
4. Cassandra-operator naRook
-
GitHub - Kugadzirira: Alpha
- Rezinesi: Apache 2.0
- Yakaitwa mu: Golang
Mushandi ane budiriro isiri kufambira mberi nekukurumidza sezvatinoda. Iine CRD yakanyatsofungwa-yakanyatsogadziriswa yekugadzirisa masumbu, inogadzirisa dambudziko rekuziva nodes uchishandisa Service neClusterIP (iyo "hack" yakafanana) ... asi ndizvo zvose ikozvino. Parizvino hapana chekutarisa kana backups kunze kwebhokisi (nenzira, isu tiri kutarisa
NB: Takashandisa opareta uyu nekugadziridzwa kudiki mune imwe yemapurojekiti edu. Hapana matambudziko akaonekwa mubasa remushandisi panguva yose yekushanda (~ 4 mwedzi yekushanda).
5. CassKop kubva kuOrange
-
GitHub - Kugadzirira: Alpha
- Rezinesi: Apache 2.0
- Yakaitwa mu: Golang
Mudiki mushandisi pane iyo rondedzero: yekutanga kuzvipira yakaitwa muna Chivabvu 23, 2019. Nechekare ikozvino ine mune yayo arsenal nhamba huru yezvimiro kubva kune yedu runyorwa, mamwe maidi ayo anogona kuwanikwa mupurojekiti repository. Mushandi anovakwa pahwaro hweanozivikanwa opareta-sdk. Inotsigira kutarisa kunze kwebhokisi. Musiyano mukuru kubva kune vamwe vashandisi ndiko kushandiswa
zvakawanikwa
Huwandu hwematanho uye sarudzo dzinogoneka dzekutakura Cassandra kuKubernetes dzinozvitaurira: musoro uri kudiwa.
Panguva ino, unogona kuedza chero chepamusoro panjodzi yako uye nenjodzi: hapana wevagadziri anovimbisa 100% kushanda kwemhinduro yavo munzvimbo yekugadzira. Asi nechekare, zvigadzirwa zvakawanda zvinotarisa kuvimbisa kuedza kushandisa mumabhenji ebudiriro.
Ndinofunga mune ramangwana mukadzi uyu ari muchikepe achauya zvakanaka!
PS
Verenga zvakare pablog yedu:
- Β«
Seamless kutama kweMongoDB kuenda Kubernetes "; - Β«
Seamless kutama kweRabbitMQ kuenda Kubernetes "; - Β«
Databases uye Kubernetes (wongororo uye vhidhiyo mushumo) "; - Β«
K8s matipi & matipi: Kumhanyisa bootstrap yemahombe dhatabhesi ".
Source: www.habr.com