Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Dan l-artiklu jkompli tagħna materjal reċenti dwar il-migrazzjoni RabbitMQ u ddedikata għal MongoDB. Peress li nżommu ħafna raggruppamenti Kubernetes u MongoDB, wasalna għall-ħtieġa naturali li nimigraw id-dejta minn installazzjoni għal oħra u nagħmluha mingħajr waqfien. Ix-xenarji ewlenin huma l-istess: iċ-ċaqliq ta' MongoDB minn server virtwali/hardware għal Kubernetes jew iċ-ċaqliq ta' MongoDB fi ħdan l-istess cluster ta' Kubernetes (minn namespace għal ieħor).

Ir-riċetta tagħna hija maħsuba għal każijiet fejn hemm cluster MongoDB antik (per eżempju, ta '3 nodi u li jinsab jew diġà f'K8s jew fuq servers eqdem) li magħhom tkun qed taħdem applikazzjoni ospitata f'Kubernetes:

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Kif se nittrasferixxu raggruppament bħal dan għal produzzjoni ġdida f'Kubernetes?

Теория

L-algoritmu tal-migrazzjoni ġenerali huwa simili għal dak deskritt fis-sitwazzjoni ma 'RabbitMQ.

Huwa importanti li wieħed jinnota li l-mossa teħtieġ li s-servers MongoDB u Kubernetes ikunu fuq l-istess netwerk. In-nodi tal-clusters MongoDB se jikkomunikaw ma 'xulxin billi jużaw l-IP tas-servers qodma (fejn jinsabu l-installazzjonijiet MongoDB qodma) u bl-ismijiet DNS tal-imżiewed ma' MongoDB f'K8s. Għalhekk, fuq servers tal-ħardwer (b'installazzjonijiet qodma) ser ikollok bżonn tgħaddi r-rotot lill-imżiewed, u mbagħad tikkonfigurahom biex tuża server DNS li jaħdem f'Kubernetes (jew tirreġistra l-ismijiet meħtieġa f' /etc/hosts, għalkemm b'mod ġenerali huwa aħjar li tiġi evitata din il-possibbiltà).

Il-pass li jmiss huwa li tqajjem cluster MongoDB fil-miżwed Kubernetes. Fil-każ tagħna, il-cluster tad-database jikkonsisti minn 3 nodi u kull nodu jinsab f'pod K8s separat - madankollu, in-numru tagħhom jista 'jkun differenti. Fil-ConfigMap għandek bżonn tispeċifika l-indirizz tal-kaptan MongoDB mill-installazzjoni l-antika: allura n-nodi MongoDB li jinsabu f'miżwed f'K8s immedjatament jibdew jissinkronizzaw miegħu.

Wara li l-imżiewed kollha jkunu up, jiġi ffurmat raggruppament MongoDB ta '6 nodi:

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Jekk jogħġbok innota li l-imżiewed se jieħdu ħafna żmien biex jogħlew, peress li kull pod jitnieda min-naħa tiegħu, u fil-ħin tat-tnedija jissinkronizza d-dejta mill-kaptan.

Imbagħad tista' taqleb l-applikazzjoni tiegħek biex tuża s-servers MongoDB ġodda:

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Li jibqa 'huwa li jitneħħew in-nodi l-qodma mill-cluster MongoDB, u wara dan iċ-ċaqliq jista' jitqies komplut:

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Ħafna drabi nużaw din l-iskema fil-produzzjoni u, għal faċilità ta 'użu, implimentajnaha fi ħdan il-modulu għal addon-operatur (aħna mħabbra reċentement), li tippermetti li konfigurazzjonijiet tipiċi ta 'MongoDB jiġu mqassma f'ħafna clusters. Qed nippjanaw li nippubblikaw il-moduli tagħna dalwaqt, iżda għalissa nippreżentaw struzzjonijiet separati li bihom tista 'tipprova s-soluzzjoni proposta fl-azzjoni mingħajr ma tuża l-operatur addon.

Ejja nippruvawha fil-prattika

Rekwiżiti

Rekwiżiti:

  • Kubernetes cluster (minikube se jaħdem ukoll);
  • Cluster MongoDB (jista 'jiġi skjerat fuq metall vojt, u magħmul bħal cluster regolari f'Kubernetes mit-tabella uffiċjali ta' Helm).

Fl-eżempju t'hawn taħt, il-grupp MongoDB l-antik se jiġi msemmi mongo-old u installat fl-istess cluster Kubernetes, fejn aktar tard ninstallaw il-ġdid (mongo-new).

Tħejjija tal-cluster antik

1. Għal eżempju li juri l-iskema deskritta fl-azzjoni, ejja noħolqu raggruppament MongoDB "antik" (jiġifieri, soġġett għall-migrazzjoni) direttament f'Kubernetes (fir-realtà, jista 'jkun jinsab fuq servers separati barra mill-K8s). Biex tagħmel dan, niżżel it-tabella Helm:

helm fetch --untar stable/mongodb-replicaset

... u editjaha ftit billi twaqqaf l-awtorizzazzjoni:

auth:
  enabled: true
  adminUser: mongo
  adminPassword: pa33w0rd
  # metricsUser: metrics
  # metricsPassword: password
  # key: keycontent
  # existingKeySecret:
  # existingAdminSecret:
  # exisitingMetricsSecret:

Ukoll fl- values.yaml tista 'tikkonfigura ċertifikati u ħafna aktar.

2. Installa ċ-ċart:

helm install . --name mongo-old --namespace mongo-old

Wara dan, se titnieda l-installazzjoni "qadima" tat-test ta 'MongoDB:

kubectl --namespace=mongo-old get pods

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Ejja mmorru fil-pod mal-kaptan tiegħu u noħolqu database tat-test:

kubectl --namespace=mongo-old exec -ti mongo-old-mongodb-replicaset-0 mongo
use admin
db.auth('mongo','password')
use music
db.artists.insert({ artistname: "The Tea Party" })
show dbs

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Nidħlu f'imżiewed differenti, sibt li l-kaptan huwa mongo-old-mongodb-replicaset-0. Madankollu, għal soluzzjoni aktar konvenjenti għal din il-kwistjoni, wara l-installazzjoni tat-tabella Helm, jintwera kmand dwar kif tiddetermina MASTER_POD. Fil-każ tiegħi (għal mongo-old ta '3 nodi) jidher bħal dan:

for ((i = 0; i < 3; ++i)); do kubectl exec --namespace mongo-old mongo-old-mongodb-replicaset-$i -- sh -c 'mongo --eval="printjson(rs.isMaster())"'; done

F'dan il-punt, il-preparazzjoni tal-installazzjoni l-antika ta 'MongoDB, li d-dejta tagħha se tiġi trasferita, hija lesta.

Emigra Cluster MongoDB

Issa ejja niskjeraw installazzjoni ġdida ta 'MongoDB, li se tkun tinsab f'Kubernetes u użata mill-applikazzjoni fil-produzzjoni.

NB: Jekk jogħġbok innota li l-istess verżjoni ta 'MongoDB għandha tintuża bħal qabel. Inkella, hemm riskju ta 'problemi ta' kompatibilità.

B'analoġija mat-taqsima preċedenti (fejn simulajna installazzjoni "antika" ta' MongoDB), ejja nieħdu t-tabella Helm diġà msemmija (bil-kmand helm fetch) u kkonfigurat l-awtorizzazzjoni, kif ukoll parametri oħra, jekk jintużaw. Barra minn hekk, aħna se nikkoreġu l-fajl init/on-start.sh, iżżid magħha temporanjament fuq il-linja 165 l-indirizz prinċipali miksub fil-pass preċedenti (jew magħruf lilek mill-installazzjoni MongoDB fuq servers individwali):

peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'

Aħna lesti li noħolqu installazzjoni ġdida ta' MongoDB:

helm install . --name mongo-new --namespace mongo-new

Nistennew sakemm jibdew il-miżwed kollha (jekk hemm ħafna dejta, allura t-tnedija tagħhom tista 'tieħu sigħat):

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Issa nagħmlu exec għall-pod il-ġdid u ħares lejn il-lista tad-databases:

kubectl --namespace=mongo-new exec -ti mongo-new-mongodb-replicaset-0 mongo

Migrazzjoni bla xkiel ta' MongoDB għal Kubernetes

Żewġ raggruppamenti MongoDB huma kkombinati f'wieħed, li jikkonsisti minn 6 nodi.

F'dan il-punt, tista 'taqleb l-applikazzjoni għall-cluster il-ġdid, iżda fadal ftit passi biex tlesti l-migrazzjoni.

Mill-fajl init/on-start.sh fl-installazzjoni l-ġdida nneħħu l-linja li żidna:

peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'

Issa ejja mmorru għand il-kaptan tal-cluster il-qadim u "warrabha" - allura kaptan ġdid jiġi assenjat lill-cluster. Nidħlu fil-pod mal-kaptan MongoDB:

kubectl --namespace=mongo-old exec -ti mongo-old-mongodb-replicaset-0 mongo
use admin
db.auth('mongo','password')

Wara dan, nibdlu l-prijoritajiet tan-nodi u nibdlu l-kaptani:

cfg = rs.conf()
cfg.members[5].priority = 2
rs.reconfig(cfg)
rs.stepDown(120)

In-nodu attwali ma baqax kaptan - se jiġi elett nodu ġdid. Peress li biddilna l-prijoritajiet, in-nodu li neħtieġu se jsir il-kaptan.

NB: B'mod awtomatiku, in-nodi MongoDB kollha għandhom prijorità ta '1. Fuq, ngħollu l-prijorità tan-node li għandna bżonn għal 2. Għalhekk, membru tal-cluster il-ġdid definittivament isir il-kaptan ġenerali. Tista' taqra aktar dwar kif jaħdmu dawn il-mekkaniżmi f'MongoDB fi dokumentazzjoni.

Ejja tiddiżattiva l-installazzjoni l-antika MongoDB, imbagħad mur fil-wizard il-ġdid u ħassar in-nodi l-qodma:

rs.remove("mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")
rs.remove("mongo-old-mongodb-replicaset-1.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")
rs.remove("mongo-old-mongodb-replicaset-2.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")

Wara dan, il-migrazzjoni tista 'titqies kompluta: aħna bdilna b'suċċess mill-grupp MongoDB l-antik għal dak il-ġdid!

Riżultati ta '

L-iskema deskritta hija adattata għal kważi l-każijiet kollha meta għandek bżonn temigra MongoDB jew sempliċement timxi għal cluster ġdid.

Forsi l-isfumatura ewlenija meta tittrasferixxi hija l-ħtieġa li tibgħat l-indirizzi IP ta 'miżwed ġodda lis-servers tal-installazzjoni l-antika ta' MongoDB, jekk tkun tinsab barra mill-K8s, u li tissemmihom b'mod korrett fid-DNS (jew /etc/hosts). Fl-eżempju, dawn il-passi ma kinux meħtieġa, peress li l-migrazzjoni seħħet bejn spazji tal-isem differenti tal-istess cluster Kubernetes.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster