Klon panas layanan Linux yang hidup

14

Kita perlu mengkloning layanan Linux ketika masih hidup, bukan hanya karena kita tidak dapat reboot atau sesuatu; itu hanya karena skenario khusus kami (ya, saya sudah membaca jawaban ini, tetapi ini sedikit berbeda dari milik saya Clone server Linux yang berfungsi ).

Kami memiliki simpul penghitungan, Anda dapat mengatakan simpul penghitungan NLP yang menjalankan beberapa model di atasnya. Ketika kita memulai node (dengan layanan tentu saja), perhitungannya akan sangat lambat sampai kita memberinya makan beberapa kali. Kami menyebutnya pemanasan.

Sayangnya, pekerjaan pemanasan membutuhkan waktu lama bagi kami untuk menunggu (mungkin penghitungan kami selesai sebelum simpul dipanaskan).

Jadi, masalahnya, apakah ada cara yang stabil untuk mem-hot clone server Linux agar node tetap pada performa terbaik sehingga kita bisa mengkloning dan membuatnya online dalam waktu yang lebih singkat?

chen steven
sumber
Apakah memvisualisasikan mesin, dan mengambil snap shot dari keadaan "pemanasan" akan bermanfaat?
TripeHound
13
Apakah Anda mengerti mengapa pemanasan ini terjadi? Misalnya, itu mungkin efek samping dari cache file. Tetapi beberapa jawaban untuk mesin kloning membuang cache file, karena cache menurut definisi dapat direkonstruksi dari aslinya.
MSalters
fork () adalah salah satu cara untuk membuat lebih banyak proses pada mesin yang diberikan sambil menyimpan overhead startup apa pun.
Yet Another User
Terima kasih teman-teman, @ TripeHound, saya telah meminta seorang teman saya yang bekerja di VMWare, dan dia berkata tampaknya tidak mungkin bagi mereka untuk mengambil snapshot keadaan "pemanasan", tidak juga beberapa hal cermin. MSalters, saya tidak 100% yakin apa yang terjadi selama pemanasan, tetapi sepertinya setelah layanan selesai, beberapa pekerjaan pemuatan yang malas bekerja setelah pekerjaan perhitungan melibatkan
chen steven
2
Tidak mengetahui pengaturan latar belakang Anda, tetapi ini bau seperti situasi di mana server Anda tidak boleh turun. Ini menunjukkan bahwa kernel host Anda mungkin kuno dan bahwa pembaruan tidak pernah diterapkan. Mungkin ini merupakan indikator cacat desain sistemik yang perlu dipertimbangkan.
Criggie

Jawaban:

28

Mungkin Anda tidak dapat "hot clone" seluruh server (Anda bisa, tetapi hanya jika itu adalah mesin virtual), tetapi Anda dapat membekukan dan mengembalikan satu proses, dengan criu , Checkpoint / Restore di Userspace.

Ini memungkinkan Anda untuk menyimpan status internal program ke disk dan menghentikan program, dan kemudian, mengembalikan program ke status itu dari file yang disimpan.

Untuk mendukung operasi yang Anda inginkan, Anda dapat menyalin file yang mewakili program tersimpan ke server lain, dan mengembalikannya di sana.

criu membutuhkan kernel terbaru dengan berbagai fitur yang dikompilasi, sehingga distribusi Linux yang lebih lama mungkin tidak berfungsi. Anda dapat menjalankan criu checkpada mesin tertentu untuk menentukan apakah prasyarat untuk criu ada.

Michael Hampton
sumber
kelihatannya luar biasa dan saya akan melakukan beberapa tes tentang ini, terima kasih bro
chen steven
Dari pengalaman Anda, seberapa baik ini bekerja dalam praktek? Melihat daftar pembatasan criu (yang cukup banyak yang saya harapkan - ini adalah masalah yang sulit), saya merasa ini tidak mungkin bekerja dengan aplikasi yang tidak dirancang dengan menggunakan use case ini dalam pikiran.
James_pic
@ James_pic Mungkin sudah setahun sejak saya melihatnya dengan serius, karena saat ini saya tidak menggunakannya. Untuk daemon yang hanya menerima koneksi dan melakukan perhitungan (mis. Pekerjaan pembelajaran mesin OP, atau server web) itu berfungsi dengan cukup baik.
Michael Hampton
12

Ini mungkin sedikit keluar dari lingkup lingkungan Anda saat ini, tetapi cara standar industri untuk melakukan ini adalah dengan memvirtualisasikan server Anda. Banyak host virtualisasi (VMware, virtualbox, dll.) Memungkinkan "snapshots" yang menyimpan status server, yang kemudian dapat dikloning ke instance baru. Mesin virtual baru ini akan memiliki kondisi yang sama persis seperti aslinya, hingga proses yang berjalan. Tentu saja Anda ingin memastikan bahwa perangkat lunak yang Anda jalankan masih akan bekerja dengan benar di lingkungan virtual (perhitungan CUDA / GPU muncul dalam pikiran).

cawwot
sumber
Virtualisasi hebat, hingga perangkat lunak (atau dependensinya) memerlukan pembaruan, dan tidak menyediakan mekanisme muat ulang yang baik. Snapshot VM atau migrasi langsung menjalankan kode lama.
John Mahowald
Saya menerima baik untuk menjalankan proyek di mesin "nyata" atau virtualisasi host, dan kita dapat mengambil beberapa cara untuk menangani hal-hal kode "lama", mungkin tes A / B atau bergulir pembaruan .etc. Tapi apakah Anda yakin foto-foto itu benar-benar dapat mengkloning kondisi pemanasan dari simpul kerja saya?
chen steven
3
Saat Anda "melakukan migrasi langsung" mesin, mesin itu harus dijeda. Sementara itu dijeda, memorinya disalin 1: 1 ke komputer lain dalam sebuah cluster, di mana ia tidak terhapus - utuh. Ini bisa memakan waktu tergantung pada berapa banyak memori yang digunakan, dan seberapa cepat jaringan kain. Anda mungkin dapat menggunakan metode ini jika jumlah waktu henti yang diminta cukup rendah untuk kebutuhan Anda.
Spooler
@chensteven Saya baru-baru ini berasal dari lingkungan virtualbox. Itu beberapa waktu yang lalu, tetapi dari apa yang saya ingat snapshot yang berjalan berisi keadaan yang tepat dari vm pada saat snapshot diambil, termasuk proses yang berjalan dan isi memori. Cuplikan ini kemudian dapat dikloning ke vm baru, memberi Anda dua mesin dalam kondisi yang persis sama.
cawwot
3

Pertanyaan yang Anda sebutkan merujuk ke tautan, http://www.linuxfocus.org/English/March2005/article370.shtml , yang menjelaskan semua cara yang saya bayangkan untuk melakukan permintaan Anda.

Bahwa opsi yang ada di sana tidak berarti banyak untuk apa yang sedang berjalan di server. Anda harus mempertimbangkan bahwa semua file yang dapat berubah dalam proses kloning bisa menjadi file yang tidak konsisten pada mesin target. Pada posting itu Anda memberikan mereka berbicara tentang database, dan mengkloningnya seperti itu tidak memberikan asuransi integritas data.

Tidak jelas apa yang Anda maksud dengan "sampai kami memberinya makan beberapa kali" .

Tetapi jika saya mengerti dengan baik apa yang Anda tanyakan, Anda harus mempertimbangkan bahwa untuk mengkloning suatu sistem diperlukan waktu untuk menyalin dan menghitung sumber daya.

Untuk melakukan "ON / OF" atau lebih baik disebut lingkungan yang aktif / cadangan, server harus dikonfigurasi dengan benar dalam cluster.

Maaf jika bukan jawaban yang Anda harapkan, tetapi opsi yang Anda dapatkan adalah itu.

AtomiX84
sumber
Ini salah saya untuk membuat Anda sedikit bingung di sini, hal-hal "umpan" berarti, setelah layanan saya mulai, kita perlu menjalankan tugas perhitungan beberapa kali untuk memastikan simpul "menghangat" ke kinerja puncak. Jadi masalahnya di sini adalah seperti klon dinamis atau perluasan untuk pekerjaan hidup kita seolah-olah sejumlah besar permintaan mengenai sistem kita, kita tidak akan punya cukup waktu untuk mengatur simpul perhitungan baru (pemanasan membutuhkan terlalu banyak waktu) untuk tangani mereka, kau tahu, seperti ombak yang datang
chen steven
1

Ada banyak masalah potensial dengan apa yang Anda coba lakukan, dan tentu saja seperti yang Anda tahu akan lebih baik untuk membuat server offline dan mengkloningnya sementara tidak ada data yang disimpan secara dinamis.

Namun, apa yang ingin Anda lakukan sepenuhnya masuk akal, seperti yang telah saya lakukan sebelumnya. Jika Anda menggunakan, ddAnda dapat mengkloning server lengkap di tingkat blok ke drive lain atau server lain. Namun itu akan memerlukan beberapa pengaturan tambahan pada server baru, dan Anda mungkin tidak akan dapat dengan mudah mematikan yang lain dan yang baru aktif. Agar kami dapat memahami hal ini, kami perlu mengetahui beberapa hal tentang perangkat keras dan perangkat lunak server Anda.

Pertama, untuk menentukan strategi data terbaik, akan sangat membantu untuk mengetahui apa yang diperbarui secara berkala. Apakah Anda memiliki server SQL yang memperbarui secara dinamis tetapi memiliki konten statis? Atau, apakah Anda memiliki tim pengembang melalui sistem subversi seperti git mengirimkan pembaruan data konstan ke konten Anda? Bergantung pada apa yang diperbarui akan menentukan tindakan penuh terbaik.

Jika misalnya, hanya SQL yang diperbarui secara berkala, maka Anda dapat bermigrasi ke server baru saat server tersebut aktif dengan cara berikut:

  • dd untuk mengkloning semua data server baru.
  • Mulai menyiapkan server baru, mungkin perlu beberapa pekerjaan terutama jika itu perangkat keras yang berbeda, tetapi masih mungkin lebih cepat daripada pengaturan dari awal.
  • Mungkin juga diperlukan beberapa perubahan DNS, karena Anda tidak dapat menggunakan DNS yang sama di server lain jika Anda perlu bekerja di server kedua secara langsung saat server pertama masih aktif.
  • Setelah server baru selesai dan berjalan secara independen, ambil cadangan final dari server sql di server asli, dan impor ke server baru.

Anda mungkin perlu membuat server asli Anda luring sementara untuk memastikan bahwa Anda tidak kehilangan data apa pun. Atau, untuk tidak memiliki downtime, Anda dapat membuat siaran langsung yang kedua, arahkan dns ke server baru, dan kemudian perbarui entri dns secara manual di server baru, sehingga secara efektif nol downtime. Ini lebih merepotkan daripada beberapa menit downtime meskipun untuk membuat cadangan sql dan mengembalikan ke server baru, tetapi mungkin diperlukan untuk nol downtime.

Ini tentu saja hanya satu contoh kasus penggunaan, dan tergantung pada konfigurasi Anda dan beberapa variabel, Anda mungkin perlu membuat strategi Anda sendiri untuk migrasi berdasarkan kasus khusus Anda.

Masalah lainnya adalah sehubungan dengan konfigurasi perangkat keras server. Apakah server baru 100% identik dalam perangkat keras dengan server lama? Jika demikian, maka pengaturannya lebih mudah. Namun, jika di sisi lain, ini merupakan konfigurasi perangkat keras yang sama sekali berbeda, maka Anda mungkin perlu menerapkan strategi yang berbeda yaitu dengan hanya menyiapkan server kedua sebelumnya, kemudian buat cadangan semua data Anda dan pangkalan data sql di server pertama dan secara manual memindahkannya, mengubah konfigurasi yang diinginkan.

Migrasi server sama sekali tidak sepele, dan untuk dapat berhasil, Anda perlu memiliki pengetahuan yang mendalam tentang server, atau staf yang memiliki hal yang sama. Bagaimanapun, sangat disarankan agar Anda segera mengambil cadangan penuh dan menyimpannya pada sumber ketiga, bahkan di komputer lokal Anda, sehingga jika skenario terburuk terjadi (kedua server macet dan mati tidak dapat diperbaiki), Anda masih memiliki yang lain salinan data Anda untuk membangun kembali server Anda dengan.

Semoga ini bisa membantu, dan semoga sukses dengan server Anda bergerak!

serveraddict
sumber