Elus migratsioon
Servereid vahetatakse: riistvara vananeb, teenusepakkujad muutuvad, regioonid liiguvad. rdc repo migrate tõstab töötava repositooriumi teisele masinale ühe käsuga — ja --checkpoint-iga reisib isegi protsessimälu kaasa. Demokäivitus pulse hoiab loendajat RAM-is; pärast liikumist jätkab see loendamist otsast alustamise asemel.
Vaata juhendvideot
Kuidas see liigub
Esimene faas kopeerib põhiosa, kuni rakendus jätkab tööd. Teine faas jäädvustab elavad protsessid (CRIU, rediacc.checkpoint=true sildiga konteineritele), kannab lõpliku delta koos protsessiolekuga üle ja jätkab kõike uuel masinal. Seisakuaeg on delta, mitte andmete suurus.
1. samm: Tõestus — loendaja RAM-is
rdc term connect --machine <machine-name> --repository pulse --command 'docker logs heartbeat_app --tail 5' Rakendus hoiab mälus loendurit ja logib löögi iga viie sekundi järel. Loendur elab ainult RAM-is: protsessi taaskäivitamine lähtestaks selle ühele.
memory counter=6 ja kasvab, üks löök iga viie sekundi tagant. Loendaja elab ainult protsessimälus. Kui protsess taaskäivitub, alustaks see ühe pealt uuesti.
2. samm: Migreeeri — elusalt
rdc repo migrate --name pulse --from <machine-name> --to <target-machine> --checkpoint --skip-dns Migreerige kontrollpunktiga: esimene faas edastab 2 GB põhiosa, samal ajal kui allikas jääb võrgus, seejärel lühike üleminek salvestab töötavate protsesside kontrollpunkti ja kannab lõpliku delta üle. Väljund prindib iga faasi ja tegeliku seisakuaja.
Väljund jutustab liikumise: esimene faas kannab 2 GB põhiosa üle, samal ajal kui allikas jääb veebis, seejärel prindib ümberlülitusliin tegeliku DOWNTIME: mõned kümned megabaidid ja umbes kakskümmend sekundit kahe gigabaidise repositooriumi kohta.
3. samm: Kinnita uus kodu
rdc repo list --machine <target-machine> Loetlege sihtmasinas repositoryd: pulse on ühendatud, Docker töötab ja selle containerid on üleval.
Sihtmasinas on pulse ühendatud, Docker töötab, konteinerid jooksevad.
4. samm: Allikas on peatatud
rdc repo list --machine <machine-name> Allikal on repository peatatud ja lahti ühendatud: Docker puudub, null containerit. Pilt säilitatakse tulevaste delta-ülekannete alusena.
Allikas loetleb repositooriumi endiselt, kuid ausalt: ei ole ühendatud, Dockerit pole, null konteinerit. Seal ei tööta enam midagi. Kujutis on meelega alles jäetud järgmise deltatransferi alusena, nii et tulevane tagasitõuge on odav.
5. samm: Loendaja jätkas loendamist
rdc term connect --machine <target-machine> --repository pulse --command 'docker logs heartbeat_app --tail 5' Uue masina logid näitavad, et loendur jätkab sealt, kus kontrollpunkt selle külmutas, mitte ei lähtesta ühele. Protsessimälu tegi teekonna.
memory counter=17, siis 18, 19, 20… See jätkas täpselt sealt, kus kontrollpunkt selle külmutas, mitte ühe pealt uuesti. See on protsessimälu, mis reisis kaasa — rakendus ei märganud, et masin vahetus.
Ilma
--checkpoint-ita tõstab migrate endiselt kettaandmed ja konteinerid üle; need käivituvad sihtmasinal uuesti, mitte ei jätka pooleli olekust.
Edasi: Deltatransfer.