Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon

Nou rankontre regilyèman baz done Apache Cassandra ak bezwen pou opere li nan yon enfrastrikti ki baze sou Kubernetes. Nan materyèl sa a, nou pral pataje vizyon nou sou etap ki nesesè yo, kritè ak solisyon ki egziste deja (ki gen ladan yon apèsi sou operatè yo) pou imigre Cassandra nan K8s.

"Moun ki ka dirije yon fanm ka dirije leta tou"

kiyes Cassandra? Li se yon sistèm depo distribiye ki fèt pou jere gwo volim done pandan y ap asire gwo disponiblite san yon sèl pwen echèk. Pwojè a diman bezwen yon entwodiksyon long, kidonk mwen pral bay sèlman karakteristik prensipal yo nan Cassandra ki pral enpòtan nan yon kontèks atik espesifik:

  • Cassandra ekri nan lang Java.
  • Topoloji Cassandra gen ladan plizyè nivo:
    • Ne - yon sèl deplwaye Cassandra egzanp;
    • Rack se yon gwoup ka Cassandra, ini pa kèk karakteristik, ki chita nan menm sant done;
    • Datacenter - yon koleksyon tout gwoup ka Cassandra ki sitiye nan yon sèl sant done;
    • Cluster se yon koleksyon tout sant done.
  • Cassandra itilize yon adrès IP pou idantifye yon ne.
  • Pou akselere operasyon ekri ak lekti, Cassandra estoke kèk nan done yo nan RAM.

Koulye a, - nan aktyèl potansyèl deplase nan Kubernetes.

Tcheke-lis pou transfè

Pale sou migrasyon Cassandra nan Kubernetes, nou espere ke ak mouvman an li pral vin pi pratik jere. Ki sa ki pral mande pou sa a, ki sa ki pral ede ak sa a?

1. Depo done

Kòm te deja klarifye, Cassanda estoke yon pati nan done yo nan RAM - nan Memtable. Men, gen yon lòt pati nan done yo ki sove sou disk - nan fòm lan SSTable. Yo ajoute yon antite nan done sa yo Log komèt — dosye tout tranzaksyon yo, ki tou sove sou disk.

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Ekri dyagram tranzaksyon an Cassandra

Nan Kubernetes, nou ka itilize PersistentVolume pou estoke done yo. Mèsi a mekanis pwouve, travay ak done nan Kubernetes ap vin pi fasil chak ane.

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Nou pral asiyen chak gous ak Cassandra pwòp PersistentVolume pa yo

Li enpòtan sonje ke Cassandra tèt li implique replikasyon done, ofri mekanis entegre pou sa. Se poutèt sa, si w ap bati yon gwoup Cassandra soti nan yon gwo kantite nœuds, Lè sa a, pa gen okenn bezwen sèvi ak sistèm distribiye tankou Ceph oswa GlusterFS pou depo done. Nan ka sa a, li ta lojik nan magazen done sou disk la lame lè l sèvi avèk disk ki pèsistan lokal yo oswa monte hostPath.

Yon lòt kesyon se si ou vle kreye yon anviwònman separe pou devlopè pou chak branch karakteristik. Nan ka sa a, apwòch ki kòrèk la ta dwe ogmante yon nœud Cassandra epi estoke done yo nan yon depo distribiye, i.e. mansyone Ceph ak GlusterFS yo pral opsyon ou yo. Lè sa a, pwomotè a pral asire w ke li pa pral pèdi done tès yo menm si youn nan nœuds gwoup Kuberntes yo pèdi.

2. Siveyans

Chwa a nòmalman konteste pou mete ann aplikasyon siveyans nan Kubernetes se Prometheus (nou te pale sou sa an detay nan rapò ki gen rapò). Ki jan Cassandra ap fè ak ekspòtatè mezi pou Prometheus? Epi, ki sa ki menm pi enpòtan, ak tablodbò matche pou Grafana?

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Yon egzanp aparans nan graf nan Grafana pou Cassandra

Gen sèlman de ekspòtatè: jmx_exporter и cassandra_exporter.

Nou te chwazi premye a pou tèt nou paske:

  1. JMX Exporter ap grandi ak devlope, pandan ke Cassandra Exporter pa te kapab jwenn ase sipò nan kominote a. Cassandra Exporter toujou pa sipòte pifò vèsyon Cassandra.
  2. Ou ka kouri li kòm yon javaagent lè w ajoute yon drapo -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Gen youn pou li tablodbò adekwat, ki se enkonpatib ak Cassandra Exporter.

3. Chwazi primitif Kubernetes

Dapre estrikti ki anwo a nan gwoup Cassandra a, ann eseye tradui tout sa ki dekri la nan tèminoloji Kubernetes:

  • Cassandra Node → Pod
  • Cassandra Rack → StatefulSet
  • Cassandra Datacenter → pisin soti nan StatefulSets
  • Cassandra Cluster → ???

Li sanble ke kèk antite adisyonèl ki manke pou jere tout gwoup Cassandra nan yon fwa. Men, si yon bagay pa egziste, nou ka kreye li! Kubernetes gen yon mekanis pou defini pwòp resous li pou objektif sa a - Definisyon Resous Custom.

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Deklarasyon resous adisyonèl pou mòso bwa ak alèt

Men, Custom Resource tèt li pa vle di anyen: apre tout, li mande kontwolè. Ou ka bezwen chèche èd Operatè Kubernetes...

4. Idantifikasyon gous

Nan paragraf ki anwo a, nou te dakò ke yon nœud Cassandra pral egal yon gous nan Kubernetes. Men, adrès IP gous yo pral diferan chak fwa. Epi idantifikasyon yon ne nan Cassandra baze sou adrès IP la... Li sanble ke apre chak retire yon gous, gwoup Cassandra a pral ajoute yon nouvo ne.

Gen yon fason soti, epi li pa sèlman youn:

  1. Nou ka kenbe dosye pa idantifyan lame (UUID ki inikman idantifye ka Cassandra) oswa pa adrès IP epi estoke li tout nan kèk estrikti / tab. Metòd la gen de dezavantaj prensipal:
    • Risk pou yon kondisyon ras rive si de nœuds tonbe nan yon fwa. Apre ogmantasyon an, nœuds Cassandra pral an menm tan mande yon adrès IP nan tab la epi konpetisyon pou menm resous la.
    • Si yon nœud Cassandra pèdi done li yo, nou p ap kapab idantifye l ankò.
  2. Dezyèm solisyon an sanble tankou yon ti Hack, men kanmenm: nou ka kreye yon Sèvis ak ClusterIP pou chak ne Cassandra. Pwoblèm ak aplikasyon sa a:
    • Si gen yon anpil nan nœuds nan yon gwoup Cassandra, nou pral gen yo kreye yon anpil nan Sèvis.
    • Karakteristik ClusterIP la aplike atravè iptables. Sa a ka vin yon pwoblèm si gwoup Cassandra a gen anpil (1000... oswa menm 100?) nœuds. Malgre ke balans ki baze sou IPVS ka rezoud pwoblèm sa a.
  3. Twazyèm solisyon an se sèvi ak yon rezo nœuds pou nœuds Cassandra olye de yon rezo gous devwe lè w pèmèt anviwònman an. hostNetwork: true. Metòd sa a enpoze sèten restriksyon:
    • Pou ranplase inite yo. Li nesesè ke nouvo ne a dwe gen menm adrès IP ak youn anvan an (nan nyaj tankou AWS, GCP sa a se prèske enposib fè);
    • Sèvi ak yon rezo nœuds gwoup, nou kòmanse fè konpetisyon pou resous rezo yo. Se poutèt sa, mete plis pase yon gous ak Cassandra sou yon sèl ne grap pral pwoblèm.

5. sovgad

Nou vle sove yon vèsyon konplè nan done yon sèl Cassandra nœuds sou yon orè. Kubernetes bay yon karakteristik pratik lè l sèvi avèk CronJob, men isit Cassandra li menm mete yon reyon nan wou nou an.

Kite m raple ou ke Cassandra estoke kèk nan done yo nan memwa. Pou fè yon backup konplè, ou bezwen done nan memwa (Memtables) deplase sou disk (SSTables). Nan pwen sa a, ne Cassandra sispann aksepte koneksyon, konplètman fèmen nan gwoup la.

Apre sa, yo retire backup la (snapshot) epi konplo a sove (espas kle). Lè sa a, li sanble ke jis yon backup pa ban nou anyen: nou bezwen sove idantifyan done yo pou ki ne Cassandra te responsab - sa yo se marqueur espesyal.

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Distribisyon siy pou idantifye ki done nœuds Cassandra yo responsab

Ou ka jwenn yon egzanp script pou pran yon backup Cassandra nan Google nan Kubernetes nan lyen sa a. Sèl pwen ke script la pa pran an kont se reset done nan ne la anvan ou pran snapshot la. Sa vle di, backup la fèt pa pou eta aktyèl la, men pou yon eta yon ti kras pi bonè. Men, sa a ede pa pran ne la soti nan operasyon, ki sanble trè lojik.

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

Yon egzanp yon script bash pou pran yon backup soti nan yon nœud Cassandra

Pare solisyon pou Cassandra nan Kubernetes

Ki sa yo itilize kounye a pou deplwaye Cassandra nan Kubernetes ak kilès nan sa yo pi byen adapte kondisyon yo bay yo?

1. Solisyon ki baze sou StatefulSet oswa tablo Helm

Sèvi ak fonksyon debaz StatefulSets pou kouri yon gwoup Cassandra se yon bon opsyon. Sèvi ak tablo Helm ak modèl Go, ou ka bay itilizatè a yon koòdone fleksib pou deplwaye Cassandra.

Anjeneral sa a travay byen... jiskaske yon bagay inatandi rive, tankou yon echèk ne. Zouti estanda Kubernetes tou senpleman pa ka pran an kont tout karakteristik ki dekri pi wo a. Anplis de sa, apwòch sa a trè limite nan konbyen li ka pwolonje pou itilizasyon ki pi konplèks: ranplasman ne, backup, rekiperasyon, siveyans, elatriye.

Reprezantan:

Tou de tablo yo egalman bon, men yo sijè a pwoblèm ki dekri pi wo a.

2. Solisyon ki baze sou Kubernetes Operatè

Opsyon sa yo pi enteresan paske yo bay anpil opòtinite pou jere gwoup la. Pou konsepsyon yon operatè Cassandra, tankou nenpòt lòt baz done, yon bon modèl sanble Sidecar <-> Controller <-> CRD:

Migrasyon Cassandra nan Kubernetes: karakteristik ak solisyon
Konplo jesyon ne nan yon operatè Cassandra ki byen fèt

Ann gade nan operatè ki egziste deja.

1. Cassandra-operatè soti nan instaclustr

  • GitHub
  • Preparasyon: Alpha
  • Lisans: Apache 2.0
  • Aplike nan: Java

Sa a se vre yon pwojè trè pwomèt ak aktivman devlope nan men yon konpayi ki ofri jere deplwaman Cassandra. Li, jan sa dekri pi wo a, sèvi ak yon veso sidecar ki aksepte kòmandman atravè HTTP. Ekri nan Java, li pafwa manke fonksyonalite ki pi avanse nan bibliyotèk la kliyan-ale. Epitou, operatè a pa sipòte diferan etajè pou yon sèl Datacenter.

Men, operatè a gen avantaj tankou sipò pou siveyans, jesyon grap wo nivo lè l sèvi avèk CRD, e menm dokiman pou fè sovgad.

2. Navigatè soti nan Jetstack

  • GitHub
  • Preparasyon: Alpha
  • Lisans: Apache 2.0
  • Aplike nan: Golang

Yon deklarasyon ki fèt pou deplwaye DB-as-a-Service. Kounye a sipòte de baz done: Elasticsearch ak Cassandra. Li gen solisyon enteresan tankou kontwòl aksè baz done atravè RBAC (pou sa li gen pwòp navigatè-apiserver separe li yo). Yon pwojè enteresan ki ta vo pran yon gade pi pre, men dènye angajman an te fè yon ane ak yon mwatye de sa, ki klèman diminye potansyèl li.

3. Cassandra-operatè pa vgkowski

  • GitHub
  • Preparasyon: Alpha
  • Lisans: Apache 2.0
  • Aplike nan: Golang

Yo pa t 'konsidere li "seryezman", depi dènye komèt nan repozitwa a te plis pase yon ane de sa. Devlopman operatè yo abandone: dènye vèsyon Kubernetes rapòte kòm sipòte se 1.9.

4. Cassandra-operatè pa Rook

  • GitHub
  • Preparasyon: Alpha
  • Lisans: Apache 2.0
  • Aplike nan: Golang

Yon operatè ki gen devlopman pa pwogrese osi vit ke nou ta renmen. Li gen yon estrikti CRD byen panse pou jesyon gwoup, rezoud pwoblèm nan nan idantifye nœuds lè l sèvi avèk Sèvis ak ClusterIP (menm "rache") ... men sa a tout pou kounye a. Kounye a pa gen okenn siveyans oswa sovgad soti nan bwat la (nan chemen an, nou se pou siveyans te pran li nou menm). Yon pwen enteresan se ke ou ka tou deplwaye ScyllaDB lè l sèvi avèk operatè sa a.

NB: Nou te itilize operatè sa a ak ti chanjman nan youn nan pwojè nou yo. Pa gen pwoblèm yo te remake nan travay operatè a pandan tout peryòd operasyon an (~4 mwa nan operasyon).

5. CassKop soti nan Orange

  • GitHub
  • Preparasyon: Alpha
  • Lisans: Apache 2.0
  • Aplike nan: Golang

Operatè ki pi piti a sou lis la: premye angajman an te fèt 23 me 2019. Deja kounye a li gen nan asenal li yo yon gwo kantite karakteristik nan lis nou an, plis detay sou yo ka jwenn nan depo pwojè a. Se operatè a bati sou baz operatè-sdk popilè a. Sipòte siveyans soti nan bwat la. Diferans prensipal la ak lòt operatè yo se itilizasyon an Plugin CassKop, aplike nan Python epi yo itilize pou kominikasyon ant nœuds Cassandra.

Jwenn

Nimewo a nan apwòch ak opsyon posib pou pò Cassandra nan Kubernetes pale pou tèt li: sijè a se nan demann.

Nan etap sa a, ou ka eseye nenpòt nan pi wo a nan pwòp danje ou ak risk: pa youn nan devlopè yo garanti 100% operasyon nan solisyon yo nan yon anviwònman pwodiksyon. Men, deja kounye a anpil pwodwi sanble pwomèt pou yo eseye sèvi ak yo nan ban devlopman.

Mwen panse ke nan tan kap vini fanm sa a sou bato a pral vin an sou la men!

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè