Visas sistēmas darbojas Tavs IP: 216.73.217.36 info@cloudhosting.lv +371 66 66 29 69 Klientu zona

← Visi jautājumi

Kā pārcelt Linux vietni uz jaunu serveri ar rsync

Šī pamācība parāda, kā pārcelt Linux vietni, ieskaitot failus un datubāzi, uz jaunu serveri ar rsync tā, lai dīkstāve būtu dažas minūtes, nevis stundas. Pamatideja ir kopēšana divos piegājienos: pilna sinhronizācija, kamēr vecā vietne turpina apkalpot apmeklētājus, tad īsa rakstīšanas iesaldēšana, ātrs delta piegājiens un DNS pārslēgšana. Pamācība domāta ikvienam, kas ērti jūtas ar SSH un komandrindu, un vienādi labi der parastai PHP vietnei, WordPress vai pašrakstītai aplikācijai.

Kāpēc rsync jāpalaiž divreiz

Vienai lielai kopēšanai ir iebūvēta problēma: tā var ilgt stundām, un pa to laiku apmeklētāji turpina augšupielādēt failus un rakstīt datubāzē. Ja pēc viena piegājiena pārslēgsi DNS, viss, kas radīts kopēšanas laikā, paliks uz vecā servera.

Divu piegājienu shēma to atrisina. Pirmais piegājiens pārnes datu lielāko daļu, kamēr vietne pilnībā strādā, tāpēc neviens to nepamana. Otrais piegājiens notiek pēc rakstīšanas iesaldēšanas, un, tā kā rsync pārsūta tikai to, kas mainījies kopš pirmā piegājiena, tas parasti beidzas sekundēs vai dažās minūtēs. Reālā dīkstāve ir otrā piegājiena un datubāzes atkārtotā importa ilgums, nevis pilnās kopēšanas ilgums.

Sagatavojies laikus: DNS TTL un mērķa serveris

Šos soļus izdari vismaz dienu pirms migrācijas.

  • Samazini DNS TTL. Uzstādi domēna A ieraksta TTL uz 300 sekundēm. Rezolveri veco vērtību glabā kešā tik ilgi, cik atļāva iepriekšējais TTL, tāpēc, ja ieraksts bija publicēts ar 24 stundu TTL, samazini to vismaz 24 stundas pirms pārslēgšanas.
  • Uzstādi mērķa serveri. Ieinstalē to pašu tīmekļa serveri, to pašu PHP vai citas izpildvides versiju un to pašu datubāzes serveri kā uz vecās mašīnas. Versiju atšķirības ir biežākais pārsteigumu avots pēc migrācijas.
  • Atjauno vhost un TLS. Pārkopē vietnes konfigurāciju un uzstādi sertifikātu. Ja lieto certbot, /etc/letsencrypt vari pārsūtīt ar rsync kopā ar vietnes failiem.
  • Sakārto SSH atslēgas, lai vecais serveris var piekļūt jaunajam bez paroles:
ssh-keygen -t ed25519
ssh-copy-id root@JAUNA_SERVERA_IP

Pirmais piegājiens: nokopē visu, kamēr vecā vietne strādā

Lielo kopēšanu palaid no vecā servera. Vietne visu laiku paliek tiešsaistē.

rsync -aHz --info=progress2 /var/www/example.com/ root@JAUNA_SERVERA_IP:/var/www/example.com/

Karodziņi: -a saglabā atļaujas, īpašniekus un laika zīmogus, -H saglabā cietās saites, -z saspiež pārsūtīšanas laikā. Pievērs uzmanību slīpsvītrām ceļu beigās: tās nosaka, vai rsync kopē pašu direktoriju vai tikai tās saturu.

Datubāzi izdumpē ar konsistentu momentuzņēmumu, kas nebloķē strādājošu vietni, ja tabulas ir InnoDB:

mysqldump --single-transaction --routines --triggers example_db | gzip > /root/example_db.sql.gz
rsync -z /root/example_db.sql.gz root@JAUNA_SERVERA_IP:/root/

Uz jaunā servera izveido datubāzi un lietotāju ar tiem pašiem piekļuves datiem, ko gaida aplikācija, tad importē:

mysql -e "CREATE DATABASE example_db"
zcat /root/example_db.sql.gz | mysql example_db

Pārnes arī to, ko parasti aizmirst: cron ierakstus (crontab -l), pielāgotās php.ini vērtības un systemd servisus, no kuriem aplikācija ir atkarīga.

Notestē caur hosts failu

Pirms aiztiec DNS, apskati vietni uz jaunā servera tieši tā, kā to redzēs apmeklētājs: ar īsto vhost, TLS un visu pārējo. Pievieno jauno IP hosts failā uz sava datora, nevis uz servera:

# /etc/hosts (Windows: C:\Windows\System32\drivers\etc\hosts)
JAUNA_SERVERA_IP example.com www.example.com

Tavs pārlūks tagad domēnu atrisina uz jauno serveri, kamēr pārējā pasaule joprojām redz veco. Izklikšķini visu vietni: ielogojies administrācijas panelī, augšupielādē failu, nosūti formu, pārliecinies, ka HTTPS nerāda sertifikāta brīdinājumus. Testēšanas laikā vēro kļūdu žurnālu uz jaunā servera:

tail -f /var/log/nginx/error.log

Pēc tam hosts ierakstu izdzēs, lai vienmēr zini, uz kuru serveri skaties.

Pārslēgšanas diena: iesaldēšana, delta piegājiens, DNS

Pirms sāc, izej cauri šim sarakstam:

  • TTL ir bijis 300 sekundes pietiekami ilgi, lai vecā vērtība visur būtu beigusies.
  • Vietne uz jaunā servera strādā hosts faila testā.
  • Cron darbi, izejošais pasts un sertifikātu atjaunošana uz jaunā servera ir sakārtoti.
  • Tu zini, kā apturēt rakstīšanu: aplikācijas uzturēšanas režīms vai servisa apturēšana.
  • Vecais serveris paliek neaiztikts kā atkāpšanās ceļš.

Tad izpildi pārslēgšanu:

  1. Iesaldē rakstīšanu uz vecā servera: ieslēdz aplikācijas uzturēšanas režīmu vai aptur izpildvidi, piemēram, systemctl stop php8.2-fpm. Atslēdz cron darbus, kas raksta datus.
  2. Palaid delta piegājienu. Karodziņš --delete uz mērķa servera izdzēš failus, kas kopš pirmā piegājiena izdzēsti uz avota:
    rsync -aHz --delete /var/www/example.com/ root@JAUNA_SERVERA_IP:/var/www/example.com/
  3. Vēlreiz izdumpē, pārsūti un importē datubāzi ar tām pašām komandām. Ņem vērā, ka dumps vienmēr ir pilnā izmērā: ja datubāze ir desmitiem gigabaitu, ieplāno atbilstošu iesaldēšanas logu vai tā vietā uzstādi replikāciju.
  4. Nomaini domēna A ierakstu uz jauno IP.
  5. Pārbaudi: dig +short example.com @1.1.1.1 jāatgriež jaunais IP, un piekļuves žurnālam uz jaunā servera jāsāk pildīties. Ar 300 sekunžu TTL lielākā daļa trafika pāriet aptuveni 5 minūtēs.

Tipiskai vietnei viss iesaldētais logs, delta piegājiens plus datubāzes imports, ir mazāk par 5 minūtēm.

Paturi veco serveri kā atkāpšanās ceļu

Neatcel veco serveri tajā pašā dienā. Paturi to vienu vai divas nedēļas:

  • Ja uz jaunā servera atklājas kas nopietns, atkāpšanās ir viena DNS maiņa atpakaļ uz veco IP, jo vecā vietne tika iesaldēta, nevis iznīcināta.
  • Daži rezolveri TTL ignorē, tāpēc neliela apmeklētāju daļa vēl dienām var trāpīt uz veco IP. Tā piekļuves žurnāls parādīs, kad trafiks apklust.
  • Tā ir tava pēdējā datu kopija, līdz uz jaunā servera pabeidzas pirmais pilnvērtīgais rezerves kopiju cikls.

Šī pati procedūra der gan pārejai starp pakalpojumu sniedzējiem, gan jaudas kāpināšanai pie viena. Ja izvēlies mērķa mašīnu, mūsu VPS plāni nosedz lielāko daļu vietņu, un, kad vietne izaug no koplietotiem resursiem, servera noma tai dod atsevišķu mašīnu. Abi darbojas mūsu pašu Tier 3+ datu centrā Rīgā, mūsu pašu tīklā.

Gribi, lai to darām mēs?
VPS. NVMe virtuālie serveri, gatavi minūtes laikā.
Uzzināt vairāk

Gatavs sākt?

Palaid dažās minūtēs vai aprunājies ar inženieri par piemērotāko risinājumu.