
Dan l-artiklu jkompli tagħna 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:

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:

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:

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

Ħafna drabi nużaw din l-iskema fil-produzzjoni u, għal faċilità ta 'użu, implimentajnaha fi ħdan il-modulu għal (aħna ), 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-oldWara dan, se titnieda l-installazzjoni "qadima" tat-test ta 'MongoDB:
kubectl --namespace=mongo-old get pods 
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 
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())"'; doneF'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-newNistennew sakemm jibdew il-miżwed kollha (jekk hemm ħafna dejta, allura t-tnedija tagħhom tista 'tieħu sigħat):

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 
Ż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 .
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
