Мо мунтазам бо пойгоҳи додаҳои Apache Cassandra ва зарурати кор кардани он дар дохили инфрасохтори Кубернетес дучор мешавем. Дар ин мавод, мо диди худро дар бораи қадамҳои зарурӣ, меъёрҳо ва роҳҳои ҳалли мавҷуда (аз ҷумла шарҳи операторҳо) барои интиқоли Кассандра ба K8s мубодила хоҳем кард.
"Ҳар кӣ занро идора карда метавонад, давлатро низ идора карда метавонад"
Кассандра кист? Ин як системаи нигаҳдории тақсимшуда мебошад, ки барои идоракунии ҳаҷми калони маълумот ҳангоми таъмини дастрасии баланд бидуни як нуқтаи нокомӣ пешбинӣ шудааст. Лоиҳа ба муқаддимаи тӯлонӣ ниёз надорад, бинобар ин ман танҳо хусусиятҳои асосии Кассандраро медиҳам, ки дар заминаи мақолаи мушаххас мувофиқ хоҳанд буд:
- Кассандра дар Java навишта шудааст.
- Топологияи Кассандра якчанд сатҳҳоро дар бар мегирад:
- Гиреҳ - як намунаи ҷойгиршудаи Кассандра;
- Rack як гурӯҳи мисолҳои Кассандра мебошад, ки бо баъзе хусусиятҳо муттаҳид шудаанд, ки дар як маркази додаҳо ҷойгиранд;
- Маркази додаҳо - маҷмӯи ҳамаи гурӯҳҳои намунаҳои Кассандра, ки дар як маркази додаҳо ҷойгиранд;
- Кластер маҷмӯи ҳамаи марказҳои додаҳо мебошад.
- Кассандра барои муайян кардани гиреҳ суроғаи IP-ро истифода мебарад.
- Барои тезонидани амалиёти навиштан ва хондан, Кассандра баъзе маълумотро дар хотираи оперативӣ нигоҳ медорад.
Ҳоло - ба ҳаракати воқеии эҳтимолӣ ба Кубернетес.
Рӯйхати санҷиш барои интиқол
Дар бораи муҳоҷирати Кассандра ба Кубернетес сухан ронда, мо умедворем, ки бо ҳаракат он идора кардан қулайтар мешавад. Барои ин чй лозим мешавад, ба ин чй ёрй мерасонад?
1. Нигоҳдории маълумот
Тавре ки аллакай равшан карда шуд, Cassanda як қисми маълумотро дар RAM нигоҳ медорад - дар Ҷадвали хотиравӣ. Аммо як қисми дигари маълумоте вуҷуд дорад, ки дар диск захира карда мешавад - дар форма SSTable. Ба ин маълумот объект илова карда мешавад Сабти ном — сабти тамоми муомилот, ки дар диск низ сабт карда мешаванд.
Диаграммаи транзаксияро дар Кассандра нависед
Дар Kubernetes, мо метавонем PersistentVolume-ро барои нигоҳ доштани маълумот истифода барем. Ба шарофати механизмҳои исботшуда, кор бо маълумот дар Кубернетес сол то сол осонтар мешавад.
Мо ба ҳар як pod Cassandra Volume Persistent-и худро ҷудо мекунем
Бояд қайд кард, ки худи Кассандра такрори маълумотро дар назар дорад ва механизмҳои дарунсохтро барои ин пешниҳод мекунад. Аз ин рӯ, агар шумо кластери Кассандраро аз шумораи зиёди гиреҳҳо сохта истода бошед, пас барои нигоҳдории маълумот системаҳои тақсимшуда ба монанди Ceph ё GlusterFS лозим нест. Дар ин ҳолат, бо истифода аз нигоҳ доштани маълумот дар диски ҳост мантиқӣ мебуд hostPath
.
Саволи дигар ин аст, ки оё шумо хоҳед, ки барои таҳиягарон барои ҳар як шохаи хусусият муҳити алоҳида эҷод кунед. Дар ин ҳолат, муносибати дуруст ин баланд бардоштани як гиреҳи Кассандра ва нигоҳ доштани маълумот дар анбори тақсимшуда, яъне. Ceph ва GlusterFS номбаршуда имконоти шумо хоҳанд буд. Он гоҳ таҳиякунанда итминон хоҳад дошт, ки ҳатто агар яке аз гиреҳҳои кластери Кубернтес гум шавад, вай маълумоти санҷиширо гум намекунад.
2. Мониторинг
Интихоби амалан бидуни баҳс барои татбиқи мониторинг дар Кубернетес Прометей мебошад (мо дар ин бора муфассал сухан ронда будем
Намунаи пайдоиши графикҳо дар Grafana барои Кассандра
Танҳо ду содиркунанда вуҷуд дорад:
Мо аввалинро барои худ интихоб кардем, зеро:
- JMX Exporter афзоиш ва рушд мекунад, дар ҳоле ки Кассандра Экспортер натавонист дастгирии кофии ҷомеаро ба даст орад. Cassandra Exporter ҳоло ҳам аксари версияҳои Кассандраро дастгирӣ намекунад.
- Шумо метавонед онро ҳамчун javaagent тавассути илова кардани парчам иҷро кунед
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - Яке барои ӯ ҳаст
панели мувофиқ , ки бо Cassandra Exporter номувофиқ аст.
3. Интихоби ибтидоии Kubernetes
Мувофиқи сохтори дар боло зикршудаи кластери Кассандра, биёед кӯшиш кунем, ки ҳама чизеро, ки дар он тавсиф шудааст, ба истилоҳоти Кубернетес тарҷума кунем:
- Гиреҳи Кассандра → Под
- Кассандра Рак → StatefulSet
- Cassandra Datacenter → ҳавзи StatefulSets
- Кассандра кластери → ???
Маълум мешавад, ки як ҷузъи иловагӣ барои идора кардани тамоми кластери Кассандра якбора намерасад. Аммо агар чизе вуҷуд надошта бошад, мо метавонем онро эҷод кунем! Кубернетес механизми муайян кардани захираҳои худро барои ин мақсад дорад -
Эълон кардани захираҳои иловагӣ барои гузоришҳо ва огоҳиҳо
Аммо худи захираи фармоишӣ чизеро надорад: дар ниҳоят, онро талаб мекунад назоратчй. Шояд шумо ба кӯмак ниёз доред
4. Муайян кардани қуттиҳо
Дар параграфи боло, мо розӣ шудем, ки як гиреҳи Кассандра дар Кубернетес ба як поддон баробар мешавад. Аммо суроғаҳои IP-и поддонҳо ҳар дафъа гуногун хоҳанд буд. Ва муайянкунии гиреҳ дар Кассандра аз рӯи суроғаи IP сурат мегирад... Маълум мешавад, ки пас аз ҳар хориҷ кардани подк кластери Кассандра гиреҳи нав илова мекунад.
Роҳи баромадан вуҷуд дорад, на танҳо як:
- Мо метавонем сабтҳоро аз рӯи идентификаторҳои мизбон (UUIDҳо, ки намунаҳои Кассандраро ба таври беназир муайян мекунанд) ё суроғаҳои IP нигоҳ дорем ва ҳамаашро дар баъзе сохторҳо/ҷадвалҳо нигоҳ дорем. Ин усул ду камбудии асосӣ дорад:
- Хавфи ҳолати мусобиқа рух медиҳад, агар ду гиреҳ якбора афтад. Пас аз афзоиш, гиреҳҳои Кассандра ҳамзамон суроғаи IP-ро аз ҷадвал дархост мекунанд ва барои ҳамон як манбаъ рақобат мекунанд.
- Агар гиреҳи Кассандра маълумоти худро гум кунад, мо дигар онро муайян карда наметавонем.
- Ҳалли дуюм мисли як хаки хурд ба назар мерасад, аммо бо вуҷуди ин: мо метавонем хидматеро бо ClusterIP барои ҳар як гиреҳи Кассандра эҷод кунем. Мушкилот бо татбиқи ин:
- Агар дар кластери Кассандра гиреҳҳои зиёде мавҷуд бошанд, мо бояд хидматҳои зиёде эҷод кунем.
- Хусусияти ClusterIP тавассути iptables амалӣ карда мешавад. Агар кластери Кассандра гиреҳҳои зиёде (1000... ё ҳатто 100?) дошта бошад, ин метавонад мушкилот гардад. Гарчанде
мувозинат дар асоси IPVS ин масъаларо ҳал карда метавонад.
- Ҳалли сеюм ин аст, ки шабакаи гиреҳҳо барои гиреҳҳои Кассандра ба ҷои шабакаи махсусгардонидашудаи pods тавассути фаъол кардани танзимот
hostNetwork: true
. Ин усул маҳдудиятҳои муайянро ҷорӣ мекунад:- Барои иваз кардани воҳидҳо. Зарур аст, ки гиреҳи нав бояд ҳамон суроғаи IP-и пешина дошта бошад (дар абрҳо ба монанди AWS, GCP ин корро кардан қариб ғайриимкон аст);
- Истифодаи шабакаи гиреҳҳои кластерӣ, мо ба рақобат барои захираҳои шабака шурӯъ мекунем. Аз ин рӯ, дар як гиреҳи кластер ҷойгир кардани зиёда аз як поддон бо Кассандра мушкил хоҳад буд.
5. Нусхаҳои эҳтиётӣ
Мо мехоҳем версияи пурраи маълумоти як гиреҳи Кассандраро дар ҷадвал захира кунем. Kubernetes бо истифода аз хусусияти қулай таъмин менамояд
Хотиррасон мекунам, ки Кассандра баъзе маълумотҳоро дар хотира нигоҳ медорад. Барои нусхабардории пурра, ба шумо маълумот аз хотира лозим аст (Ҷадвалҳои хотиравӣ) ба диск гузаред (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 (ҳамон "хак") ҳал мекунад... аммо ин ҳама ҳоло аст. Дар айни замон ягон мониторинг ё нусхаҳои эҳтиётӣ аз қуттӣ вуҷуд надорад (дар омади гап, мо барои назорат ҳастем
Эзоҳ: Мо ин операторро бо тағйироти хурд дар яке аз лоиҳаҳои худ истифода бурдем. Дар тамоми давраи кор (~4 моҳи кор) дар кори оператор ягон мушкилот мушоҳида карда нашуд.
5. CassKop аз Orange
-
GitHub - Тайёрӣ: Алфа
- Литсензия: Apache 2.0
- Иҷро шудааст: Голанг
Ҷавонтарин оператор дар рӯйхат: аввалин ӯҳдадорӣ 23 майи соли 2019 дода шудааст. Ҳоло он дар арсенали худ шумораи зиёди хусусиятҳоро аз рӯйхати мо дорад, ки тафсилоти бештари онҳоро дар анбори лоиҳа пайдо кардан мумкин аст. Оператор дар асоси оператор-sdk маъмул сохта шудааст. Мониторингро аз қуттӣ дастгирӣ мекунад. Фарқи асосии аз дигар операторҳо истифода аст
натиҷаҳои
Миқдори равишҳо ва имконоти эҳтимолии интиқоли Кассандра ба Кубернетес барои худ шаҳодат медиҳад: мавзӯъ талабот аст.
Дар ин марҳила, шумо метавонед яке аз чизҳои дар боло зикршударо бо хатар ва хатари худ санҷед: ҳеҷ яке аз таҳиягарон 100% кори ҳалли худро дар муҳити истеҳсолӣ кафолат намедиҳад. Аммо ҳоло бисёр маҳсулот умедбахш ба назар мерасанд, ки онҳоро дар курсиҳои рушд истифода баранд.
Ман фикр мекунам, ки дар оянда ин зан дар киштӣ муфид хоҳад буд!
PS
Инчунин дар блоги мо хонед:
- «
Муҳоҷирати бефосилаи MongoDB ба Kubernetes »; - «
Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes »; - «
Пойгоҳи додаҳо ва Кубернетҳо (баррасӣ ва гузориши видеоӣ) »; - «
Маслиҳатҳо ва ҳилаҳои K8s: суръат бахшидан ба боркунӣ барои пойгоҳи додаҳои калон ".
Манбаъ: will.com