Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon

Kanunay namong masugatan ang database sa Apache Cassandra ug ang panginahanglan sa pag-operate niini sulod sa imprastraktura nga nakabase sa Kubernetes. Sa kini nga materyal, among ipaambit ang among panan-aw sa kinahanglan nga mga lakang, pamatasan ug kasamtangan nga mga solusyon (lakip ang usa ka kinatibuk-ang panan-aw sa mga operator) alang sa pagbalhin sa Cassandra sa K8.

"Bisan kinsa nga makamando sa usa ka babaye mahimo usab nga magmando sa estado"

Kinsa si Cassandra? Kini usa ka giapod-apod nga sistema sa pagtipig nga gidisenyo aron madumala ang daghang mga volume sa datos samtang gisiguro ang taas nga pagkaanaa nga wala’y usa ka punto sa kapakyasan. Ang proyekto halos wala magkinahanglan og taas nga pasiuna, mao nga akong ihatag lamang ang mga nag-unang bahin sa Cassandra nga mahimong may kalabutan sa konteksto sa usa ka piho nga artikulo:

  • Ang Cassandra gisulat sa Java.
  • Ang Cassandra topology naglakip sa pipila ka lebel:
    • Node - usa nga gi-deploy nga Cassandra nga pananglitan;
    • Ang Rack usa ka grupo sa mga kaso sa Cassandra, nga gihiusa sa pipila nga mga kinaiya, nga nahimutang sa parehas nga sentro sa datos;
    • Datacenter - usa ka koleksyon sa tanan nga mga grupo sa mga kaso sa Cassandra nga nahimutang sa usa ka sentro sa datos;
    • Ang Cluster usa ka koleksyon sa tanan nga mga sentro sa datos.
  • Gigamit ni Cassandra ang IP address aron mailhan ang usa ka node.
  • Aron mapadali ang mga operasyon sa pagsulat ug pagbasa, gitipigan ni Cassandra ang pipila ka mga datos sa RAM.

Karon - sa aktuwal nga potensyal nga pagbalhin sa Kubernetes.

Check-list alang sa pagbalhin

Naghisgot bahin sa paglalin ni Cassandra sa Kubernetes, nanghinaut kami nga sa paglihok kini mahimong labi ka kombenyente sa pagdumala. Unsa ang gikinahanglan alang niini, unsa ang makatabang niini?

1. Pagtipig sa datos

Sama sa gipatin-aw na, gitipigan ni Cassanda ang bahin sa datos sa RAM - in Memtable. Apan adunay laing bahin sa datos nga gitipigan sa disk - sa porma SSTable. Usa ka entidad ang gidugang sa kini nga datos Pag-apil sa Log β€” mga rekord sa tanan nga mga transaksyon, nga gitipigan usab sa disk.

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Isulat ang diagram sa transaksyon sa Cassandra

Sa Kubernetes, mahimo natong gamiton ang PersistentVolume sa pagtipig og datos. Salamat sa napamatud-an nga mga mekanismo, ang pagtrabaho sa datos sa Kubernetes nahimong mas sayon ​​matag tuig.

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Among igahin ang among kaugalingong PersistentVolume sa matag Cassandra pod

Mahinungdanon nga hinumdoman nga si Cassandra mismo nagpasabut nga pagkopya sa datos, nga nagtanyag mga built-in nga mekanismo alang niini. Busa, kung nagtukod ka usa ka kumpol sa Cassandra gikan sa daghang gidaghanon sa mga node, nan dili kinahanglan nga mogamit mga gipang-apod-apod nga mga sistema sama sa Ceph o GlusterFS alang sa pagtipig sa datos. Sa kini nga kaso, makatarunganon ang pagtipig sa datos sa host disk gamit lokal nga padayon nga mga disk o pag-mount hostPath.

Ang laing pangutana mao kung gusto nimo nga maghimo usa ka lahi nga palibot alang sa mga nag-develop alang sa matag bahin nga sanga. Sa kini nga kaso, ang husto nga pamaagi mao ang pagpataas sa usa ka Cassandra node ug pagtipig sa datos sa usa ka giapod-apod nga pagtipig, i.e. ang gihisgutan nga Ceph ug GlusterFS mao ang imong kapilian. Unya sigurado ang developer nga dili siya mawad-an sa datos sa pagsulay bisan kung nawala ang usa sa mga cluster node sa Kuberntes.

2. Pagmonitor

Ang halos dili makontra nga kapilian alang sa pagpatuman sa pagmonitor sa Kubernetes mao ang Prometheus (Among gihisgutan kini sa detalye sa may kalabutan nga taho). Kumusta si Cassandra sa mga eksporter sa sukatan para sa Prometheus? Ug, unsa pa ang labi ka hinungdanon, nga adunay katugbang nga mga dashboard alang sa Grafana?

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Usa ka pananglitan sa dagway sa mga graph sa Grafana alang kang Cassandra

Adunay duha lamang ka eksporter: jmx_exporter ΠΈ cassandra_exporter.

Gipili namo ang una alang sa among kaugalingon tungod kay:

  1. Ang JMX Exporter nagkadako ug nag-uswag, samtang ang Cassandra Exporter wala makakuha og igong suporta sa komunidad. Ang Cassandra Exporter wala gihapon nagsuporta sa kadaghanan nga mga bersyon sa Cassandra.
  2. Mahimo nimong ipadagan kini ingon usa ka javaagent pinaagi sa pagdugang usa ka bandila -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Adunay usa alang kaniya igo nga dashboad, nga dili uyon sa Cassandra Exporter.

3. Pagpili sa Kubernetes primitives

Sumala sa istruktura sa ibabaw sa Cassandra cluster, atong sulayan ang paghubad sa tanan nga gihulagway didto sa terminolohiya sa Kubernetes:

  • Cassandra Node β†’ Pod
  • Cassandra Rack β†’ StatefulSet
  • Cassandra Datacenter β†’ pool gikan sa StatefulSets
  • Cassandra Cluster β†’ ???

Nawala ang pipila ka dugang nga entidad aron madumala ang tibuuk nga cluster sa Cassandra sa usa ka higayon. Apan kung wala’y butang, mahimo naton kini buhaton! Ang Kubernetes adunay mekanismo alang sa pagtino sa kaugalingon nga mga kapanguhaan alang niini nga katuyoan - Custom nga Resource Definition.

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Pagdeklarar og dugang nga mga kapanguhaan alang sa mga troso ug mga alerto

Apan ang Custom Resource mismo wala magpasabot sa bisan unsa: human sa tanan, kini nagkinahanglan tigdumala. Tingali kinahanglan kang mangayo og tabang Kubernetes operator...

4. Pag-ila sa pod

Sa paragraph sa ibabaw, nagkasabot mi nga ang usa ka Cassandra node motumbas sa usa ka pod sa Kubernetes. Apan ang mga IP adres sa mga pod managlahi matag higayon. Ug ang pag-ila sa usa ka node sa Cassandra gibase sa IP address ... Kini nahimo nga human sa matag pagtangtang sa usa ka pod, ang Cassandra cluster magdugang ug bag-ong node.

Adunay usa ka paagi sa paggawas, ug dili lang usa:

  1. Mahimo natong tipigan ang mga rekord pinaagi sa mga host identifier (UUIDs nga talagsaon nga makaila sa mga kaso sa Cassandra) o pinaagi sa mga IP address ug itago kini tanan sa pipila ka mga istruktura/table. Ang pamaagi adunay duha ka panguna nga mga disbentaha:
    • Ang risgo sa usa ka kahimtang sa lumba nga mahitabo kung duha ka buko mahulog sa usa ka higayon. Pagkahuman sa pagtaas, ang mga node sa Cassandra dungan nga mangayo usa ka IP address gikan sa lamesa ug makigkompetensya alang sa parehas nga kapanguhaan.
    • Kung ang usa ka Cassandra node nawala ang datos niini, dili na namo kini mailhan.
  2. Ang ikaduha nga solusyon ingon og usa ka gamay nga hack, apan bisan pa niana: makahimo kami og Serbisyo nga adunay ClusterIP alang sa matag Cassandra node. Mga problema sa kini nga pagpatuman:
    • Kung adunay daghang mga node sa usa ka kumpol sa Cassandra, kinahanglan namon nga maghimo daghang mga Serbisyo.
    • Ang ClusterIP nga bahin gipatuman pinaagi sa iptables. Mahimo kini nga problema kung ang kumpol sa Cassandra adunay daghang (1000 ... o bisan 100?) nga mga node. Bisan pa pagbalanse base sa IPVS makasulbad niini nga problema.
  3. Ang ikatulo nga solusyon mao ang paggamit sa usa ka network sa mga node alang sa Cassandra nodes imbis sa usa ka gipahinungod nga network sa mga pod pinaagi sa pagpagana sa setting. hostNetwork: true. Kini nga pamaagi nagpahamtang sa pipila ka mga limitasyon:
    • Para ilisan ang mga unit. Kinahanglan nga ang bag-ong node kinahanglan adunay parehas nga IP address sama sa nauna (sa mga panganod sama sa AWS, GCP hapit imposible nga buhaton kini);
    • Gamit ang usa ka network sa mga cluster node, nagsugod kami sa kompetisyon alang sa mga kapanguhaan sa network. Busa, ang pagbutang og labaw sa usa ka pod nga adunay Cassandra sa usa ka cluster node mahimong problema.

5. Mga backup

Gusto namon nga magtipig usa ka tibuuk nga bersyon sa usa ka data sa Cassandra node sa usa ka iskedyul. Ang Kubernetes naghatag usa ka kombenyente nga bahin gamit CronJob, pero dinhi si Cassandra mismo nagbutang ug spoke sa among mga ligid.

Pahinumdoman ko ikaw nga gitipigan ni Cassandra ang pipila ka mga datos sa memorya. Aron makahimo usa ka hingpit nga backup, kinahanglan nimo ang data gikan sa memorya (Mga Memtable) balhin sa disk (Mga SSTable). Niini nga punto, ang Cassandra node mihunong sa pagdawat sa mga koneksyon, nga hingpit nga nagsira gikan sa cluster.

Human niini, ang backup gikuha (snapshot) ug ang laraw naluwas (keyspace). Ug unya nahibal-an nga ang usa lamang ka backup wala maghatag kanamo bisan unsa: kinahanglan namon nga i-save ang mga identifier sa data diin ang Cassandra node ang responsable - kini mga espesyal nga mga token.

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Pag-apod-apod sa mga token aron mahibal-an kung unsang mga datos ang responsable sa Cassandra nodes

Usa ka panig-ingnan nga script sa pagkuha sa Cassandra backup gikan sa Google sa Kubernetes makita sa kini nga sumpay. Ang bugtong punto nga wala gikonsiderar sa script mao ang pag-reset sa datos sa node sa wala pa makuha ang snapshot. Kana mao, ang pag-backup gihimo dili alang sa kasamtangan nga estado, apan alang sa usa ka estado nga mas sayo pa. Apan kini makatabang nga dili makuha ang node sa operasyon, nga ingon og makatarunganon kaayo.

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

Usa ka pananglitan sa usa ka bash script alang sa pagkuha og backup gikan sa usa ka Cassandra node

Andam nga mga solusyon alang kang Cassandra sa Kubernetes

Unsa ang gigamit karon sa pag-deploy ni Cassandra sa Kubernetes ug hain niini ang labing angay sa gihatag nga mga kinahanglanon?

1. Mga solusyon base sa StatefulSet o Helm nga mga tsart

Ang paggamit sa mga batakang StatefulSets nga mga function sa pagpadagan sa usa ka Cassandra cluster usa ka maayong kapilian. Gamit ang Helm chart ug Go templates, makahatag ka sa user og flexible interface para sa pagdeploy kang Cassandra.

Kini kasagarang maayo... hangtud nga adunay mahitabo nga wala damha, sama sa pagkapakyas sa node. Ang mga tool sa standard nga Kubernetes dili gyud makonsiderar ang tanan nga mga bahin nga gihulagway sa ibabaw. Dugang pa, kini nga pamaagi limitado kaayo kung unsa ka daghan ang mahimo nga mapalawig alang sa labi ka komplikado nga paggamit: pagpuli sa node, backup, pagbawi, pag-monitor, ug uban pa.

Mga representante:

Ang duha nga mga tsart parehas nga maayo, apan gipailalom sa mga problema nga gihulagway sa ibabaw.

2. Mga solusyon base sa Kubernetes Operator

Ang ingon nga mga kapilian labi ka makapaikag tungod kay naghatag kini daghang mga oportunidad alang sa pagdumala sa cluster. Alang sa pagdesinyo sa usa ka Cassandra operator, sama sa bisan unsa nga database, ang usa ka maayo nga sumbanan morag Sidecar <-> Controller <-> CRD:

Paglalin ni Cassandra sa Kubernetes: mga bahin ug solusyon
Node management scheme sa usa ka maayo nga pagkadisenyo nga Cassandra operator

Atong tan-awon ang kasamtangan nga mga operator.

1. Cassandra-operator gikan sa instaclustr

  • GitHub
  • Andam: Alpha
  • Lisensya: Apache 2.0
  • Gipatuman sa: Java

Kini sa tinuud usa ka maayo kaayo ug aktibo nga nagpalambo nga proyekto gikan sa usa ka kompanya nga nagtanyag mga gidumala nga pag-deploy sa Cassandra. Kini, sama sa gihulagway sa ibabaw, naggamit sa usa ka sidecar nga sudlanan nga modawat sa mga sugo pinaagi sa HTTP. Gisulat sa Java, kini usahay kulang sa mas abante nga pagpaandar sa client-go library. Usab, ang operator dili mosuporta sa lain-laing mga Racks alang sa usa ka Datacenter.

Apan ang operator adunay mga bentaha sama sa suporta sa pag-monitor, taas nga lebel sa pagdumala sa cluster gamit ang CRD, ug bisan ang dokumentasyon alang sa paghimo og mga backup.

2. Navigator gikan sa Jetstack

  • GitHub
  • Andam: Alpha
  • Lisensya: Apache 2.0
  • Gipatuman sa: Golang

Usa ka pahayag nga gidesinyo sa pag-deploy sa DB-as-a-Service. Sa pagkakaron nagsuporta sa duha ka mga database: Elasticsearch ug Cassandra. Adunay kini makapaikag nga mga solusyon sama sa pagkontrol sa pag-access sa database pinaagi sa RBAC (kay kini adunay kaugalingon nga lahi nga navigator-apiserver). Usa ka makapaikag nga proyekto nga angayan nga tan-awon pag-ayo, apan ang katapusan nga pasalig gihimo usa ka tuig ug tunga ang milabay, nga tin-aw nga nagpamenos sa potensyal niini.

3. Cassandra-operator ni vgkowski

  • GitHub
  • Andam: Alpha
  • Lisensya: Apache 2.0
  • Gipatuman sa: Golang

Wala nila kini isipa nga "seryoso", tungod kay ang katapusang pasalig sa repositoryo labaw pa sa usa ka tuig ang milabay. Gibiyaan ang pagpalambo sa operator: ang pinakabag-o nga bersyon sa Kubernetes nga gitaho nga gisuportahan mao ang 1.9.

4. Cassandra-operator ni Rook

  • GitHub
  • Andam: Alpha
  • Lisensya: Apache 2.0
  • Gipatuman sa: Golang

Usa ka operator kansang kalamboan dili paspas nga pag-uswag sama sa among gusto. Kini adunay usa ka maayo nga gihunahuna nga istruktura sa CRD alang sa pagdumala sa cluster, nagsulbad sa problema sa pag-ila sa mga node gamit ang Serbisyo nga adunay ClusterIP (sama nga "hack") ... apan kana ang tanan sa karon. Sa pagkakaron wala'y pag-monitor o pag-backup sa gawas sa kahon (sa dalan, kami alang sa pag-monitor mikuha niini sa among kaugalingon). Usa ka makapaikag nga punto mao nga mahimo usab nimo i-deploy ang ScyllaDB gamit kini nga operator.

NB: Gigamit namo kini nga operator nga adunay ginagmay nga mga kausaban sa usa sa among mga proyekto. Walay problema nga namatikdan sa trabaho sa operator sa tibuok panahon sa operasyon (~4 ka bulan nga operasyon).

5. CassKop gikan sa Orange

  • GitHub
  • Andam: Alpha
  • Lisensya: Apache 2.0
  • Gipatuman sa: Golang

Ang pinakabata nga operator sa listahan: ang unang commit gihimo niadtong Mayo 23, 2019. Naa na karon sa arsenal niini ang daghang mga bahin gikan sa among lista, daghang mga detalye nga makit-an sa repositoryo sa proyekto. Ang operator gitukod base sa sikat nga operator-sdk. Nagsuporta sa pagmonitor sa gawas sa kahon. Ang nag-unang kalainan gikan sa ubang mga operator mao ang paggamit CassKop plugin, gipatuman sa Python ug gigamit alang sa komunikasyon tali sa Cassandra nodes.

kaplag

Ang gidaghanon sa mga pamaagi ug posible nga mga kapilian sa pag-port ni Cassandra sa Kubernetes nagsulti alang sa iyang kaugalingon: ang hilisgutan gipangayo.

Niini nga yugto, mahimo nimong sulayan ang bisan unsa sa ibabaw sa imong kaugalingon nga peligro ug peligro: wala’y usa sa mga nag-develop nga naggarantiya sa 100% nga operasyon sa ilang solusyon sa usa ka palibot sa produksiyon. Apan na, daghang mga produkto tan-awon nga nagsaad sa pagsulay sa paggamit sa development bangko.

Sa akong hunahuna sa umaabot kini nga babaye sa barko mahimong magamit!

PS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment