Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan

A ṣe alabapade ibi ipamọ data Apache Cassandra nigbagbogbo ati iwulo lati ṣiṣẹ laarin awọn amayederun orisun Kubernetes. Ninu ohun elo yii, a yoo pin iran wa ti awọn igbesẹ to ṣe pataki, awọn ibeere ati awọn solusan ti o wa (pẹlu akopọ ti awọn oniṣẹ) fun gbigbe Cassandra si K8s.

"Ẹnikẹni ti o le ṣe akoso obinrin tun le ṣe akoso ijọba"

Ta ni Cassandra? O jẹ eto ipamọ ti a pin kaakiri ti a ṣe apẹrẹ lati ṣakoso awọn iwọn nla ti data lakoko ti o rii daju wiwa giga laisi aaye kan ti ikuna. Ise agbese na ko nilo ifihan gigun, nitorinaa Emi yoo fun awọn ẹya akọkọ ti Cassandra nikan ti yoo jẹ pataki ni aaye ti nkan kan pato:

  • Cassandra ti kọ ni Java.
  • Topology Cassandra pẹlu awọn ipele pupọ:
    • Node - ọkan ransogun Cassandra apeere;
    • Agbeko jẹ ẹgbẹ kan ti Cassandra instances, ìṣọkan nipa diẹ ninu awọn ti iwa, be ni kanna data aarin;
    • Datacenter - ikojọpọ gbogbo awọn ẹgbẹ ti awọn iṣẹlẹ Cassandra ti o wa ni ile-iṣẹ data kan;
    • Iṣupọ jẹ ikojọpọ gbogbo awọn ile-iṣẹ data.
  • Cassandra nlo adiresi IP lati ṣe idanimọ ipade kan.
  • Lati yara kikọ ati awọn iṣẹ kika, Cassandra tọju diẹ ninu awọn data ni Ramu.

Bayi - si gbigbe agbara gangan si Kubernetes.

Ṣayẹwo-akojọ fun gbigbe

Nigbati on soro nipa ijira ti Cassandra si Kubernetes, a nireti pe pẹlu gbigbe yoo di irọrun diẹ sii lati ṣakoso. Kini yoo nilo fun eyi, kini yoo ṣe iranlọwọ pẹlu eyi?

1. Ibi ipamọ data

Gẹgẹbi a ti ṣalaye tẹlẹ, Cassanda tọju apakan ti data ni Ramu - in Memtable. Ṣugbọn apakan miiran wa ti data ti o ti fipamọ si disk - ni fọọmu naa SSTable. A ṣe afikun nkan kan si data yii Ifaramọ Wọle - awọn igbasilẹ ti gbogbo awọn iṣowo, eyiti o tun wa ni ipamọ si disk.

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
Kọ aworan atọka idunadura ni Cassandra

Ni Kubernetes, a le lo PersistentVolume lati tọju data. Ṣeun si awọn ilana ti a fihan, ṣiṣẹ pẹlu data ni Kubernetes n di irọrun ni gbogbo ọdun.

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
A yoo pin PersistentVolume tiwa si Cassandra podu kọọkan

O ṣe pataki lati ṣe akiyesi pe Cassandra funrararẹ tumọ si atunkọ data, nfunni awọn ọna ṣiṣe ti a ṣe sinu fun eyi. Nitorinaa, ti o ba n kọ iṣupọ Cassandra lati nọmba nla ti awọn apa, lẹhinna ko si iwulo lati lo awọn ọna ṣiṣe pinpin bi Ceph tabi GlusterFS fun ibi ipamọ data. Ni idi eyi, yoo jẹ ọgbọn lati tọju data lori disiki agbalejo nipa lilo agbegbe jubẹẹlo disks tabi iṣagbesori hostPath.

Ibeere miiran jẹ ti o ba fẹ ṣẹda agbegbe lọtọ fun awọn olupilẹṣẹ fun ẹka ẹya kọọkan. Ni idi eyi, ọna ti o tọ yoo jẹ lati gbe ọkan Cassandra node ati fi data pamọ sinu ibi ipamọ ti a pin, i.e. Ceph ti a mẹnuba ati GlusterFS yoo jẹ awọn aṣayan rẹ. Lẹhinna olupilẹṣẹ yoo ni idaniloju pe kii yoo padanu data idanwo paapaa ti ọkan ninu awọn apa iṣupọ Kuberntes ba sọnu.

2. Abojuto

Yiyan ti ko ni idije fun imuse ibojuwo ni Kubernetes jẹ Prometheus (a ti sọrọ nipa eyi ni awọn alaye ni jẹmọ iroyin). Bawo ni Cassandra ṣe pẹlu awọn olutaja metiriki fun Prometheus? Ati, kini paapaa pataki, pẹlu awọn dashboards ti o baamu fun Grafana?

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
Apeere ti irisi awọn aworan ni Grafana fun Cassandra

Awọn olutaja meji nikan ni o wa: jmx_olutaja и cassandra_exporter.

A yan akọkọ fun ara wa nitori:

  1. JMX Exporter n dagba ati idagbasoke, lakoko ti Cassandra Exporter ko ni anfani lati gba atilẹyin agbegbe to. Cassandra Exporter ṣi ko ṣe atilẹyin ọpọlọpọ awọn ẹya ti Cassandra.
  2. O le ṣiṣẹ bi javaagent nipa fifi asia kan kun -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Ọkan wa fun u dasibodu deedee, eyiti ko ni ibamu pẹlu Cassandra Exporter.

3. Yiyan Kubernetes primitives

Gẹgẹbi eto ti o wa loke ti iṣupọ Cassandra, jẹ ki a gbiyanju lati tumọ ohun gbogbo ti o ṣe apejuwe nibẹ sinu awọn ọrọ Kubernetes:

  • Node Cassandra → Pod
  • Cassandra agbeko → StatefulSet
  • Cassandra Datacenter → adagun lati StatefulSets
  • Iṣupọ Cassandra → ???

O wa ni jade pe diẹ ninu awọn afikun nkan ti nsọnu lati ṣakoso gbogbo iṣupọ Cassandra ni ẹẹkan. Ṣugbọn ti nkan ko ba si, a le ṣẹda rẹ! Kubernetes ni ẹrọ kan fun asọye awọn orisun tirẹ fun idi eyi - Aṣa Resource Definitions.

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
N kede awọn orisun afikun fun awọn akọọlẹ ati awọn titaniji

Ṣugbọn Awọn orisun Aṣa funrararẹ ko tumọ si ohunkohun: lẹhinna, o nilo adarí. O le nilo lati wa iranlọwọ Kubernetes onišẹ...

4. Pod idanimọ

Ninu paragira ti o wa loke, a gba pe ipade Cassandra kan yoo dọgba podu kan ni Kubernetes. Ṣugbọn awọn adirẹsi IP ti awọn adarọ-ese yoo yatọ ni igba kọọkan. Ati idanimọ ti ipade kan ni Cassandra da lori adiresi IP… O wa ni pe lẹhin yiyọkuro kọọkan ti podu kan, iṣupọ Cassandra yoo ṣafikun ipade tuntun kan.

Ọna kan wa, kii ṣe ọkan nikan:

  1. A le tọju awọn igbasilẹ nipasẹ awọn idamọ agbalejo (UUID ti o ṣe idanimọ awọn iṣẹlẹ Cassandra ni iyasọtọ) tabi nipasẹ awọn adirẹsi IP ati tọju gbogbo rẹ ni awọn ẹya/tabili kan. Ọna naa ni awọn alailanfani akọkọ meji:
    • Ewu ti ipo ije kan ti o waye ti awọn apa meji ba ṣubu ni ẹẹkan. Lẹhin igbega, awọn apa Cassandra yoo beere adirẹsi IP nigbakanna lati ori tabili ati dije fun orisun kanna.
    • Ti ipade Cassandra kan ti padanu data rẹ, a kii yoo ni anfani lati ṣe idanimọ rẹ mọ.
  2. Ojutu keji dabi gige kekere, ṣugbọn sibẹsibẹ: a le ṣẹda Iṣẹ kan pẹlu ClusterIP fun ọkọọkan Cassandra node. Awọn iṣoro pẹlu imuse yii:
    • Ti ọpọlọpọ awọn apa ba wa ninu iṣupọ Cassandra, a yoo ni lati ṣẹda ọpọlọpọ Awọn iṣẹ.
    • Ẹya ClusterIP jẹ imuse nipasẹ awọn iptables. Eyi le di iṣoro ti iṣupọ Cassandra ba ni ọpọlọpọ (1000... tabi paapaa 100?) awọn apa. Biotilejepe iwọntunwọnsi da lori IPVS le yanju isoro yi.
  3. Ojutu kẹta ni lati lo nẹtiwọọki ti awọn apa fun awọn apa Cassandra dipo nẹtiwọọki iyasọtọ ti awọn adarọ-ese nipa ṣiṣe eto naa ṣiṣẹ. hostNetwork: true. Ọna yii fa awọn ihamọ kan:
    • Lati ropo sipo. O jẹ dandan pe ipade tuntun gbọdọ ni adiresi IP kanna bi ti iṣaaju (ninu awọn awọsanma bi AWS, GCP eyi ko ṣee ṣe lati ṣe);
    • Lilo nẹtiwọọki ti awọn apa iṣupọ, a bẹrẹ lati dije fun awọn orisun nẹtiwọọki. Nitorinaa, gbigbe diẹ ẹ sii ju podu kan pẹlu Cassandra sori ipade iṣupọ kan yoo jẹ iṣoro.

5. Awọn afẹyinti

A fẹ lati fipamọ ẹya kikun ti data oju ipade Cassandra kan lori iṣeto kan. Kubernetes pese ẹya ti o rọrun ni lilo CronJob, sugbon nibi Cassandra ara fi kan sọ ninu awọn kẹkẹ wa.

Jẹ ki n leti pe Cassandra tọju diẹ ninu awọn data ni iranti. Lati ṣe afẹyinti ni kikun, o nilo data lati iranti (Memtablesgbe si disk (SSTables). Ni aaye yii, ipade Cassandra duro gbigba awọn asopọ, tiipa patapata lati iṣupọ.

Lẹhin eyi, a ti yọ afẹyinti kuro (foto kameraati pe eto naa ti wa ni fipamọ (aaye bọtini). Ati lẹhinna o wa ni pe o kan afẹyinti ko fun wa ni ohunkohun: a nilo lati ṣafipamọ awọn idamọ data fun eyiti ipade Cassandra jẹ iduro - iwọnyi jẹ awọn ami pataki.

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
Pinpin awọn ami lati ṣe idanimọ kini data awọn apa Cassandra jẹ iduro fun

Iwe afọwọkọ apẹẹrẹ fun gbigba afẹyinti Cassandra lati Google ni Kubernetes ni a le rii ni ọna asopọ yii. Ojuami kan ṣoṣo ti iwe afọwọkọ ko ṣe akiyesi ni a tunto data si ipade ṣaaju ki o to mu aworan naa. Iyẹn ni, a ṣe afẹyinti kii ṣe fun ipo lọwọlọwọ, ṣugbọn fun ipinlẹ diẹ sẹhin. Ṣugbọn eyi ṣe iranlọwọ lati ma mu oju ipade naa kuro ninu iṣẹ, eyiti o dabi ọgbọn pupọ.

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

Apeere ti iwe afọwọkọ bash fun gbigba afẹyinti lati oju ipade Cassandra kan

Awọn solusan ti o ṣetan fun Cassandra ni Kubernetes

Kini o nlo lọwọlọwọ lati ran Cassandra ni Kubernetes ati pe ninu awọn wọnyi ti o dara julọ ni ibamu pẹlu awọn ibeere ti a fun?

1. Awọn ojutu ti o da lori awọn shatti StatefulSet tabi Helm

Lilo awọn iṣẹ ipilẹ StatefulSets lati ṣiṣẹ iṣupọ Cassandra jẹ aṣayan ti o dara. Lilo iwe apẹrẹ Helm ati awọn awoṣe Go, o le pese olumulo pẹlu wiwo to rọ fun gbigbe Cassandra lọ.

Eyi maa n ṣiṣẹ daradara ... titi ti nkan airotẹlẹ yoo ṣẹlẹ, gẹgẹbi ikuna ipade. Awọn irinṣẹ Kubernetes Standard nìkan ko le ṣe akiyesi gbogbo awọn ẹya ti a ṣalaye loke. Ni afikun, ọna yii ni opin pupọ ni iye ti o le faagun fun awọn lilo eka diẹ sii: rirọpo ipade, afẹyinti, imularada, ibojuwo, ati bẹbẹ lọ.

Awọn aṣoju:

Awọn shatti mejeeji dara bakanna, ṣugbọn o wa labẹ awọn iṣoro ti a ṣalaye loke.

2. Awọn ojutu da lori Kubernetes Operator

Iru awọn aṣayan bẹẹ jẹ igbadun diẹ sii nitori wọn pese awọn aye lọpọlọpọ fun ṣiṣakoso iṣupọ naa. Fun ṣiṣe apẹrẹ oniṣẹ Cassandra kan, bii eyikeyi data data miiran, ilana to dara dabi Sidecar <-> Adarí <-> CRD:

Iṣilọ ti Cassandra si Kubernetes: awọn ẹya ara ẹrọ ati awọn solusan
Eto iṣakoso ipade ni oniṣẹ Cassandra ti a ṣe daradara

Jẹ ki a wo awọn oniṣẹ tẹlẹ.

1. Cassandra-onišẹ lati instaclustr

  • GitHub
  • Igbaradi: Alpha
  • iwe-aṣẹ: Apache 2.0
  • Ti ṣe imuse ni: Java

Nitootọ eyi jẹ iṣẹ akanṣe ti o ni ileri pupọ ati ṣiṣe idagbasoke lati ile-iṣẹ kan ti o funni ni awọn imuṣiṣẹ Cassandra ti iṣakoso. O, gẹgẹbi a ti salaye loke, nlo apo eiyan ẹgbẹ ti o gba awọn aṣẹ nipasẹ HTTP. Ti a kọ ni Java, nigba miiran ko ni iṣẹ ṣiṣe ilọsiwaju diẹ sii ti ile-ikawe-lọ alabara. Paapaa, oniṣẹ ko ṣe atilẹyin awọn agbeko oriṣiriṣi fun Datacenter kan.

Ṣugbọn oniṣẹ ni iru awọn anfani bi atilẹyin fun ibojuwo, iṣakoso iṣupọ ipele giga nipa lilo CRD, ati paapaa iwe fun ṣiṣe awọn afẹyinti.

2. Navigator lati Jetstack

  • GitHub
  • Igbaradi: Alpha
  • iwe-aṣẹ: Apache 2.0
  • Ti ṣe ni: Golang

Gbólóhùn kan ti a ṣe lati mu DB-bi-iṣẹ-iṣẹ ṣiṣẹ. Lọwọlọwọ ṣe atilẹyin awọn data data meji: Elasticsearch ati Cassandra. O ni iru awọn solusan ti o nifẹ si bi iṣakoso iraye si ibi ipamọ data nipasẹ RBAC (fun eyi o ni olutọpa-apiserver lọtọ tirẹ). Ise agbese ti o nifẹ ti yoo tọ lati wo ni pẹkipẹki, ṣugbọn adehun ti o kẹhin jẹ ọdun kan ati idaji sẹhin, eyiti o dinku agbara rẹ ni kedere.

3. Cassandra-onišẹ nipa vgkowski

  • GitHub
  • Igbaradi: Alpha
  • iwe-aṣẹ: Apache 2.0
  • Ti ṣe ni: Golang

Wọn ko ṣe akiyesi rẹ "pataki", niwon ifaramo ti o kẹhin si ibi ipamọ jẹ diẹ sii ju ọdun kan sẹhin. Ti kọ idagbasoke oniṣẹ silẹ: ẹya tuntun ti Kubernetes ti o royin bi atilẹyin jẹ 1.9.

4. Cassandra-onišẹ nipa Rook

  • GitHub
  • Igbaradi: Alpha
  • iwe-aṣẹ: Apache 2.0
  • Ti ṣe ni: Golang

Onišẹ ti idagbasoke rẹ ko ni ilọsiwaju ni yarayara bi a ṣe fẹ. O ni eto CRD ti a ti ronu daradara fun iṣakoso iṣupọ, yanju iṣoro ti idamo awọn apa lilo Iṣẹ pẹlu ClusterIP (“gige” kanna)… ṣugbọn iyẹn ni gbogbo fun bayi. Lọwọlọwọ ko si ibojuwo tabi awọn afẹyinti lati inu apoti (nipasẹ ọna, a wa fun ibojuwo mu o fun ara wa). Ojuami ti o nifẹ si ni pe o tun le mu ScyllaDB ṣiṣẹ ni lilo oniṣẹ yii.

NB: A lo oniṣẹ yii pẹlu awọn iyipada kekere ninu ọkan ninu awọn iṣẹ akanṣe wa. Ko si awọn iṣoro ti a ṣe akiyesi ni iṣẹ oniṣẹ lakoko gbogbo akoko iṣẹ (~ 4 osu iṣẹ).

5. CassKop lati Orange

  • GitHub
  • Igbaradi: Alpha
  • iwe-aṣẹ: Apache 2.0
  • Ti ṣe ni: Golang

Oniṣẹ abikẹhin lori atokọ naa: adehun akọkọ ni a ṣe ni Oṣu Karun ọjọ 23, Ọdun 2019. Tẹlẹ ni bayi o ni nọmba nla ti awọn ẹya ara ẹrọ lati inu atokọ wa, eyiti o le rii ni ibi ipamọ iṣẹ akanṣe naa. Onišẹ ti wa ni itumọ ti lori ipilẹ ti gbajumo onišẹ-sdk. Ṣe atilẹyin ibojuwo jade kuro ninu apoti. Iyatọ nla lati ọdọ awọn oniṣẹ miiran jẹ lilo CassKop itanna, ti a ṣe ni Python ati lilo fun ibaraẹnisọrọ laarin awọn apa Cassandra.

awari

Nọmba awọn ọna ati awọn aṣayan ti o ṣeeṣe fun gbigbe Cassandra si Kubernetes sọrọ fun ararẹ: koko-ọrọ naa wa ni ibeere.

Ni ipele yii, o le gbiyanju eyikeyi ninu awọn loke ni eewu tirẹ ati eewu: ko si ọkan ninu awọn olupilẹṣẹ ti o ṣe iṣeduro iṣẹ 100% ti ojutu wọn ni agbegbe iṣelọpọ kan. Ṣugbọn tẹlẹ, ọpọlọpọ awọn ọja wo ni ileri lati gbiyanju lilo ninu awọn ijoko idagbasoke.

Mo ro pe ni ojo iwaju obinrin yi lori ọkọ yoo wa ni ọwọ!

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun