Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо

Мо мунтазам бо пойгоҳи додаҳои Apache Cassandra ва зарурати кор кардани он дар дохили инфрасохтори Кубернетес дучор мешавем. Дар ин мавод, мо диди худро дар бораи қадамҳои зарурӣ, меъёрҳо ва роҳҳои ҳалли мавҷуда (аз ҷумла шарҳи операторҳо) барои интиқоли Кассандра ба K8s мубодила хоҳем кард.

"Ҳар кӣ занро идора карда метавонад, давлатро низ идора карда метавонад"

Кассандра кист? Ин як системаи нигаҳдории тақсимшуда мебошад, ки барои идоракунии ҳаҷми калони маълумот ҳангоми таъмини дастрасии баланд бидуни як нуқтаи нокомӣ пешбинӣ шудааст. Лоиҳа ба муқаддимаи тӯлонӣ ниёз надорад, бинобар ин ман танҳо хусусиятҳои асосии Кассандраро медиҳам, ки дар заминаи мақолаи мушаххас мувофиқ хоҳанд буд:

  • Кассандра дар Java навишта шудааст.
  • Топологияи Кассандра якчанд сатҳҳоро дар бар мегирад:
    • Гиреҳ - як намунаи ҷойгиршудаи Кассандра;
    • Rack як гурӯҳи мисолҳои Кассандра мебошад, ки бо баъзе хусусиятҳо муттаҳид шудаанд, ки дар як маркази додаҳо ҷойгиранд;
    • Маркази додаҳо - маҷмӯи ҳамаи гурӯҳҳои намунаҳои Кассандра, ки дар як маркази додаҳо ҷойгиранд;
    • Кластер маҷмӯи ҳамаи марказҳои додаҳо мебошад.
  • Кассандра барои муайян кардани гиреҳ суроғаи IP-ро истифода мебарад.
  • Барои тезонидани амалиёти навиштан ва хондан, Кассандра баъзе маълумотро дар хотираи оперативӣ нигоҳ медорад.

Ҳоло - ба ҳаракати воқеии эҳтимолӣ ба Кубернетес.

Рӯйхати санҷиш барои интиқол

Дар бораи муҳоҷирати Кассандра ба Кубернетес сухан ронда, мо умедворем, ки бо ҳаракат он идора кардан қулайтар мешавад. Барои ин чй лозим мешавад, ба ин чй ёрй мерасонад?

1. Нигоҳдории маълумот

Тавре ки аллакай равшан карда шуд, Cassanda як қисми маълумотро дар RAM нигоҳ медорад - дар Ҷадвали хотиравӣ. Аммо як қисми дигари маълумоте вуҷуд дорад, ки дар диск захира карда мешавад - дар форма SSTable. Ба ин маълумот объект илова карда мешавад Сабти ном — сабти тамоми муомилот, ки дар диск низ сабт карда мешаванд.

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Диаграммаи транзаксияро дар Кассандра нависед

Дар Kubernetes, мо метавонем PersistentVolume-ро барои нигоҳ доштани маълумот истифода барем. Ба шарофати механизмҳои исботшуда, кор бо маълумот дар Кубернетес сол то сол осонтар мешавад.

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Мо ба ҳар як pod Cassandra Volume Persistent-и худро ҷудо мекунем

Бояд қайд кард, ки худи Кассандра такрори маълумотро дар назар дорад ва механизмҳои дарунсохтро барои ин пешниҳод мекунад. Аз ин рӯ, агар шумо кластери Кассандраро аз шумораи зиёди гиреҳҳо сохта истода бошед, пас барои нигоҳдории маълумот системаҳои тақсимшуда ба монанди Ceph ё GlusterFS лозим нест. Дар ин ҳолат, бо истифода аз нигоҳ доштани маълумот дар диски ҳост мантиқӣ мебуд дискҳои доимии маҳаллӣ ё васлкунӣ hostPath.

Саволи дигар ин аст, ки оё шумо хоҳед, ки барои таҳиягарон барои ҳар як шохаи хусусият муҳити алоҳида эҷод кунед. Дар ин ҳолат, муносибати дуруст ин баланд бардоштани як гиреҳи Кассандра ва нигоҳ доштани маълумот дар анбори тақсимшуда, яъне. Ceph ва GlusterFS номбаршуда имконоти шумо хоҳанд буд. Он гоҳ таҳиякунанда итминон хоҳад дошт, ки ҳатто агар яке аз гиреҳҳои кластери Кубернтес гум шавад, вай маълумоти санҷиширо гум намекунад.

2. Мониторинг

Интихоби амалан бидуни баҳс барои татбиқи мониторинг дар Кубернетес Прометей мебошад (мо дар ин бора муфассал сухан ронда будем гузориши марбут). Кассандра бо содиркунандагони метрика барои Prometheus чӣ кор мекунад? Ва боз чӣ муҳимтар аст, бо панелҳои мувофиқ барои Grafana?

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Намунаи пайдоиши графикҳо дар Grafana барои Кассандра

Танҳо ду содиркунанда вуҷуд дорад: jmx_exporter и cassandra_exporter.

Мо аввалинро барои худ интихоб кардем, зеро:

  1. JMX Exporter афзоиш ва рушд мекунад, дар ҳоле ки Кассандра Экспортер натавонист дастгирии кофии ҷомеаро ба даст орад. Cassandra Exporter ҳоло ҳам аксари версияҳои Кассандраро дастгирӣ намекунад.
  2. Шумо метавонед онро ҳамчун javaagent тавассути илова кардани парчам иҷро кунед -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Яке барои ӯ ҳаст панели мувофиқ, ки бо Cassandra Exporter номувофиқ аст.

3. Интихоби ибтидоии Kubernetes

Мувофиқи сохтори дар боло зикршудаи кластери Кассандра, биёед кӯшиш кунем, ки ҳама чизеро, ки дар он тавсиф шудааст, ба истилоҳоти Кубернетес тарҷума кунем:

  • Гиреҳи Кассандра → Под
  • Кассандра Рак → StatefulSet
  • Cassandra Datacenter → ҳавзи StatefulSets
  • Кассандра кластери → ???

Маълум мешавад, ки як ҷузъи иловагӣ барои идора кардани тамоми кластери Кассандра якбора намерасад. Аммо агар чизе вуҷуд надошта бошад, мо метавонем онро эҷод кунем! Кубернетес механизми муайян кардани захираҳои худро барои ин мақсад дорад - Таърифҳои захираҳои фармоишӣ.

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Эълон кардани захираҳои иловагӣ барои гузоришҳо ва огоҳиҳо

Аммо худи захираи фармоишӣ чизеро надорад: дар ниҳоят, онро талаб мекунад назоратчй. Шояд шумо ба кӯмак ниёз доред Оператори Kubernetes...

4. Муайян кардани қуттиҳо

Дар параграфи боло, мо розӣ шудем, ки як гиреҳи Кассандра дар Кубернетес ба як поддон баробар мешавад. Аммо суроғаҳои IP-и поддонҳо ҳар дафъа гуногун хоҳанд буд. Ва муайянкунии гиреҳ дар Кассандра аз рӯи суроғаи IP сурат мегирад... Маълум мешавад, ки пас аз ҳар хориҷ кардани подк кластери Кассандра гиреҳи нав илова мекунад.

Роҳи баромадан вуҷуд дорад, на танҳо як:

  1. Мо метавонем сабтҳоро аз рӯи идентификаторҳои мизбон (UUIDҳо, ки намунаҳои Кассандраро ба таври беназир муайян мекунанд) ё суроғаҳои IP нигоҳ дорем ва ҳамаашро дар баъзе сохторҳо/ҷадвалҳо нигоҳ дорем. Ин усул ду камбудии асосӣ дорад:
    • Хавфи ҳолати мусобиқа рух медиҳад, агар ду гиреҳ якбора афтад. Пас аз афзоиш, гиреҳҳои Кассандра ҳамзамон суроғаи IP-ро аз ҷадвал дархост мекунанд ва барои ҳамон як манбаъ рақобат мекунанд.
    • Агар гиреҳи Кассандра маълумоти худро гум кунад, мо дигар онро муайян карда наметавонем.
  2. Ҳалли дуюм мисли як хаки хурд ба назар мерасад, аммо бо вуҷуди ин: мо метавонем хидматеро бо ClusterIP барои ҳар як гиреҳи Кассандра эҷод кунем. Мушкилот бо татбиқи ин:
    • Агар дар кластери Кассандра гиреҳҳои зиёде мавҷуд бошанд, мо бояд хидматҳои зиёде эҷод кунем.
    • Хусусияти ClusterIP тавассути iptables амалӣ карда мешавад. Агар кластери Кассандра гиреҳҳои зиёде (1000... ё ҳатто 100?) дошта бошад, ин метавонад мушкилот гардад. Гарчанде мувозинат дар асоси IPVS ин масъаларо ҳал карда метавонад.
  3. Ҳалли сеюм ин аст, ки шабакаи гиреҳҳо барои гиреҳҳои Кассандра ба ҷои шабакаи махсусгардонидашудаи pods тавассути фаъол кардани танзимот hostNetwork: true. Ин усул маҳдудиятҳои муайянро ҷорӣ мекунад:
    • Барои иваз кардани воҳидҳо. Зарур аст, ки гиреҳи нав бояд ҳамон суроғаи IP-и пешина дошта бошад (дар абрҳо ба монанди AWS, GCP ин корро кардан қариб ғайриимкон аст);
    • Истифодаи шабакаи гиреҳҳои кластерӣ, мо ба рақобат барои захираҳои шабака шурӯъ мекунем. Аз ин рӯ, дар як гиреҳи кластер ҷойгир кардани зиёда аз як поддон бо Кассандра мушкил хоҳад буд.

5. Нусхаҳои эҳтиётӣ

Мо мехоҳем версияи пурраи маълумоти як гиреҳи Кассандраро дар ҷадвал захира кунем. Kubernetes бо истифода аз хусусияти қулай таъмин менамояд CronJob, аммо дар ин чо худи Кассандра ба чарххои мо сухан мегузо-рад.

Хотиррасон мекунам, ки Кассандра баъзе маълумотҳоро дар хотира нигоҳ медорад. Барои нусхабардории пурра, ба шумо маълумот аз хотира лозим аст (Ҷадвалҳои хотиравӣ) ба диск гузаред (SSTables). Дар ин лаҳза, гиреҳи Кассандра қабули пайвастҳоро қатъ мекунад ва аз кластер комилан хомӯш мешавад.

Пас аз ин, нусхабардорӣ хориҷ карда мешавад (сӯзишворӣ) ва схема захира карда мешавад (фазои клавиатура). Ва он гоҳ маълум мешавад, ки танҳо нусхабардорӣ ба мо чизе намедиҳад: мо бояд идентификаторҳои маълумотро захира кунем, ки барои онҳо гиреҳи Кассандра масъул буд - ин аломатҳои махсус мебошанд.

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Тақсимоти токенҳо барои муайян кардани кадом маълумот гиреҳҳои Кассандра масъуланд

Намунаи скрипт барои гирифтани нусхаи эҳтиётии Кассандра аз Google дар Кубернетес дар инҷо пайдо мешавад ин пайванд. Ягона нуктае, ки скрипт ба инобат намегирад, ин барқароркунии маълумот ба гиреҳ пеш аз гирифтани акс аст. Яъне, нусхабардорӣ на барои ҳолати ҷорӣ, балки барои ҳолати каме пештар иҷро карда мешавад. Аммо ин кӯмак мекунад, ки гиреҳ аз кор набарояд, ки хеле мантиқӣ ба назар мерасад.

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

Намунаи скрипти bash барои гирифтани нусхабардорӣ аз як гиреҳи Кассандра

Қарорҳои омода барои Кассандра дар Кубернетес

Ҳоло барои ҷойгиркунии Кассандра дар Кубернетес чӣ истифода мешавад ва кадоме аз инҳо ба талаботи додашуда мувофиқтар аст?

1. Ҳаллиҳо дар асоси диаграммаҳои StatefulSet ё Helm

Истифодаи функсияҳои асосии StatefulSets барои идора кардани кластери Кассандра як варианти хуб аст. Бо истифода аз диаграммаҳои Helm ва Go, шумо метавонед ба корбар интерфейси чандирро барои ҷойгиркунии Кассандра пешниҳод кунед.

Ин одатан хуб кор мекунад... то он даме, ки ягон чизи ғайричашмдошт рӯй диҳад, масалан, нокомии гиреҳ. Асбобҳои стандартии Kubernetes наметавонанд ҳамаи хусусиятҳои дар боло тавсифшударо ба назар гиранд. Илова бар ин, ин равиш хеле маҳдуд аст, ки то чӣ андоза онро барои истифодаи мураккабтар васеъ кардан мумкин аст: иваз кардани гиреҳ, нусхабардорӣ, барқарорсозӣ, мониторинг ва ғайра.

Намояндагон:

Ҳарду диаграммаҳо баробар хубанд, аммо ба мушкилоти дар боло тавсифшуда вобастаанд.

2. Қарорҳо дар асоси Operator Kubernetes

Чунин вариантҳо ҷолибтаранд, зеро онҳо барои идоракунии кластер имкониятҳои васеъ фароҳам меоранд. Барои тарҳрезии оператори Cassandra, мисли ҳама гуна пойгоҳи додаҳо, намунаи хуб ба Sidecar <-> Controller <-> CRD монанд аст:

Муҳоҷирати Кассандра ба Кубернетес: хусусиятҳо ва ҳалли онҳо
Нақшаи идоракунии гиреҳ дар оператори хуб тарҳрезишудаи Кассандра

Биёед ба операторони мавҷуда назар андозем.

1. Кассандра-оператор аз instaclustr

  • GitHub
  • Тайёрӣ: Алфа
  • Литсензия: Apache 2.0
  • Дар амал татбиқ карда мешавад: Java

Ин воқеан як лоиҳаи хеле умедбахш ва фаъолона рушдёбанда аз ширкатест, ки ҷойгиркунии идорашавандаи Кассандраро пешниҳод мекунад. Он, тавре ки дар боло тавсиф шудааст, як контейнери канориро истифода мебарад, ки фармонҳоро тавассути HTTP қабул мекунад. Он дар Java навишта шудааст, ки баъзан функсияҳои пешрафтаи китобхонаи мизоҷро надорад. Инчунин, оператор Racks гуногунро барои як маркази додаҳо дастгирӣ намекунад.

Аммо оператор чунин бартариҳо дорад, ба монанди дастгирии мониторинг, идоракунии кластерҳои сатҳи баланд бо истифода аз CRD ва ҳатто ҳуҷҷатгузорӣ барои нусхабардорӣ.

2. Навигатор аз Jetstack

  • GitHub
  • Тайёрӣ: Алфа
  • Литсензия: Apache 2.0
  • Иҷро шудааст: Голанг

Изҳорот барои ҷойгиркунии DB-as-a-Service тарҳрезӣ шудааст. Дар айни замон ду пойгоҳи додаҳоро дастгирӣ мекунад: Elasticsearch ва Cassandra. Он дорои чунин қарорҳои ҷолиб, ба монанди назорати дастрасии пойгоҳи додаҳо тавассути RBAC (барои ин он навигатор-аписервери алоҳидаи худро дорад). Лоиҳаи ҷолибе, ки бояд бодиққат аз назар гузаронад, аммо ӯҳдадории охирин якуним сол пеш гирифта шуда буд, ки потенсиали онро ба таври возеҳ коҳиш медиҳад.

3. Кассандра-оператори vgkowski

  • GitHub
  • Тайёрӣ: Алфа
  • Литсензия: Apache 2.0
  • Иҷро шудааст: Голанг

Онҳо инро "ҷиддӣ" надонистанд, зеро охирин ӯҳдадорӣ ба анбор беш аз як сол пеш буд. Рушди оператор даст кашида шудааст: версияи охирини Kubernetes, ки гузориш дода шудааст, 1.9 мебошад.

4. Кассандра-оператор аз ҷониби Рук

  • GitHub
  • Тайёрӣ: Алфа
  • Литсензия: Apache 2.0
  • Иҷро шудааст: Голанг

Операторе, ки рушдаш он қадар зуд пеш намеравад, ки мо мехоҳем. Он дорои сохтори хуб андешидашудаи CRD барои идоракунии кластер, мушкилоти муайян кардани гиреҳҳо бо истифода аз Service with ClusterIP (ҳамон "хак") ҳал мекунад... аммо ин ҳама ҳоло аст. Дар айни замон ягон мониторинг ё нусхаҳои эҳтиётӣ аз қуттӣ вуҷуд надорад (дар омади гап, мо барои назорат ҳастем худамон гирифтем). Нуктаи ҷолиб он аст, ки шумо инчунин метавонед ScyllaDB-ро бо истифода аз ин оператор ҷойгир кунед.

Эзоҳ: Мо ин операторро бо тағйироти хурд дар яке аз лоиҳаҳои худ истифода бурдем. Дар тамоми давраи кор (~4 моҳи кор) дар кори оператор ягон мушкилот мушоҳида карда нашуд.

5. CassKop аз Orange

  • GitHub
  • Тайёрӣ: Алфа
  • Литсензия: Apache 2.0
  • Иҷро шудааст: Голанг

Ҷавонтарин оператор дар рӯйхат: аввалин ӯҳдадорӣ 23 майи соли 2019 дода шудааст. Ҳоло он дар арсенали худ шумораи зиёди хусусиятҳоро аз рӯйхати мо дорад, ки тафсилоти бештари онҳоро дар анбори лоиҳа пайдо кардан мумкин аст. Оператор дар асоси оператор-sdk маъмул сохта шудааст. Мониторингро аз қуттӣ дастгирӣ мекунад. Фарқи асосии аз дигар операторҳо истифода аст Васлкунаки CassKop, дар Python амалӣ карда шудааст ва барои иртибот байни гиреҳҳои Кассандра истифода мешавад.

натиҷаҳои

Миқдори равишҳо ва имконоти эҳтимолии интиқоли Кассандра ба Кубернетес барои худ шаҳодат медиҳад: мавзӯъ талабот аст.

Дар ин марҳила, шумо метавонед яке аз чизҳои дар боло зикршударо бо хатар ва хатари худ санҷед: ҳеҷ яке аз таҳиягарон 100% кори ҳалли худро дар муҳити истеҳсолӣ кафолат намедиҳад. Аммо ҳоло бисёр маҳсулот умедбахш ба назар мерасанд, ки онҳоро дар курсиҳои рушд истифода баранд.

Ман фикр мекунам, ки дар оянда ин зан дар киштӣ муфид хоҳад буд!

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ