Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean

Bidh sinn gu cunbhalach a’ tighinn tarsainn air stòr-dàta Apache Cassandra agus an fheum air obrachadh taobh a-staigh bun-structar stèidhichte air Kubernetes. Anns an stuth seo, roinnidh sinn ar lèirsinn mu na ceumannan riatanach, slatan-tomhais agus fuasglaidhean a th’ ann mar-thà (a’ toirt a-steach sealladh farsaing air gnìomhaichean) airson imrich Cassandra gu K8n.

“Ge bith cò as urrainn boireannach a riaghladh faodaidh e an stàit a riaghladh cuideachd”

Cò a th’ ann an Cassandra? Is e siostam stòraidh sgaoilte a th’ ann a chaidh a dhealbhadh gus meudan mòra de dhàta a riaghladh fhad ‘s a nì iad cinnteach gum bi ruigsinneachd àrd ann às aonais aon phuing fàiligeadh. Cha mhòr gu bheil feum aig a’ phròiseact air ro-ràdh fada, agus mar sin cha toir mi ach na prìomh fheartan aig Cassandra a bhios buntainneach ann an co-theacsa artaigil sònraichte:

  • Tha Cassandra sgrìobhte ann an Java.
  • Tha grunn ìrean ann an topology Cassandra:
    • Node - aon eisimpleir Cassandra air a chleachdadh;
    • Tha Rack na bhuidheann de shuidheachaidhean Cassandra, aonaichte le cuid de fheartan, suidhichte anns an aon ionad dàta;
    • Datacenter - cruinneachadh de gach buidheann de chùisean Cassandra suidhichte ann an aon ionad dàta;
    • Tha Cluster na chruinneachadh de gach ionad dàta.
  • Bidh Cassandra a’ cleachdadh seòladh IP gus nód a chomharrachadh.
  • Gus obair sgrìobhaidh is leughaidh a luathachadh, bidh Cassandra a’ stòradh cuid den dàta ann an RAM.

A-nis - chun fhìor ghluasad a dh’ fhaodadh a bhith ann gu Kubernetes.

Liosta-sgrùdaidh airson gluasad

A’ bruidhinn air imrich Cassandra gu Kubernetes, tha sinn an dòchas leis a’ ghluasad gum fàs e nas goireasaiche a riaghladh. Dè a bhios a dhìth airson seo, dè a chuidicheas le seo?

1. Stòradh dàta

Mar a chaidh a shoilleireachadh mar-thà, bidh Cassanda a 'stòradh pàirt den dàta ann an RAM - ann an Clàr-cuimhne. Ach tha pàirt eile den dàta a tha air a shàbhaladh gu diosg - anns an fhoirm SSTable. Tha eintiteas air a chur ris an dàta seo Log gealltanas - clàran de gach gnothach, a tha cuideachd air an sàbhaladh gu diosc.

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Sgrìobh diagram malairt ann an Cassandra

Ann an Kubernetes, is urrainn dhuinn PersistentVolume a chleachdadh gus dàta a stòradh. Taing do uidheamachdan dearbhte, tha e nas fhasa obrachadh le dàta ann an Kubernetes gach bliadhna.

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Bidh sinn a’ riarachadh ar PersistentVolume fhèin do gach pod Cassandra

Tha e cudromach toirt fa-near gu bheil Cassandra fhèin a’ ciallachadh ath-riochdachadh dàta, a’ tabhann uidheamachdan togte airson seo. Mar sin, ma tha thu a’ togail cruinneachadh Cassandra bho àireamh mhòr de nodan, chan eil feum air siostaman sgaoilte leithid Ceph no GlusterFS a chleachdadh airson stòradh dàta. Anns a 'chùis seo, bhiodh e loidsigeach dàta a stòradh air an diosg aoigheachd a' cleachdadh diosgan seasmhach ionadail no cur suas hostPath.

Is e ceist eile a bheil thu airson àrainneachd air leth a chruthachadh airson luchd-leasachaidh airson gach meur feart. Anns a 'chùis seo, b' e an dòigh cheart aon nód Cassandra a thogail agus an dàta a stòradh ann an stòradh sgaoilte, i.e. bidh an Ceph agus GlusterFS air an ainmeachadh mar na roghainnean agad. An uairsin bidh an leasaiche cinnteach nach caill e dàta deuchainn eadhon ged a thèid aon de nodan cruinneachadh Kuberntes a chall.

2. A' cumail sùil

Is e an roghainn cha mhòr gun chonnspaid airson sgrùdadh a chuir an gnìomh ann an Kubernetes Prometheus (Bhruidhinn sinn mu dheidhinn seo gu mionaideach ann an aithisg co-cheangailte). Ciamar a tha Cassandra a’ dèanamh le às-mhalairt metrics airson Prometheus? Agus, dè a tha eadhon nas cudromaiche, le clàran-bùird maidsidh airson Grafana?

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Eisimpleir de choltas ghrafaichean ann an Grafana airson Cassandra

Chan eil ann ach dà às-mhalairt: jmx_às-mhalairt и cassandra_exporter.

Thagh sinn a’ chiad fhear dhuinn fhìn oir:

  1. Tha JMX Exporter a’ fàs agus a’ leasachadh, fhad ‘s nach robh e comasach dha Cassandra Exporter taic coimhearsnachd gu leòr fhaighinn. Chan eil Cassandra Exporter fhathast a’ toirt taic don mhòr-chuid de dhreachan de Cassandra.
  2. Faodaidh tu a ruith mar javaagent le bhith a’ cur bratach ris -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Tha aon ann dha deas-bhòrd iomchaidh, a tha neo-chòrdail ri Cassandra Exporter.

3. Taghadh Kubernetes prìomhadail

A rèir an structair gu h-àrd de bhuidheann Cassandra, feuchaidh sinn ris a h-uile dad a tha air a mhìneachadh an sin eadar-theangachadh gu briathrachas Kubernetes:

  • Nod Cassandra → Pod
  • Cassandra Rack → StatefulSet
  • Cassandra Datacenter → amar bho StatefulSets
  • Buidheann Cassandra → ???

Tha e a ’tionndadh a-mach gu bheil cuid de dh’ eintiteas a bharrachd a dhìth gus buidheann Cassandra gu lèir a riaghladh aig an aon àm. Ach mura h-eil rudeigin ann, is urrainn dhuinn a chruthachadh! Tha dòigh aig Kubernetes airson a ghoireasan fhèin a mhìneachadh airson an adhbhair seo - Mìneachadh Goireasan Custom.

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Ag ainmeachadh goireasan a bharrachd airson logaichean agus rabhaidhean

Ach chan eil Custom Resource fhèin a’ ciallachadh dad: às deidh a h-uile càil, feumaidh e riaghladair. Is dòcha gu feum thu cuideachadh a shireadh Gnìomhaiche Kubernetes...

4. Comharrachadh pods

Anns a ’pharagraf gu h-àrd, dh’ aontaich sinn gum biodh aon nód Cassandra co-ionann ri aon pod ann an Kubernetes. Ach bidh seòlaidhean IP nam pods eadar-dhealaichte gach turas. Agus tha comharrachadh nód ann an Cassandra stèidhichte air an t-seòladh IP... Tha e a’ tionndadh a-mach às deidh gach pod a thoirt air falbh, gun cuir buidheann Cassandra nód ùr ris.

Tha slighe a-mach ann, agus chan e dìreach aon:

  1. Is urrainn dhuinn clàran a chumail le aithnichearan aoigheachd (UUIDs a dh’ aithnicheas cùisean Cassandra gu h-annasach) no le seòlaidhean IP agus an stòradh ann an cuid de structaran/clàir. Tha dà phrìomh eas-bhuannachdan aig an dòigh-obrach:
    • An cunnart gun tachair suidheachadh rèis ma thuiteas dà nod aig an aon àm. Às deidh an àrdachadh, bidh nodan Cassandra aig an aon àm ag iarraidh seòladh IP bhon chlàr agus a ’farpais airson an aon ghoireas.
    • Ma tha nód Cassandra air an dàta aige a chall, cha bhith e comasach dhuinn a chomharrachadh tuilleadh.
  2. Tha an dàrna fuasgladh coltach ri hack beag, ach a dh’ aindeoin sin: is urrainn dhuinn Seirbheis a chruthachadh le ClusterIP airson gach nód Cassandra. Duilgheadasan le buileachadh seo:
    • Ma tha tòrr nodan ann an cruinneachadh Cassandra, feumaidh sinn tòrr sheirbheisean a chruthachadh.
    • Tha am feart ClusterIP air a chuir an gnìomh tro iptables. Faodaidh seo a bhith na dhuilgheadas ma tha mòran (1000... no eadhon 100?) nodan ann an cruinneachadh Cassandra. Ged a cothromachadh stèidhichte air IPVS urrainn an duilgheadas seo fhuasgladh.
  3. Is e an treas fuasgladh lìonra de nodan a chleachdadh airson nodan Cassandra an àite lìonra sònraichte de pods le bhith a’ comasachadh an t-suidheachaidh hostNetwork: true. Tha an dòigh seo a 'cur crìochan sònraichte:
    • Airson aonadan a chur an àite. Tha e riatanach gum feum an aon sheòladh IP a bhith aig an nód ùr ris an fhear roimhe (ann an sgòthan mar AWS, GCP tha seo cha mhòr do-dhèanta a dhèanamh);
    • A’ cleachdadh lìonra de nodan brabhsair, bidh sinn a’ tòiseachadh a’ farpais airson goireasan lìonraidh. Mar sin, bidh e duilich a bhith a’ cur barrachd air aon pod le Cassandra air aon nód braisle.

5. Cùl-taic

Tha sinn airson dreach slàn de dhàta aon nód Cassandra a shàbhaladh air clàr-ama. Tha Kubernetes a 'toirt seachad feart goireasach a' cleachdadh CronJob, ach an so tha Cassandra fein a' cur cainnt 'nar cuibhlichean.

Leig leam do chuimhneachadh gu bheil Cassandra a’ stòradh cuid den dàta mar chuimhneachan. Gus cùl-taic slàn a dhèanamh, feumaidh tu dàta bhon chuimhne (Clàran-cuimhne) gluais gu diosg (SSTables). Aig an ìre seo, tha an nód Cassandra a’ stad bho bhith a’ gabhail ri ceanglaichean, a’ dùnadh gu tur bhon bhuidheann.

Às deidh seo, thèid an cùl-taic a thoirt air falbh (dealbh) agus tha an sgeama air a shàbhaladh (iuchrach). Agus an uairsin tha e a ’tionndadh a-mach nach eil dìreach cùl-taic a’ toirt dad dhuinn: feumaidh sinn na aithnichearan dàta air an robh an nód Cassandra cunntachail a shàbhaladh - tha iad sin nan comharran sònraichte.

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Sgaoileadh comharran gus faighinn a-mach dè an dàta a tha an urra ri nodan Cassandra

Gheibhear eisimpleir de sgriobt airson cùl-taic Cassandra a thoirt bho Google ann an Kubernetes aig an ceangal seo. Is e an aon phuing nach eil an sgriobt a’ toirt fa-near a bhith ag ath-shuidheachadh dàta chun nód mus gabh thu an dealbh. Is e sin, tha an cùl-taic air a dhèanamh chan ann airson an staid làithreach, ach airson stàite beagan nas tràithe. Ach tha seo a 'cuideachadh gun a bhith a' toirt an nód a-mach à obrachadh, a tha coltach gu math loidsigeach.

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

Eisimpleir de sgriobt bash airson cùl-taic a thoirt bho aon nód Cassandra

Fuasglaidhean deiseil airson Cassandra ann an Kubernetes

Dè a thathas a’ cleachdadh an-dràsta airson Cassandra a chuir gu Kubernetes agus dè am fear dhiubh sin as fheàrr a fhreagras air na riatanasan ainmichte?

1. Fuasglaidhean stèidhichte air clàran StatefulSet no Helm

Tha e na dheagh roghainn a bhith a’ cleachdadh na gnìomhan bunaiteach StatefulSets gus cruinneachadh Cassandra a ruith. A’ cleachdadh na teamplaidean Helm chart and Go, faodaidh tu eadar-aghaidh sùbailte a thoirt don neach-cleachdaidh airson Cassandra a chleachdadh.

Mar as trice bidh seo ag obair gu math ... gus an tachair rudeigin ris nach robh dùil, leithid fàilligeadh nód. Chan urrainn dha innealan àbhaisteach Kubernetes dìreach aire a thoirt do na feartan gu lèir a tha air am mìneachadh gu h-àrd. A bharrachd air an sin, tha an dòigh-obrach seo glè chuingealaichte a thaobh na ghabhas a leudachadh airson cleachdaidhean nas iom-fhillte: ath-nuadhachadh nodan, cùl-taic, faighinn air ais, sgrùdadh, msaa.

Riochdairean:

Tha an dà chlàr a cheart cho math, ach tha iad fo smachd nan duilgheadasan a tha air am mìneachadh gu h-àrd.

2. Solutions stèidhichte air Kubernetes Operator

Tha roghainnean mar seo nas inntinniche oir tha iad a’ toirt seachad cothroman gu leòr airson a’ bhuidheann a stiùireadh. Airson gnìomhaiche Cassandra a dhealbhadh, mar stòr-dàta sam bith eile, tha pàtran math coltach ri Sidecar <-> Rianadair <-> CRD:

Imrich Cassandra gu Kubernetes: feartan agus fuasglaidhean
Sgeama riaghlaidh nod ann an gnìomhaiche Cassandra air a dheagh dhealbhadh

Bheir sinn sùil air na gnìomhaichean a th’ ann mar-thà.

1. Cassandra-ghnìomhaiche bho instaclustr

  • GitHub
  • Deisealachd: Alpha
  • Cead: Apache 2.0
  • Air a chur an gnìomh ann an: Java

Tha seo gu dearbh na phròiseact gealltanach a tha gu gnìomhach a’ leasachadh bho chompanaidh a tha a’ tabhann cleachdadh Cassandra fo stiùir. Bidh e, mar a chaidh a mhìneachadh gu h-àrd, a’ cleachdadh soitheach càr-taobh a ghabhas ri òrdughan tro HTTP. Air a sgrìobhadh ann an Java, uaireannan chan eil comas-gnìomh nas adhartaiche ann an leabharlann luchd-cleachdaidh. Cuideachd, chan eil an gnìomhaiche a 'toirt taic do dhiofar Racks airson aon Datacenter.

Ach tha buannachdan mar sin aig a’ ghnìomhaiche ri taic airson sgrùdadh, riaghladh brabhsair àrd-ìre a’ cleachdadh CRD, agus eadhon sgrìobhainnean airson cùl-taic a dhèanamh.

2. Navigator bho Jetstack

  • GitHub
  • Deisealachd: Alpha
  • Cead: Apache 2.0
  • Air a chur an gnìomh ann an: Golang

Aithris air a dhealbhadh gus DB-mar-a-Seirbheis a chleachdadh. An-dràsta a’ toirt taic do dhà stòr-dàta: Elasticsearch agus Cassandra. Tha fuasglaidhean cho inntinneach aige ri smachd ruigsinneachd stòr-dàta tro RBAC (airson seo tha inneal-seòlaidh fa leth aige fhèin). Pròiseact inntinneach a b’ fhiach sùil nas mionaidiche a thoirt air, ach chaidh an gealladh mu dheireadh a dhèanamh o chionn bliadhna gu leth, a tha gu soilleir a’ lughdachadh a chomais.

3. Cassandra-ghnìomhaiche le vgkowski

  • GitHub
  • Deisealachd: Alpha
  • Cead: Apache 2.0
  • Air a chur an gnìomh ann an: Golang

Cha robh iad ga mheas “gu dona”, leis gu robh an gealladh mu dheireadh don stòr còrr is bliadhna air ais. Tha leasachadh gnìomhaiche air a thrèigsinn: is e 1.9 an dreach as ùire de Kubernetes a chaidh aithris mar thaic.

4. Cassandra-ghnìomhaiche le Rook

  • GitHub
  • Deisealachd: Alpha
  • Cead: Apache 2.0
  • Air a chur an gnìomh ann an: Golang

Gnìomhaiche aig nach eil an leasachadh a’ dol air adhart cho luath sa bu mhath leinn. Tha structar CRD air a dheagh smaoineachadh aige airson riaghladh cnuasachadh, a’ fuasgladh na duilgheadas a thaobh comharrachadh nodan a’ cleachdadh Seirbheis le ClusterIP (an aon “hack”) ... ach tha sin uile airson a-nis. Chan eil sgrùdadh no cùl-taic ann an-dràsta (co-dhiù, tha sinn airson sùil a chumail ghabh e sinn fein). Is e puing inntinneach gum faod thu cuideachd ScyllaDB a chleachdadh a’ cleachdadh a ’ghnìomhaiche seo.

NB: Chleachd sinn an gnìomhaiche seo le mion-atharrachaidhean ann am fear de na pròiseactan againn. Cha deach duilgheadas sam bith a thoirt fa-near ann an obair a’ ghnìomhaiche rè na h-ùine obrachaidh gu lèir (~ mìosan obrachaidh 4).

5. CassKop o Orange

  • GitHub
  • Deisealachd: Alpha
  • Cead: Apache 2.0
  • Air a chur an gnìomh ann an: Golang

An gnìomhaiche as òige air an liosta: chaidh a’ chiad ghealladh a dhèanamh air 23 Cèitean, 2019. A-cheana a-nis tha e san arsenal aige àireamh mhòr de fheartan bhon liosta againn, agus gheibhear barrachd fiosrachaidh mun deidhinn ann an stòr a’ phròiseict. Tha an gnìomhaiche air a thogail air bunait an gnìomhaiche-sdk mòr-chòrdte. A ’toirt taic do sgrùdadh a-mach às a’ bhogsa. Is e am prìomh eadar-dhealachadh bho ghnìomhaichean eile an cleachdadh Plugin CassKop, air a chuir an gnìomh ann am Python agus air a chleachdadh airson conaltradh eadar nodan Cassandra.

toraidhean

Tha an àireamh de dhòighean-obrach agus roghainnean a dh'fhaodadh a bhith ann airson a bhith a 'giùlan Cassandra gu Kubernetes a' bruidhinn air a shon fhèin: tha iarrtas mòr air a 'chuspair.

Aig an ìre seo, faodaidh tu feuchainn air gin de na tha gu h-àrd air do chunnart fhèin: chan eil gin den luchd-leasachaidh a’ gealltainn obrachadh 100% den fhuasgladh aca ann an àrainneachd cinneasachaidh. Ach mu thràth, tha mòran thoraidhean a’ coimhead gealltanach feuchainn ri cleachdadh ann am beingean leasachaidh.

Tha mi a’ smaoineachadh san àm ri teachd gum bi am boireannach seo air an t-soitheach feumail!

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann