Миграција Цассандре на Кубернетес: карактеристике и решења

Миграција Цассандре на Кубернетес: карактеристике и решења

Редовно се сусрећемо са базом података Апацхе Цассандра и потребом да се њоме управља у оквиру инфраструктуре засноване на Кубернетес-у. У овом материјалу ћемо поделити нашу визију неопходних корака, критеријума и постојећих решења (укључујући преглед оператера) за миграцију Цассандре на К8с.

„Ко може да влада женом може да влада и државом“

Ко је Касандра? То је дистрибуирани систем складиштења дизајниран да управља великим количинама података уз обезбеђивање високе доступности без једне тачке квара. Пројекат једва да треба дуго представљање, па ћу дати само главне карактеристике Касандре које ће бити релевантне у контексту конкретног чланка:

  • Касандра је написана на Јави.
  • Цассандра топологија укључује неколико нивоа:
    • Чвор - једна распоређена Цассандра инстанца;
    • Рацк је група Цассандра инстанци, уједињених неком карактеристиком, која се налази у истом центру података;
    • Датацентер - колекција свих група Цассандра инстанци смештених у једном дата центру;
    • Кластер је скуп свих центара података.
  • Цассандра користи ИП адресу да идентификује чвор.
  • Да би убрзала операције писања и читања, Цассандра складишти неке податке у РАМ-у.

Сада - до стварног потенцијалног преласка на Кубернетес.

Контролна листа за трансфер

Говорећи о миграцији Цассандре у Кубернетес, надамо се да ће са потезом постати погодније за управљање. Шта ће бити потребно за ово, шта ће помоћи у томе?

1. Складиштење података

Као што је већ разјашњено, Касанда део података чува у РАМ-у – у Мемтабле. Али постоји још један део података који се чува на диску - у форми ССТабле. Овим подацима се додаје ентитет Цоммит Лог — записи свих трансакција, који се такође чувају на диску.

Миграција Цассандре на Кубернетес: карактеристике и решења
Напишите дијаграм трансакције у Цассандра

У Кубернетес-у можемо да користимо ПерсистентВолуме за складиштење података. Захваљујући провереним механизмима, рад са подацима у Кубернетесу сваке године постаје све лакши.

Миграција Цассандре на Кубернетес: карактеристике и решења
Свакој капсули са Касандром ћемо доделити сопствени Персистент Волуме

Важно је напоменути да сама Касандра подразумева репликацију података, нудећи уграђене механизме за то. Стога, ако правите Цассандра кластер од великог броја чворова, онда нема потребе да користите дистрибуиране системе као што су Цепх или ГлустерФС за складиштење података. У овом случају, било би логично да се подаци складиште на хост диску користећи локални трајни дискови или монтажа hostPath.

Друго питање је да ли желите да креирате посебно окружење за програмере за сваку грану карактеристика. У овом случају, исправан приступ би био подизање једног Цассандра чвора и складиштење података у дистрибуирано складиште, тј. поменути Цепх и ГлустерФС ће бити ваше опције. Тада ће програмер бити сигуран да неће изгубити тестне податке чак и ако се изгуби један од чворова Кубернтес кластера.

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

Готово неоспоран избор за имплементацију надгледања у Кубернетес-у је Прометхеус (о томе смо детаљно разговарали у повезани извештај). Како је Касандра са извозницима метрика за Прометеј? И, што је још важније, са одговарајућим контролним таблама за Графану?

Миграција Цассандре на Кубернетес: карактеристике и решења
Пример појављивања графова у Графани за Касандру

Постоје само два извозника: јмк_екпортер и цассандра_екпортер.

За себе смо изабрали прву јер:

  1. ЈМКС Екпортер расте и развија се, док Цассандра Екпортер није успео да добије довољну подршку заједнице. Цассандра Екпортер још увек не подржава већину верзија Цассандре.
  2. Можете га покренути као јаваагент додавањем заставице -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. Има један за њега адекватна контролна табла, што је некомпатибилно са Цассандра Екпортер.

3. Избор Кубернетес примитива

Према горњој структури кластера Цассандра, покушајмо да преведемо све што је тамо описано у Кубернетес терминологију:

  • Цассандра Ноде → Под
  • Цассандра Рацк → СтатефулСет
  • Цассандра Датацентер → поол из СтатефулСетс
  • Цассандра Цлустер → ???

Испоставило се да недостаје неки додатни ентитет за управљање целим кластером Цассандра одједном. Али ако нешто не постоји, ми то можемо створити! Кубернетес има механизам за дефинисање сопствених ресурса за ову сврху - Прилагођене дефиниције ресурса.

Миграција Цассандре на Кубернетес: карактеристике и решења
Декларисање додатних ресурса за евиденције и упозорења

Али прилагођени ресурс сам по себи не значи ништа: на крају крајева, он захтева контролер. Можда ћете морати да тражите помоћ Кубернетес оператер...

4. Идентификација махуна

У горњем пасусу договорили смо се да ће један Цассандра чвор бити једнак једном поду у Кубернетесу. Али ИП адресе модула ће сваки пут бити различите. А идентификација чвора у Цассандри се заснива на ИП адреси... Испада да ће након сваког уклањања под-а Цассандра кластер додати нови чвор.

Постоји излаз, и то не само један:

  1. Можемо да водимо евиденцију према идентификаторима хоста (УУИД-ови који јединствено идентификују Цассандра инстанце) или по ИП адресама и све то складиштимо у неким структурама/табелама. Метода има два главна недостатка:
    • Ризик да дође до стања трке ако два чвора падну одједном. Након пораста, Цассандра чворови ће истовремено тражити ИП адресу из табеле и такмичити се за исти ресурс.
    • Ако је Цассандра чвор изгубио своје податке, више нећемо моћи да га идентификујемо.
  2. Друго решење изгледа као мали хак, али ипак: можемо да креирамо услугу са ЦлустерИП-ом за сваки Цассандра чвор. Проблеми са овом имплементацијом:
    • Ако постоји много чворова у Цассандра кластеру, мораћемо да креирамо много услуга.
    • Функција ЦлустерИП се имплементира преко иптаблес. Ово може постати проблем ако Цассандра кластер има много (1000... или чак 100?) чворова. Мада балансирање засновано на ИПВС може решити овај проблем.
  3. Треће решење је коришћење мреже чворова за Цассандра чворове уместо наменске мреже подова омогућавањем подешавања hostNetwork: true. Овај метод намеће одређена ограничења:
    • За замену јединица. Неопходно је да нови чвор мора да има исту ИП адресу као претходни (у облацима као што су АВС, ГЦП то је скоро немогуће урадити);
    • Користећи мрежу чворова кластера, почињемо да се такмичимо за мрежне ресурсе. Стога ће постављање више од једне махуне са Цассандром на један чвор кластера бити проблематично.

5. Резервне копије

Желимо да сачувамо пуну верзију података једног Цассандра чвора на распореду. Кубернетес пружа згодну функцију за коришћење ЦронЈоб, али овде нам сама Касандра ставља жбицу у точкове.

Да вас подсетим да Касандра неке податке чува у меморији. Да бисте направили потпуну резервну копију, потребни су вам подаци из меморије (Мемтаблес) премести на диск (ССТаблес). У овом тренутку Цассандра чвор престаје да прихвата везе, потпуно се искључујући из кластера.

Након тога, резервна копија се уклања (снимак) и шема је сачувана (кеиспаце). А онда се испоставило да нам само резервна копија не даје ништа: морамо да сачувамо идентификаторе података за које је одговоран Цассандра чвор - то су посебни токени.

Миграција Цассандре на Кубернетес: карактеристике и решења
Дистрибуција токена за идентификацију за које су податке Цассандра чворови одговорни

Пример скрипте за преузимање резервне копије Цассандре од Гоогле-а у Кубернетес-у можете пронаћи на овај линк. Једина ствар коју скрипта не узима у обзир је ресетовање података на чвор пре снимања снимка. То јест, резервна копија се врши не за тренутно стање, већ за стање нешто раније. Али ово помаже да се чвор не повуче из функције, што изгледа веома логично.

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

Пример басх скрипте за прављење резервне копије са једног Цассандра чвора

Готова решења за Цассандру у Кубернетесу

Шта се тренутно користи за постављање Цассандре у Кубернетес и шта од овога најбоље одговара датим захтевима?

1. Решења заснована на СтатефулСет или Хелм графиконима

Коришћење основних функција СтатефулСетс за покретање Цассандра кластера је добра опција. Користећи Хелм цхарт и Го шаблоне, можете да обезбедите кориснику флексибилан интерфејс за примену Цассандре.

Ово обично добро функционише... све док се не догоди нешто неочекивано, као што је квар чвора. Стандардни Кубернетес алати једноставно не могу узети у обзир све горе описане карактеристике. Поред тога, овај приступ је веома ограничен у томе колико се може проширити за сложеније употребе: замену чворова, прављење резервних копија, опоравак, праћење итд.

Представници:

Обе карте су подједнако добре, али су подложне горе описаним проблемима.

2. Решења заснована на Кубернетес Оператору

Такве опције су интересантније јер пружају широке могућности за управљање кластером. За дизајнирање Цассандра оператора, као и било које друге базе података, добар образац изгледа као Сидецар <-> Цонтроллер <-> ЦРД:

Миграција Цассандре на Кубернетес: карактеристике и решења
Шема управљања чворовима у добро дизајнираном Цассандра оператеру

Погледајмо постојеће оператере.

1. Цассандра-оператер из инстацлустр

  • ГитХуб
  • Спремност: Алфа
  • Лиценца: Апацһе 2.0
  • Имплементирано у: Јава

Ово је заиста веома обећавајући пројекат који се активно развија из компаније која нуди управљане имплементације Цассандре. Као што је горе описано, користи бочни контејнер који прихвата команде преко ХТТП-а. Написано у Јави, понекад му недостаје напреднија функционалност библиотеке за покретање клијента. Такође, оператер не подржава различите полице за један Датацентер.

Али оператер има такве предности као што су подршка за праћење, управљање кластером на високом нивоу помоћу ЦРД-а, па чак и документација за прављење резервних копија.

2. Навигатор из Јетстацк-а

  • ГитХуб
  • Спремност: Алфа
  • Лиценца: Апацһе 2.0
  • Имплементирано у: Голанг

Изјава дизајнирана за примену ДБ-ас-а-Сервице. Тренутно подржава две базе података: Еластицсеарцх и Цассандра. Има тако занимљива решења као што је контрола приступа бази података преко РБАЦ-а (за то има свој посебан навигатор-аписервер). Занимљив пројекат који би вредео детаљније погледати, али последња обавеза је направљена пре годину и по дана, што очигледно умањује његов потенцијал.

3. Касандра-оператер од вгковског

  • ГитХуб
  • Спремност: Алфа
  • Лиценца: Апацһе 2.0
  • Имплементирано у: Голанг

Нису то сматрали „озбиљно“, пошто је последње урезивање у спремиште било пре више од годину дана. Развој оператера је напуштен: најновија верзија Кубернетеса пријављена као подржана је 1.9.

4. Касандра-оператер од Роока

  • ГитХуб
  • Спремност: Алфа
  • Лиценца: Апацһе 2.0
  • Имплементирано у: Голанг

Оператер чији развој не напредује тако брзо колико бисмо желели. Има добро осмишљену ЦРД структуру за управљање кластерима, решава проблем идентификације чворова користећи Сервице витх ЦлустерИП (исти „хак“)... али то је све за сада. Тренутно нема надгледања или прављења резервних копија (успут, ми смо за надгледање сами узели). Занимљива ствар је да можете да примените и СциллаДБ користећи овај оператор.

Напомена: Користили смо овај оператер са мањим модификацијама у једном од наших пројеката. Током целог периода рада (~4 месеца рада) нису примећени проблеми у раду оператера.

5. ЦассКоп из Оранге

  • ГитХуб
  • Спремност: Алфа
  • Лиценца: Апацһе 2.0
  • Имплементирано у: Голанг

Најмлађи оператер на листи: прва обавеза је извршена 23. Већ сада има у свом арсеналу велики број функција са наше листе, више детаља о којима се може наћи у репозиторијуму пројекта. Оператор је изграђен на основу популарног оператора-сдк. Подржава надгледање из кутије. Главна разлика од других оператера је употреба ЦассКоп додатак, имплементиран у Питхон-у и коришћен за комуникацију између Цассандра чворова.

Налази

Број приступа и могућих опција за пренос Цассандре у Кубернетес говори сам за себе: тема је тражена.

У овој фази можете испробати било шта од горе наведеног на сопствену одговорност и ризик: нико од програмера не гарантује 100% рад свог решења у производном окружењу. Али већ сада многи производи изгледају обећавајуће да би покушали да их користе у развојним клупама.

Мислим да ће у будућности ова жена на броду добро доћи!

ПС

Прочитајте и на нашем блогу:

Извор: ввв.хабр.цом

Додај коментар