Sıcak klon yaşayan bir Linux hizmeti


14

Sadece yeniden başlayamadığımız veya başka bir şeyle karşılaşmadığımız için değil, bir Linux hizmetini canlı klonlamak zorundayız; sadece özel senaryomuzdan dolayı (evet, bu cevabı zaten okudum, ancak çalışan Clone benimki Clone'den biraz farklı ).

Bir hesaplama düğümümüz var, üzerinde bazı modeller çalıştıran bir NLP hesaplama düğümü diyebilirsiniz. Düğümü başlattığımızda (elbette bir hizmetle), hesaplama birkaç kez beslenene kadar korkunç olacaktır. Biz buna ısınma dedik.

Ne yazık ki, ısınma işi beklememiz uzun zaman alıyor (belki hesaplamalarımız düğüm ısınmadan önce bitmiş olabilir).

Yani, sorun geliyor, düğümü en iyi performansta tutmak için bir Linux sunucusunu sıcak klonlamanın istikrarlı bir yolu var mı, böylece daha kısa sürede klonlayıp çevrimiçi hale getirebiliyoruz?


Makineyi görselleştirmek ve "ısınmış" durumun anlık görüntüsünü almak herhangi bir fayda sağlar mı?
TripeHound

13
Bu ısınmanın neden olduğunu anlıyor musunuz ? Örneğin, dosya önbelleğinin bir yan etkisi olabilir. Ancak klonlama makinelerine verilen bazı yanıtlar dosya önbelleğini atar, çünkü tanım gereği bir önbellek alttaki orijinalden yeniden oluşturulabilir.
MSalters

fork (), herhangi bir başlangıç ​​yükünü kaydederken belirli bir makinede daha fazla işlem oluşturmanın bir yoludur.
Yine Bir Kullanıcı Kullanıcı

teşekkürler millet, @TripeHound, VMWare'de çalışan bir arkadaşımdan sordum ve o sadece "ısınmış" durumu, ne bazı ayna şeyler enstantane için imkansız görünüyor dedi. MSalters, ısınma sırasında ne olacağından% 100 emin değilim, ancak servis bittikten sonra, hesaplama işi dahil olduktan sonra bazı tembel yükleme işi çalışıyor
chen steven

2
Arka plan kurulumunuzdan habersiz, ancak bu sunucunuzun asla düşmemesi gereken bir durum gibi kokuyor. Bu, ana makinenizin çekirdeğinin eski olabileceğini ve güncellemelerin hiç uygulanmadığını gösterir. Belki de bu, dikkate alınması gereken sistemik bir tasarım kusurunun bir göstergesidir.
Criggie

Yanıtlar:


28

Belki bir sunucunun tamamını "sıcak klonlayamazsınız" (ancak, ancak sanal bir makine ise), ancak tek bir işlemi dondurabilir ve geri yükleyebilirsiniz, criu , Checkpoint / Restore ile Userpace .

Bu, programın dahili durumunu diske kaydetmenizi ve programı durdurmanızı ve daha sonra programı kaydedilen dosyalardan bu duruma geri yüklemenizi sağlar.

İstediğiniz işlemi desteklemek için, kaydedilen programı temsil eden dosyaları başka bir sunucuya kopyalayabilir ve oraya geri yükleyebilirsiniz.

criu, derlenmiş çeşitli özelliklere sahip yeni bir çekirdek gerektirir, bu nedenle eski Linux dağıtımları çalışmayabilir. Kaçabilirsiniz criu checkcriu önkoşulları mevcut olup olmadığını belirlemek için belirli bir makinede.


harika görünüyor ve bu konuda bazı testler yapacağım, teşekkürler kardeşim
sten steven

Deneyimlerinizden, bu pratikte ne kadar iyi çalışıyor? Criu listelerinin (neredeyse beklediğim olanlar - bu zor bir sorundur) sınırlamalara baktığımda, bunun bu kullanım durumu göz önünde bulundurularak tasarlanmayan uygulamalarla çalışmanın olası olmadığını hissediyorum.
James_pic

@James_pic Ciddiye bakmamın üzerinden belki bir yıl geçti, çünkü şu anda kullanmıyorum. Sadece bağlantıları kabul eden ve biraz hesaplama yapan bir daemon için (örneğin OP'nin makine öğrenimi işi veya bir web sunucusu) oldukça iyi çalışıyor.
Michael Hampton

12

Mevcut ortamınızın kapsamı biraz dışında olabilir, ancak bunu yapmanın endüstri standardı yolu sunucunuzu sanallaştırmaktır. Birçok sanallaştırma ana bilgisayarı (VMware, virtualbox vb.), Bir sunucunun durumunu kaydeden “anlık görüntüler” e izin verir, bu da daha sonra yeni örneklere klonlanabilir. Bu yeni eşgörünümler, çalışan işlemlere kadar orijinaliyle tam olarak aynı duruma sahip olacaktır. Elbette, çalıştırdığınız yazılımın sanal bir ortamda hala doğru bir şekilde çalışacağından emin olmak istersiniz (CUDA / GPU hesaplama akılda kalır).


Sanallaştırma, yazılım (veya bağımlılıkları) bir güncelleme gerektirene kadar ve zarif bir yeniden yükleme mekanizması sağlamayana kadar mükemmeldir. Bir VM anlık görüntüsü veya canlı geçiş eski kodu çalıştırıyor.
John Mahowald

Hem projeyi "gerçek" bir makine veya sanallaştırma ana bilgisayarında çalıştırmak benim için kabul edilebilir ve "eski" kod işlerini, belki de A / B testi veya yuvarlanan güncelleme .etc'yi işlemek için birkaç yol alabiliriz. Ancak, anlık görüntülerin çalışma düğümümün ısınmış durumunu tamamen klonlayabileceğinden emin misiniz?
chen steven

3
Bir makineyi "canlı olarak taşıdığınızda", duraklatılması gerekir. Duraklatılmışken, belleği 1: 1'i kümedeki başka bir makineye kopyalanır; burada duraklatılmaz - bozulmamış. Ne kadar bellek kullanıldığına ve ağ dokusunun ne kadar hızlı olduğuna bağlı olarak biraz zaman alabilir. Çalıştırdığı kesinti süresi ihtiyaçlarınız için yeterince düşükse, bu yöntemi kullanabilirsiniz.
Biriktirici

@chensteven En son sanal kutu ortamından geldim. Bu bir süre önce, ama hatırladığım kadarıyla çalışan bir anlık görüntü, çalışan işlemler ve belleğin içeriği de dahil olmak üzere anlık görüntünün alındığı andaki vm'nin tam durumunu içerir. Bu anlık görüntü daha sonra yeni bir vm'ye klonlanabilir ve size tam olarak aynı durumda iki makine verir.
cawwot

3

Bahsettiğiniz soru , isteklerinizi yapmayı düşündüğüm tüm yolları açıklayan http://www.linuxfocus.org/English/March2005/article370.shtml bağlantısına başvuruyor .

Seçeneklerin orada bulunması, sunucuda çalışanlar için çok fazla bir şey ifade etmiyor. Klonlama işleminde değişebilecek tüm dosyaların hedef makinede tutarsız dosyalar olabileceğini göz önünde bulundurmalısınız. Bu yazıda veri tabanları hakkında konuşurlar ve veri bütünlüğü sigortası vermezler gibi klonlarlar.

Ne demek istediğinizi "birkaç kez besleyene kadar" tam olarak belli değil .

Ama ne istediğini iyi anladıysam, bir sistemi klonlamak için kaynakları kopyalamak ve hesaplamak için zamana ihtiyaç olduğunu düşünmelisin.

Etkin / yedekleme ortamı olarak adlandırılan "AÇIK / OF" veya daha iyisini gerçekleştirmek için sunucunun kümede düzgün yapılandırılması gerekir.

Beklediğiniz cevap değilse özür dilerim ama aldığınız seçenekler bunlar.


Burada sizi biraz şaşırtmak benim hatam, "besleme" maddeleri, hizmetim başladıktan sonra, düğümün en iyi performansa "ısıtılmasını" sağlamak için hesaplama görevlerini birkaç kez çağırmamız gerektiği anlamına gelir. Yani buradaki sorun, yaşam işlerimiz için dinamik klon veya genişleme gibidir, sanki sistemimize çarpan çok sayıda istek, yeni hesaplama düğümleri (ısınma çok fazla zaman alır) oluşturmak için yeterli zamanımız olmayacak. Onları idare et, bilirsin, tıpkı dalgalar geliyor gibi
chen steven

1

Yapmaya çalıştığınız şeyle ilgili birçok potansiyel sorun var ve bildiğiniz gibi, hiçbir veri dinamik olarak depolanmazken sunucuyu çevrimdışına almak ve klonlamak en iyisi olacaktır.

Ancak, daha önce yaptığım gibi, yapmak istediğiniz şey tamamen mantıklı. Eğer kullanırsanız ddbaşka bir sürücüye veya başka bir sunucuya blok seviyesinde tam sunucuyu klonlayabilirsiniz. Bununla birlikte, yeni sunucuda bazı ek kurulumlar alacaktır ve muhtemelen diğerini ve yenisini açamayacaksınız. Bunu anlayabilmemiz için sunucu donanımınız ve yazılımınız hakkında birkaç şey bilmemiz gerekiyor.

İlk olarak, en iyi veri stratejisini belirlemek için nelerin düzenli olarak nelerin güncellediğini bilmek faydalı olacaktır. Dinamik olarak güncellenen ancak statik içeriğe sahip bir SQL sunucunuz var mı? Alternatif olarak, git içeriğinize sürekli veri güncellemeleri göndermek gibi bir alt sürüm sistemi üzerinde geliştiricilerden oluşan bir ekibiniz var mı? Neyin güncelleneceğine bağlı olarak, en iyi tam eylem yolunu belirleyecektir.

Örneğin, yalnızca düzenli olarak güncellenen SQL ise, bu sunucu şu şekilde canlıyken yeni bir sunucuya geçiş yapabilirsiniz:

  • dd tüm verileri yeni sunucu klonlamak için.
  • Yeni sunucuyu kurmaya başlayın, özellikle farklı bir donanımsa biraz çalışmak gerekebilir, ancak yine de sıfırdan kurulumdan daha hızlı olabilir.
  • Ayrıca, ilk sunucu hala canlıyken canlı olarak ikinci sunucuda çalışmanız gerekiyorsa, aynı DNS'yi başka bir sunucuda kullanamayacağınız için bazı DNS değişiklikleri de alabilir.
  • Yeni sunucu tamamlandıktan ve bağımsız olarak çalıştıktan sonra, orijinal sunucudaki sql sunucusunun son yedeğini alın ve yeni sunucuya alın.

Hiçbir veriyi kaçırmamanız için orijinal sunucunuzu geçici olarak çevrimdışı duruma getirmeniz gerekebilir. Alternatif olarak, sıfır kesinti süresine sahip olmak için ikinciyi canlı yapabilir, dns'i yeni sunucuya yönlendirebilir ve daha sonra dns girişlerini yeni sunucuda manuel olarak güncelleyebilirsiniz, böylece sıfır kesinti süresi olur. Bu, sql'yi yedekleyip yeni sunucuya geri yüklemek için birkaç dakikalık kesinti süresinden daha zahmetlidir, ancak sıfır kesinti süresi için gerekli olabilir .

Bu elbette sadece bir kullanım örneği olup, yapılandırmanıza ve çeşitli değişkenlere bağlı olarak, özel durumunuza göre taşıma için kendi stratejinizi oluşturmanız gerekebilir.

Diğer sorun sunucu donanım yapılandırmasıyla ilgilidir. Yeni sunucu, donanım olarak eski sunucu ile% 100 aynı mı? Öyleyse, kurulum daha kolaydır. Ancak, diğer taraftan, tamamen, tamamen farklı bir donanım yapılandırmasıysa, ikinci sunucuyu önceden ayarlamak, ardından tüm verilerinizi ve sql veritabanlarınızı yedeklemek için farklı bir strateji uygulamanız gerekebilir. ilk sunucuyu seçin ve yapılandırmayı istediğiniz gibi değiştirerek manuel olarak geçirin.

Sunucu geçişi kesinlikle önemsiz değildir ve başarılı bir hamle için, aynı sunuculara veya eldeki personele ilişkin derin bilgiye sahip olmanız gerekir. Her durumda, tam bir yedek almanız ve onu yerel bilgisayarınızda bile üçüncü bir kaynakta depolamanız önemle tavsiye edilir, böylece en kötü durum senaryosu gerçekleşirse (her iki sunucu da bozulur ve onarılamaz şekilde ölür) sunucularınızı yeniden oluşturmak için verilerinizin bir kopyası.

Bu yardımcı olur ve sunucu hamle iyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.