ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā

Kūleʻa pinepine mākou i ka waihona ʻo Apache Cassandra a me ka pono e hana i loko o kahi ʻōnaehana kumu Kubernetes. Ma kēia kumuhana, e kaʻana like mākou i kā mākou ʻike i nā pae kūpono, nā pae hoʻohālikelike a me nā hoʻonā i loaʻa (me ka ʻike nui o nā mea hana) no ka neʻe ʻana iā Cassandra i K8s.

"ʻO ka mea hiki ke hoʻomalu i ka wahine, hiki iā ia ke hoʻomalu i ka moku'āina"

ʻO wai ʻo Cassandra? He ʻōnaehana mālama ʻia ia i hoʻolālā ʻia e hoʻokele i ka nui o ka ʻikepili me ka hōʻoia ʻana i ka loaʻa kiʻekiʻe me ka ʻole o kahi hemahema. ʻAʻole pono ka papahana i kahi hoʻolauna lōʻihi, no laila e hāʻawi wau i nā hiʻohiʻona nui o Cassandra e pili ana i ka pōʻaiapili o kahi ʻatikala kikoʻī:

  • Ua kākau ʻia ʻo Cassandra ma Java.
  • Aia i ka Cassandra topology kekahi mau pae:
    • Node - hoʻokahi i hoʻonoho ʻia ʻo Cassandra;
    • ʻO Rack kahi hui o Cassandra, i hui pū ʻia e kekahi ʻano, aia ma ka kikowaena ʻikepili like;
    • ʻIkepili - he hōʻiliʻili o nā hui a pau o Cassandra i loaʻa i loko o kahi kikowaena ʻikepili;
    • ʻO Cluster kahi hōʻiliʻili o nā kikowaena ʻikepili āpau.
  • Hoʻohana ʻo Cassandra i kahi helu IP e ʻike ai i kahi node.
  • No ka wikiwiki o ka kākau ʻana a me ka heluhelu ʻana, mālama ʻo Cassandra i kekahi o nā ʻikepili i RAM.

I kēia manawa - i ka neʻe ʻana i Kubernetes.

Papa inoa no ka hoʻoili

Ke kamaʻilio nei e pili ana i ka neʻe ʻana o Cassandra i Kubernetes, manaʻolana mākou me ka neʻe ʻana e lilo ia i mea maʻalahi e hoʻokele. He aha ka mea e pono ai no kēia, he aha ka mea e kōkua ai i kēia?

1. Waihona ʻikepili

E like me ka mea i wehewehe ʻia, mālama ʻo Cassanda i kahi ʻāpana o ka ʻikepili ma RAM - in Memtable. Akā aia kekahi ʻāpana o ka ʻikepili i mālama ʻia i ka disk - ma ke ʻano SSTable. Hoʻohui ʻia kahi hui i kēia ʻikepili Hoʻopaʻa Log - nā moʻolelo o nā hana a pau, i mālama ʻia i ka disk.

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
E kākau i ke kiʻikuhi kālepa ma Cassandra

Ma Kubernetes, hiki iā mākou ke hoʻohana i ka PersistentVolume e mālama i ka ʻikepili. Mahalo i nā mīkini i hōʻoia ʻia, e maʻalahi ka hana ʻana me ka ʻikepili ma Kubernetes i kēlā me kēia makahiki.

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
E hoʻokaʻawale mākou i kēlā me kēia pod me Cassandra i kāna PersistentVolume ponoʻī

He mea nui ia e hoʻomaopopo ʻo Cassandra ponoʻī i ka hoʻopiʻi ʻana i ka ʻikepili, e hāʻawi ana i nā hana i kūkulu ʻia no kēia. No laila, inā ʻoe e kūkulu nei i kahi puʻupuʻu Cassandra mai ka nui o nā nodes, a laila ʻaʻohe pono e hoʻohana i nā ʻōnaehana puʻupuʻu e like me Ceph a i ʻole GlusterFS no ka mālama ʻana i ka ʻikepili. I kēia hihia, pono e mālama i ka ʻikepili ma ka disk host me ka hoʻohana ʻana nā diski hoʻomau kūloko a i ʻole ke kau ʻana hostPath.

ʻO kekahi nīnau inā makemake ʻoe e hana i kahi kaʻawale no nā mea hoʻomohala no kēlā me kēia lālā hiʻohiʻona. I kēia hihia, ʻo ke ala kūpono e hoʻokiʻekiʻe i hoʻokahi node Cassandra a mālama i ka ʻikepili i kahi waihona puʻupuʻu, ʻo ia. ʻO ka Ceph a me GlusterFS i ʻōlelo ʻia kāu mau koho. A laila e hōʻoia ka mea hoʻomohala ʻaʻole ia e nalowale i ka ʻikepili hoʻāʻo inā e nalowale kekahi o nā puʻupuʻu Kuberntes.

2. Nānā

ʻO ka koho ʻaʻole i hoʻokūkū ʻia no ka hoʻokō ʻana i ka nānā ʻana ma Kubernetes ʻo Prometheus (Ua kamaʻilio mākou e pili ana i kēia ma ka kikoʻī hoike pili). Pehea ka hana ʻana o Cassandra me nā mea kūʻai aku no Prometheus? A he aha ka mea nui loa, me nā dashboards like no Grafana?

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
He laʻana o ke ʻano o nā kiʻi ma Grafana no Cassandra

ʻElua wale nō mea kūʻai aku: jmx_exporter и cassandra_exporter.

Ua koho mākou i ka mea mua no mākou iho no ka mea:

  1. Ke ulu a ulu nei ʻo JMX Exporter, ʻoiai ʻo Cassandra Exporter ʻaʻole i lawa ke kākoʻo kaiāulu. ʻAʻole kākoʻo ʻo Cassandra Exporter i ka hapa nui o Cassandra.
  2. Hiki iā ʻoe ke holo ma ke ʻano he javaagent ma ka hoʻohui ʻana i kahi hae -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Aia kekahi no ia dashboad kūpono, ʻaʻole kūpono me Cassandra Exporter.

3. Ke koho ʻana i nā Kubernetes primitives

E like me ke ʻano o luna o ka hui Cassandra, e hoʻāʻo kākou e unuhi i nā mea a pau i wehewehe ʻia ma laila i loko o nā huaʻōlelo Kubernetes:

  • ʻO Cassandra Node → Pod
  • ʻO Cassandra Rack → StatefulSet
  • ʻO Cassandra Datacenter → pool mai StatefulSets
  • Cassandra Cluster → ???

ʻIke ʻia ʻaʻole nalo kekahi hui hou e hoʻokele i ka pūʻulu Cassandra holoʻokoʻa i ka manawa hoʻokahi. Akā inā ʻaʻohe mea, hiki iā mākou ke hana! Loaʻa iā Kubernetes kahi hana no ka wehewehe ʻana i kāna mau kumuwaiwai no kēia kumu - Nā wehewehe kumu waiwai maʻamau.

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
E haʻi ana i nā kumuwaiwai hou aʻe no nā lāʻau a me nā makaʻala

Akā ʻaʻole manaʻo ʻo Custom Resource iā ia iho: ma hope o nā mea a pau, pono ia ka mea kāohi. Pono paha ʻoe e ʻimi i ke kōkua Mea hoʻohana Kubernetes...

4. ʻIke ʻia o nā pods

Ma ka paukū ma luna, ua ʻae mākou e hoʻokahi node Cassandra i hoʻokahi pod ma Kubernetes. Akā ʻokoʻa nā helu IP o nā pods i kēlā me kēia manawa. Aʻo kaʻikeʻana i kahi node ma Cassandra e pili ana i ka IP address ... Uaʻikeʻia ma hope o kēlā me kēia weheʻana o kahi pod, e hoʻohui ka hui Cassandra i kahi node hou.

Aia kahi ala i waho, ʻaʻole hoʻokahi wale nō:

  1. Hiki iā mākou ke mālama i nā moʻolelo e nā mea hōʻike hoʻokipa (UUIDs e ʻike kūʻokoʻa i nā manawa Cassandra) a i ʻole ma nā leka uila IP a mālama i nā mea āpau i kekahi mau hale/papa. ʻElua mau hemahema nui o ke ala:
    • ʻO ka pilikia o ke kūlana lāhui inā hāʻule nā ​​node ʻelua i ka manawa hoʻokahi. Ma hope o ka piʻi ʻana, e noi like ʻo Cassandra nodes i kahi IP address mai ka papaʻaina a hoʻokūkū no ka waiwai like.
    • Inā ua nalowale ka ʻikepili o kahi node Cassandra, ʻaʻole hiki iā mākou ke ʻike hou iā ia.
  2. ʻO ka lua o ka hopena e like me kahi hack liʻiliʻi, akā naʻe: hiki iā mākou ke hana i kahi Service me ClusterIP no kēlā me kēia Cassandra node. Nā pilikia me kēia hoʻokō:
    • Inā nui nā nodes i kahi hui Cassandra, pono mākou e hana i nā lawelawe he nui.
    • Hoʻokō ʻia ka hiʻohiʻona ClusterIP ma o iptables. Hiki i kēia ke lilo i pilikia inā he nui (1000... a i ʻole 100?) nā node o ka hui Cassandra. ʻOiai kaulike ma muli o IPVS hiki ke hoʻoponopono i kēia pilikia.
  3. ʻO ke kolu o ka hopena, ʻo ia ka hoʻohana ʻana i kahi pūnaewele o nā nodes no nā nodes Cassandra ma kahi o kahi pūnaewele i hoʻolaʻa ʻia o nā pods ma ka ʻae ʻana i ka hoʻonohonoho. hostNetwork: true. Ke kau nei kēia ala i kekahi mau palena:
    • E pani i nā ʻāpana. Pono e loaʻa i ka node hou ka helu IP like me ka mea ma mua (i nā ao e like me AWS, GCP ʻaneʻane hiki ʻole ke hana);
    • Ke hoʻohana nei i kahi pūnaewele o nā nodes cluster, hoʻomaka mākou e hoʻokūkū no nā kumuwaiwai pūnaewele. No laila, pilikia ka hoʻokomo ʻana i nā pod me Cassandra ma kahi puʻupuʻu puʻupuʻu.

5. Nā waihona

Makemake mākou e mālama i kahi mana piha o ka ʻikepili o ka node Cassandra ma kahi papa manawa. Hāʻawi ʻo Kubernetes i kahi hiʻohiʻona maʻalahi me ka hoʻohana ʻana CronJob, akā eia ʻo Cassandra ponoʻī e kau i kahi ʻōlelo i loko o kā mākou huila.

E hoʻomanaʻo wau e mālama ʻo Cassandra i kekahi o nā ʻikepili i ka hoʻomanaʻo. No ka hana ʻana i kahi waihona piha, pono ʻoe i ka ʻikepili mai ka hoʻomanaʻo (Memtables) neʻe i ka diski (SSTables). I kēia manawa, ho'ōki ka node Cassandra i ka ʻae ʻana i nā pilina, e pani loa ana mai ka pūpū.

Ma hope o kēia, wehe ʻia ka waihona (kope kēia) a ua mālama ʻia ka papahana (wahi kī). A laila ua ʻike ʻia ʻaʻole hāʻawi kahi waihona iā mākou i kekahi mea: pono mākou e mālama i nā ʻike ʻikepili i kuleana ai ka node Cassandra - he mau hōʻailona kūikawā kēia.

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
Ka hoʻokaʻawale ʻana i nā hōʻailona e ʻike ai i nā ʻikepili a Cassandra nodes ke kuleana

Hiki ke loaʻa kahi palapala hōʻailona no ka lawe ʻana i kahi waihona Cassandra mai Google ma Kubernetes ma kēia loulou. ʻO ka mea wale nō i noʻonoʻo ʻole ʻia e ka ʻatikala ʻo ka hoʻihoʻi ʻana i ka ʻikepili i ka node ma mua o ka lawe ʻana i ke kiʻi. ʻO ia hoʻi, ʻaʻole i hana ʻia ke kākoʻo no ke kūlana o kēia manawa, akā no kahi mokuʻāina ma mua iki. Akā ʻaʻole kōkua kēia i ka lawe ʻole ʻana i ka node i waho o ka hana, ʻike ʻia ke kūpono.

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

ʻO kahi hiʻohiʻona o kahi palapala bash no ka lawe ʻana i kahi waihona mai kahi node Cassandra

Hoʻomākaukau mākaukau no Cassandra ma Kubernetes

He aha ka mea i hoʻohana ʻia i kēia manawa e kau iā Cassandra ma Kubernetes a ʻo wai o kēia mau mea i kūpono i nā koi i hāʻawi ʻia?

1. Nā hoʻonā e pili ana i ka palapala StatefulSet a i ʻole Helm

ʻO ka hoʻohana ʻana i nā hana StatefulSets maʻamau e holo i kahi hui Cassandra kahi koho maikaʻi. Me ka hoʻohana ʻana i ka pakuhi Helm a me Go templates, hiki iā ʻoe ke hāʻawi i ka mea hoʻohana me kahi interface maʻalahi no ka lawe ʻana iā Cassandra.

Hana maikaʻi kēia ... a hiki i kahi mea i manaʻo ʻole ʻia, e like me ka hemahema o ka node. ʻAʻole hiki i nā mea hana Kubernetes maʻamau ke noʻonoʻo i nā hiʻohiʻona āpau i wehewehe ʻia ma luna. Eia kekahi, ua kaupalena ʻia kēia ala i ka nui o ka hiki ke hoʻonui ʻia no nā hoʻohana paʻakikī: hoʻololi node, hoʻihoʻi, hoʻihoʻi, nānā, etc.

Nā Lunamakaʻāinana:

He maikaʻi like nā pakuhi ʻelua, akā pili i nā pilikia i hōʻike ʻia ma luna.

2. Nā hoʻonā e pili ana i ka Kubernetes Operator

ʻOi aku ka hoihoi o ia mau koho no ka mea hāʻawi lākou i nā manawa kūpono no ka mālama ʻana i ka pūʻulu. No ka hoʻolālā ʻana i kahi mea hoʻohana Cassandra, e like me nā waihona ʻikepili ʻē aʻe, ʻano like ke ʻano maikaʻi e like me Sidecar Controller CRD:

ʻO ka neʻe ʻana o Cassandra i Kubernetes: nā hiʻohiʻona a me nā hoʻonā
Hoʻolālā hoʻokele node i kahi mea hoʻohana Cassandra i hoʻolālā maikaʻi ʻia

E nānā kākou i nā mea hoʻohana e kū nei.

1. Cassandra-operator mai instaclustr

  • GitHub
  • Mākaukau: Alpha
  • Laikini: Apache 2.0
  • Hoʻokō ʻia ma: Java

He papahana hoʻohiki maikaʻi loa kēia mai kahi hui e hāʻawi ana i ka hoʻokele Cassandra hoʻokele. ʻO ia, e like me ka mea i hōʻike ʻia ma luna, hoʻohana i kahi pahu sidecar e ʻae i nā kauoha ma o HTTP. Kākau ʻia ma Java, i kekahi manawa ʻaʻole ia i ka hana ʻoi aku ka holomua o ka waihona client-go. Eia kekahi, ʻaʻole kākoʻo ka mea hoʻohana i nā Racks ʻokoʻa no hoʻokahi Datacenter.

Akā, loaʻa i ka mea hoʻohana nā pono e like me ke kākoʻo no ka nānā ʻana, ka hoʻokele cluster kiʻekiʻe e hoʻohana ana i ka CRD, a me nā palapala no ka hana ʻana i nā backup.

2. Navigator mai Jetstack

  • GitHub
  • Mākaukau: Alpha
  • Laikini: Apache 2.0
  • Hoʻokō ʻia ma: Golang

ʻO kahi ʻōlelo i hoʻolālā ʻia e kau i ka DB-as-a-Service. Ke kākoʻo nei i kēia manawa i ʻelua waihona: Elasticsearch a me Cassandra. Loaʻa iā ia nā hāʻina hoihoi e like me ka mana o ka ʻikepili ma o RBAC (no kēia mea nona kāna hoʻokele kaʻawale-apiserver). ʻO kahi papahana hoihoi e pono ke nānā pono aku, akā ʻo ka hana hope i hana ʻia i hoʻokahi makahiki a me ka hapa i hala aku nei, e hōʻemi ana i kona hiki.

3. Cassandra-operator na vgkowski

  • GitHub
  • Mākaukau: Alpha
  • Laikini: Apache 2.0
  • Hoʻokō ʻia ma: Golang

ʻAʻole lākou i noʻonoʻo "koʻikoʻi", no ka mea ʻoi aku ka hana hope i ka waihona ma mua o hoʻokahi makahiki i hala. Ua haʻalele ʻia ka hoʻomohala ʻana o ka mea hana: ʻo ka mana hou loa o Kubernetes i hōʻike ʻia i kākoʻo ʻia ʻo 1.9.

4. Cassandra-operator na Rook

  • GitHub
  • Mākaukau: Alpha
  • Laikini: Apache 2.0
  • Hoʻokō ʻia ma: Golang

ʻO kahi mea hoʻohana ʻaʻole holomua ka ulu ʻana e like me kā mākou makemake. Loaʻa iā ia kahi hoʻolālā CRD noʻonoʻo maikaʻi no ka hoʻokele cluster, hoʻoponopono i ka pilikia o ka ʻike ʻana i nā nodes me ka hoʻohana ʻana i ka Service me ClusterIP (ka "hack" like) ... akā ʻo ia wale nō i kēia manawa. I kēia manawa ʻaʻohe nānā ʻana a i ʻole kākoʻo i waho o ka pahu (ma ke ala, no ka nānā ʻana mākou lawe ia makou iho). ʻO kahi mea hoihoi, hiki iā ʻoe ke kau iā ScyllaDB me ka hoʻohana ʻana i kēia mea hoʻohana.

NB: Ua hoʻohana mākou i kēia mea hoʻohana me nā hoʻololi liʻiliʻi i kekahi o kā mākou papahana. ʻAʻohe pilikia i ʻike ʻia ma ka hana a ka mea hoʻohana i ka wā holoʻokoʻa o ka hana (~ 4 mau mahina o ka hana).

5. CassKop mai Orange

  • GitHub
  • Mākaukau: Alpha
  • Laikini: Apache 2.0
  • Hoʻokō ʻia ma: Golang

ʻO ka mea hana ʻōpio loa ma ka papa inoa: ua hana ʻia ka hana mua ma Mei 23, 2019. I kēia manawa aia i loko o kāna arsenal ka nui o nā hiʻohiʻona mai kā mākou papa inoa, ʻoi aku ka nui o nā kikoʻī e ʻike ʻia ma ka waihona papahana. Kūkulu ʻia ka mea hoʻohana ma ke kumu o ka mea hoʻohana kaulana-sdk. Kākoʻo i ka nānā ʻana ma waho o ka pahu. ʻO ka ʻokoʻa nui mai nā mea hana ʻē aʻe ka hoʻohana Pākuʻi CassKop, hoʻokō ʻia ma Python a hoʻohana ʻia no ke kamaʻilio ma waena o nā nodes Cassandra.

haʻina

ʻO ka helu o nā ala a me nā koho kūpono no ka lawe ʻana iā Cassandra iā Kubernetes e ʻōlelo nona iho: ke koi ʻia ke kumuhana.

I kēia pae, hiki iā ʻoe ke hoʻāʻo i kekahi o nā mea i luna ma kou pilikia a me ka pilikia: ʻaʻohe o nā mea hoʻomohala e hōʻoiaʻiʻo i ka hana 100% o kā lākou hoʻonā i loko o kahi ʻenehana hana. Akā i kēia manawa, manaʻo nui nā huahana e hoʻāʻo e hoʻohana i nā papa hoʻomohala.

Manaʻo wau e hiki mai ana kēia wahine ma ka moku i ka wā e hiki mai ana!

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka