IIS'de sıfır kesinti yüklemesi / Geri Alma


17

Bunun bu soruyu sormanın doğru yolu olup olmadığından emin değilim, ama temel olarak yapmak istediğim şey:

1.) IIS'deki bir siteye bir değişiklik kümesi aktarın.
2.) Kullanıcıları bölmeyin.
3.) Zahmetsizce geri dönebilme.

Yani, gerçekleşmesi gerektiğini bildiğim birkaç şey var:

1.) Proc Out oturumu - işlendi
2.) Proc out önbelleği - işlendi

Bu durumda kalan sorular:
1.) Kullanıcıları kesintiye uğratmamak için ne yapmalıyım? Dosyaları sadece depo gözüne yüklersem, uygulama geri dönüştürülür ve çevrimiçi hale gelmesi 10+ saniye sürer
2.) Zahmetsizce nasıl geri dönebilirim?

Olası bir çözümün IIS'de bir tane kamu ve bir tane de özel olmak üzere iki site kurması olacağını düşünüyordum. Yüklemeler gizli hale gelir ve ısınır. Isınmadan sonra siteler değiştirilir. Bir geri alma yalnızca bir yükleme yapmadan gizli olanlara geçişi gerektirir.

Bu teoride kulağa hoş geliyor, ama mekanikten emin değilim. Herhangi bir fikir?


@NickatUship: Web sitesinin barındırıldığı sadece 1 sunucu var mı? Ve değilse, bir saniye ekleme imkanı var mı?
Matt

@NickatUship: Ayrıca, hangi IIS sürümünü kullanıyorsunuz?
MattB

Bunu potansiyel olarak yük dengeleyicimizle çözebiliriz - bu doğru. Sunucunun kendisinde bir şeyler yapabilmeyi umuyordum - akışımız için daha iyi çalışırdı. IIS
7'deyiz

i sıfır kesinti dağıtma için global URL yeniden yazma kurallarını kullanıp kullanamayacağımı merak ediyorum 1) * .domain.com'u IIS 2'de bir uygulama olan * .arbitrarysiteA.com'a yeniden yazın.) * .arbitrarySiteB.com 3) yukarı 4.) yeniden yazma işlemini * .siteB.com olarak değiştirin
ChickenMilkBomb

Yanıtlar:


29

İşte bu soruna nasıl yaklaşacağım - bunu daha önce yapmadığımı unutmayın, bu sadece geliştirme ortamımda biraz test ettiğim kavramlar. Bunu ve kendi dilinizde bazı komut dosyalarını kullanarak oldukça sağlam bir çerçeve oluşturabilmelisiniz. Temel olarak bir getto yük dengeleme ortamı kuracağız ve bunu yeni site ile eski site arasında geçiş yapmak için kullanacağız.

Kurulumu almak için şunlara ihtiyacınız olacak:

Başlamak için ARR'yi yükleyin.

IIS'de 3 web sitesini kurun:

  • Web sitesi 1, kullanıcılarınızın gerçekte bağlandığı site olacaktır, diyelim http://192.168.1.1/. Bu aynı zamanda ARR sitesidir. Bunun için boş bir dizin kurmanız ve kendi uygulama havuzuna koymanız yeterlidir. Uygulama havuzunu bu yönergelere göre zaman aşımına uğramayacak şekilde ayarlayın .
  • Web sitesi 2 ve 3, aslında içeriğinizi barındıran siteler olacaktır. Bunlar gerek kendi IP'leri olması ve ARR internet sitesinde 1. farklı bir bağlantı noktasında, nasıl çalıştığını nedeniyle olduklarını Diyelim etmek http://192.168.1.2:8080ve http://192.168.1.3:8080. Ayrıca kendi uygulama havuzlarında olmalı ve dosya sistemindeki farklı dizinleri işaret etmelidirler (ancak her iki dizin de genellikle aynı içeriğe sahiptir)

ARR'yi yükledikten sonra, IIS Yöneticisi'nde "Sunucu Çiftlikleri" adlı yeni bir kategori olacaktır - bunu sağ tıklayın ve yeni bir çiftlik oluşturun.

  • sana anlamlı bir isim ver
  • Web sunucusu 2 ve Web sunucusu 3'ü sunucu olarak ekleyin - "gelişmiş ayarlar" düğmesini tıkladığınızdan, "applicationRequestRouting" kategorisini açtığınızdan ve her sunucu için httpPort'u 8080 olarak değiştirdiğinizden emin olun.
  • Sihirbazı tamamlayın - URL Yeniden Yazma kuralları oluşturmak isteyip istemediğiniz sorulacaktır - Evet'i tıklayın
  • Artık bir sunucu grubunuz var - yapılandırmayı bitirmek, gruba gidin ve Proxy yapılandırma düğmesini tıklayın - "yanıt başlıklarında ana bilgisayarı tersine yaz" seçeneğini açın ve değişiklikleri uygulayın
  • IIS Yöneticisi'nde kök düzeyi sunucu kategorisine gidin ve URL Yeniden Yaz düğmesini tıklayın, çiftliğiniz için oluşturulmuş bir kural olacaktır
    • ayarlara ulaşmak için kuralı çift tıklayın
    • Koşullar kutusunu aç
    • {SERVER_PORT}8080 ile eşleşmeyen yeni bir koşul ekle
    • değişiklikleri uygula

Bu noktada, talebinizi yerine getirmek için neye ihtiyaç duyduğumuzun temellerine sahipsiniz. Eğer giderseniz http://192.168.1.1/web sitenizi Web Sitesi 1 veya Web Sitesi 2'den alacaksınız, ancak başka siteler olması tamamen sorunsuz olacaktır.

Şimdi uygulamanızın yeni bir sürümünü dağıtmak istediğinizde şunları yapabilirsiniz:

  • çiftliğinizdeki sunucuların 1'ini boşaltın (sunucu grubu araçlarında "İzleme ve Yönetim" e gidin, bir sunucu seçin ve "Sunucuyu incelikle kullanılamaz hale getir" i seçin)
  • sitenin yeni sürümünü çevrimdışı olan sisteme dağıtın
  • alternatif IP / bağlantı noktasını kullanarak çevrimdışı olan siteyi ısıtın
  • siteyi tekrar çiftlik için kullanılabilir yap
  • işlemi diğer sunucu için tekrarla

Tüm bunları komut dosyası yazmak istemenizden bahsettiğinizde Web Dağıtımı aracı devreye girer. Uygulamanız için bir paket oluşturmayı ve komut satırından dağıtmayı süper kolaylaştırır. Daha sonra, sorun varsa bu paketi kolayca geri alabilirsiniz. ARR, dll'ler kullanılarak da yazılabilirMicrosoft.Web.Administration .

Başka bir şey - aslında Windows 2008 R2 (IIS 7.5) kullanıyorsanız, Uygulama Isınma modülüne bir göz atın - bunun ısınma kısmını da sizin için daha kolay hale getirmelidir.


Harika - teşekkürler matt. Sadece hepsini indirdiğin için bile +1. Araştırıp tahtaya geri döneceğim.
ChickenMilkBomb

Mükemmel .. aptalca kanıt olmayabilir .. ama araştırmak iş
Vivek Kumbhar

1
Bu, IIS uygulamalarının sıfır çalışmama süresinin dağıtılması için verilen yanıttır. Bunu + PowerShell otomatikleştirmek için nasıl derinlemesine bir öğretici yazdı.
kavun

10

MattB sudan vurdu. +1 Daha fazla ayrıntıyla cevap vereceğim ama puanını almak istemiyorum. Söylediklerine ekleyeceğim.

Tarif ettiği şeye benzer bir kurulumum var ve harika çalışıyor. ARR, tek bir sunucuda bile gitmenin yoludur.

Ancak, birkaç şey eklemek istiyorum.

Matt'in önerdiği gibi 2 siteyi oluşturun. Onlara yoursite.com01 ve yoursite.com02 gibi bir şey deyin.

2 URL Yeniden Yazma kuralı oluşturun. Biri www.etkialaniniz.com ve bir tane daha evreleme.alanadiniz.com.tr. Üretim için {HTTP_HOST} değerini (^ www.alanadiniz.com $) | (IP'niz) kullanın. (veya tercih ettiğiniz ciltleme yöntemi) Evreleme için {HTTP_HOST} değerini (^ staging.yourdomain.com $) değerinde kullanın. Siteniz.com ve staging.yoursite.com adreslerini girin.

Kural = siteniz.com'u site = siteniz.com01'e ve kural = staging.yoursite.com'u sitenize = siteniz.com02'ye bağlayın.

Staging.yoursite.com adresinde FTP kurulumu.

Üretim trafiği şimdi Kural = staging.yoursite.com ve Site = siteniz.com01 adresine gidiyor. Tersine istifleme.

Herhangi bir noktada evreleme, test, ön-spinup, başkalarının test etmesini, vb. Her seferinde aynı FTP hesabına konuşlandırın. Yapı sunucuları ile harika çalışır.

Ardından, yayınlanmaya hazır olduğunuzda, yalnızca 3 değişiklik yapın: - FTP bağlantınızı siteniz.com02'den siteniz.com01'e taşıyın - URL'yi Yeniden Yazın siteniz.com'u işaret etmek için siteniz.com

Artık anında geri alma işleviyle Sıfır duruş süresine, anında geçişe sahipsiniz!

Dikkate almanız gereken tek şey, işlem dışı oturum durumunuzdur. Durum sunucunuzun takas sırasında oturum durumunu kaybetmemeniz için her iki site kimliğini de kabul ettiğinden emin olun.

Ayrıca bunun yalnızca web olduğunu ve veritabanı olmadığını unutmayın.

Komut dosyası oluşturmak için Yapılandırma Düzenleyicisi'ni kullanın. İstediğiniz değişiklikleri yapın ve ardından "Komut Dosyası Oluştur" u tıklayın. Size C #, appcmd veya AHAdmin kodu verecektir.

Ben birkaç ay boyunca bir web sayfası ön uç örnekleri takas ile yerinde yaşadım ve asla geri bakmıyorum. Geleneksel dağıtımlara kıyasla dağıtımları çok ferahlatıyor.


@Scott - takip için teşekkürler, daha önce hiç yapmadığım için ne gönderdiğimi bilmek genel delilik değil.
Mart'ta MattB

URL Yeniden Yazma kurallarında kesinti yapılmadan değişiklik yapma konusunda pek başarılı olamadım. Benim için çoğu zaman: URL'deki yeniden yazma kuralları yüksek trafik sunucularındaki herhangi bir değişiklik, CPU'yu ~ 5-10 saniye boyunca% 100'e yükseltir ve potansiyel olarak zaman aşımlarına ve kullanıcılardan algılanan yavaşlığa neden olur.
kavun

1
@kavun Evet, bunun gerçeği var. Son birkaç yıldaki bazı sürüm güncellemelerinde, global düzeyde URL Yeniden Yazma kuralları, tüm siteler için uygulama alanı geri dönüşümlerine neden olmaya başladı. Durum böyle değildi. Aynı sunucuda ASP.NET siteleriniz varsa, bunun bir etkisi olabilir. Ancak, sadece bunun için özel bir ARR sunucunuz varsa, bir uygulama alanı geri dönüşümü için ceza minimumdur ve yine de böyle iyi bir çözüm kullanabilirsiniz.
Scott Forsyth - MVP
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.