Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro

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.

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
Nyora dhizaini yekutengeserana muCassandra

MuKubernetes, tinogona kushandisa PersistentVolume kuchengetedza data. Nekuda kwemaitiro akasimbiswa, kushanda nedata muKubernetes kuri kuita nyore gore rega rega.

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
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 local kuramba disks kana kuisa 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 report yakabatana). Cassandra iri kuita sei nevashambadziri vemetrics yePrometheus? Uye, chii chakanyanya kukosha, nemadhibhodhi anofananidzwa eGrafana?

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
Muenzaniso wekuonekwa kwemagirafu muGrafana yeCassandra

Kune vatengesi vaviri chete: jmx_exporter ΠΈ cassandra_exporter.

Isu takazvisarudzira yekutanga isu nekuti:

  1. JMX Exporter iri kukura nekusimudzira, ukuwo Cassandra Exporter haana kukwanisa kuwana rubatsiro rwakakwana munharaunda. Cassandra Exporter haisati ichitsigira akawanda mavhezheni eCassandra.
  2. Unogona kumhanya sejavaagent nekuwedzera mureza -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. 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 - Custom Resource Definitions.

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
Kuzivisa zvimwe zviwanikwa zvelog uye zviziviso

Asi Tsika Resource pachayo haireve chero chinhu: mushure mezvose, inoda mutongi. Ungada kutsvaka rubatsiro Kubernetes operator...

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:

  1. 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.
  2. 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.
  3. 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 CronJob, asi pano Cassandra pachake anoisa speaker mumavhiri edu.

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.

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
Kugoverwa kwematokeni kuona kuti Cassandra node dzinoita sei data

Muenzaniso script yekutora Cassandra backup kubva kuGoogle muKubernetes inogona kuwanikwa pa iyi link. Iyo chete poindi iyo iyo script isingafungidzire ndeye kuseta data kune node isati yatora snapshot. Ndokunge, iyo backup inoitirwa kwete yeyazvino mamiriro, asi kune imwe nyika zvishoma kare. Asi izvi zvinobatsira kuti usatora node kunze kwekushanda, izvo zvinoita sezvine musoro.

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:

Kutama kweCassandra kuenda Kubernetes: maficha uye mhinduro
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 takazvitora isu) Chinhu chinonakidza ndechekuti iwe unogona zvakare kuendesa ScyllaDB uchishandisa uyu opareta.

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 CassKop plugin, inoshandiswa muPython uye inoshandiswa kutaurirana pakati peCassandra nodes.

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:

Source: www.habr.com

Voeg