Upload downtime nol / Kembalikan dalam IIS

17

Saya tidak yakin apakah ini cara yang tepat untuk mengajukan pertanyaan ini, tetapi pada dasarnya inilah yang ingin saya lakukan:

1.) Dorong perubahan ke situs di IIS.
2.) Jangan mengganggu pengguna.
3.) Dapat memutar kembali dengan mudah.

Jadi, ada beberapa hal yang saya tahu harus terjadi:

1.) Keluar dari sesi Proc - ditangani
2.) Keluar dari cache Proc - ditangani

Jadi pertanyaan yang tersisa:
1.) Bagaimana saya menjaga agar tidak mengganggu pengguna? Jika saya hanya mengunggah file ke bin, aplikasi mendaur ulang dan membutuhkan waktu 10+ detik untuk kembali online
2.) Bagaimana cara saya memutar kembali dengan mudah?

Saya berpikir solusi yang mungkin adalah membuat dua situs didirikan di IIS, satu publik dan satu pribadi. Unggah menjadi pribadi dan menjadi hangat. Setelah pemanasan, situs-situs tersebut ditukar. Kembalikan hanya memerlukan swapping ke pribadi tanpa mengunggah.

Ini sepertinya teori, tetapi saya tidak yakin dengan mekanika. Ada ide?

ChickenMilkBomb
sumber
@NickatUship: apakah hanya ada 1 server yang di-host di situs web? Dan jika tidak, ada kemungkinan menambahkan satu detik?
MattB
@NickatUship: juga, versi IIS apa yang Anda pakai?
MattB
Kami berpotensi menyelesaikan ini dengan loadbalancer kami - itu benar. Saya berharap dapat melakukan sesuatu di server itu sendiri - itu akan bekerja lebih baik untuk aliran kami. Kami menggunakan IIS 7.
ChickenMilkBomb
saya ingin tahu apakah kita dapat menggunakan aturan penulisan ulang URL global untuk penerapan nol downtime 1) Tulis ulang * .domain.com menjadi * .bitbitsitesite.com yang merupakan aplikasi di IIS 2.) unggah ke * .arbitrarySiteB.com 3.) hangatkan up 4.) alihkan penulisan ulang ke * .siteB.com
ChickenMilkBomb

Jawaban:

29

Inilah cara saya mendekati masalah ini - perlu diingat saya belum pernah melakukan ini sebelumnya, hanya konsep yang saya uji sedikit di lingkungan dev saya. Anda harus dapat mengatur kerangka kerja yang cukup kuat menggunakan ini dan beberapa skrip dalam bahasa pilihan Anda. Pada dasarnya kita akan mengatur lingkungan penyeimbangan beban ghetto dan menggunakannya untuk beralih antara situs baru dan situs lama.

Untuk mendapatkannya, Anda perlu:

Instal ARR untuk memulai.

Setup 3 situs web di IIS:

  • Situs web 1 akan menjadi situs yang benar-benar terhubung dengan pengguna Anda, katakanlah http://192.168.1.1/. Ini juga situs ARR. Cukup siapkan direktori kosong untuk menunjuk ini, dan letakkan di kumpulan aplikasinya sendiri. Siapkan kumpulan aplikasi untuk tidak kehabisan waktu sesuai dengan instruksi ini .
  • Situs web 2 dan 3 akan menjadi situs yang benar-benar meng-host konten Anda. Ini harus pada IP mereka sendiri dan karena cara kerja ARR, pada port yang berbeda dari situs web 1. Mari kita katakan mereka http://192.168.1.2:8080dan http://192.168.1.3:8080. Mereka juga harus berada di kumpulan aplikasi mereka sendiri, dan arahkan ke direktori berbeda pada sistem file (tetapi biasanya kedua direktori memiliki konten yang sama)

Setelah menginstal ARR, akan ada kategori baru di IIS Manager yang disebut "Server Farms" - klik kanan itu dan buat farm baru.

  • berikan nama yang bermakna bagi Anda
  • tambahkan Webserver 2 dan Webserver 3 sebagai server - pastikan untuk mengklik tombol "pengaturan lanjutan", buka kategori "applicationRequestRouting" dan ubah httpPort ke 8080 untuk setiap server
  • Selesaikan wisaya - Anda akan ditanya apakah Anda ingin membuat aturan penulisan ulang URL - klik Ya
  • Anda sekarang memiliki server farm - untuk menyelesaikan konfigurasi, pergi ke farm dan klik tombol Proxy configuration - nyalakan "reverse host penulisan ulang di header respons" dan terapkan perubahannya
  • Di IIS Manager, buka kategori server level root dan klik tombol URL Tulis Ulang, akan ada aturan yang dibuat untuk tambak Anda
    • klik dua kali aturan untuk menuju ke pengaturan
    • buka kotak Ketentuan
    • tambahkan kondisi baru untuk {SERVER_PORT}tidak cocok dengan 8080
    • terapkan perubahannya

Pada titik ini Anda memiliki dasar-dasar tentang apa yang kami butuhkan untuk memenuhi permintaan Anda. Jika Anda pergi ke http://192.168.1.1/Anda akan mendapatkan situs web Anda baik dari Situs 1 atau Situs 2, tetapi akan benar-benar mulus bahwa ada situs lain.

Sekarang yang dapat Anda lakukan ketika Anda ingin menggunakan versi baru aplikasi Anda adalah:

  • tiriskan 1 dari server di pertanian Anda (di alat pertanian server, buka "Monitoring dan Manajemen", pilih server dan pilih "Jadikan server tidak tersedia dengan anggun")
  • menyebarkan versi baru situs Anda ke sistem yang offline
  • pemanasan situs yang sedang offline menggunakan IP / port alternatifnya
  • buat situs tersedia untuk pertanian lagi
  • ulangi proses untuk server lain

Alat Penerapan Web mulai digunakan saat Anda berbicara tentang keinginan untuk skrip semua ini. Itu membuatnya sangat mudah untuk membuat paket untuk aplikasi Anda dan menyebarkannya dari baris perintah. Anda juga dapat mengembalikan paket itu dengan mudah jika ada masalah. ARR juga bisa skrip menggunakan Microsoft.Web.Administrationdll.

Satu hal lagi - jika Anda benar-benar menggunakan Windows 2008 R2 (yaitu IIS 7.5) lihatlah modul Aplikasi Pemanasan - itu akan membuat bagian pemanasan ini juga lebih mudah bagi Anda.

MattB
sumber
Luar biasa - terima kasih, matt. +1 bahkan hanya untuk meletakkan ini semua. Saya akan menyelidiki dan kembali ke papan tulis.
ChickenMilkBomb
Sempurna .. mungkin bukan bukti bodoh .. tapi investigasi kerja
Vivek Kumbhar
1
Ini adalah jawaban untuk nol downtime penyebaran aplikasi IIS. Saya menulis tutorial mendalam tentang cara melakukan ini + mengotomatiskannya PowerShell.
kavun
10

MattB memukulnya keluar dari air. +1 Saya akan membalas dengan lebih detail, tetapi saya tidak ingin mengambil poinnya. Saya akan menambahkan apa yang dia katakan.

Saya memiliki pengaturan yang mirip dengan apa yang dia gambarkan, dan itu bekerja dengan baik. ARR adalah cara untuk pergi, bahkan di satu server.

Namun, beberapa hal akan saya tambahkan.

Buat 2 situs, seperti yang disarankan Matt. Sebut mereka sesuatu seperti yoursite.com01 dan yoursite.com02.

Buat 2 aturan penulisan ulang URL. Satu untuk www.domainanda.com dan satu lagi staging.domainanda.com. Untuk produksi, gunakan {HTTP_HOST} dengan nilai (^ www.domainanda.com $) | (yourIP). (atau ikatan apa pun yang Anda inginkan) Untuk pementasan, gunakan {HTTP_HOST} dengan nilai (^ staging.yourdomain.com $). Hubungi aturan yoursite.com dan staging.yoursite.com.

Bind Rule = yoursite.com ke situs = yoursite.com01 dan aturan = staging.yoursite.com ke situs = yoursite.com02.

Setup FTP di staging.yoursite.com.

Lalu lintas produksi sekarang akan menuju Aturan = staging.yoursite.com dan Situs = yoursite.com01. Menguntit sebaliknya.

Anda dapat menggunakan untuk pementasan di titik mana pun, uji, pra-spinup, tes orang lain, dll. Lakukan di siang hari, itu tidak masalah. Sebarkan setiap kali ke akun FTP yang sama. Bekerja sangat baik dengan membangun server.

Kemudian, ketika Anda siap untuk tayang, cukup buat 3 perubahan: - pindahkan pengikatan FTP dari yoursite.com02 ke yoursite.com01 - ubah URL Rewrite Rule yoursite.com untuk mengarah ke yoursite.com02 - ubah pementasan URL Rewrite Rule. yoursite.com untuk menunjuk ke yoursite.com01 Anda

Sekarang Anda memiliki Zero downtime, switching instan, dengan fungsionalitas roll-back langsung!

Satu-satunya hal yang perlu Anda pertimbangkan adalah keadaan sesi Anda di luar proses. Pastikan server negara Anda menerima kedua id situs sehingga Anda tidak kehilangan status sesi selama swap.

Perhatikan juga bahwa ini hanya web dan bukan database.

Untuk skrip, gunakan Editor Konfigurasi. Buat perubahan yang Anda inginkan dan kemudian klik "Hasilkan Script". Ini akan memberi Anda kode C #, appcmd atau AHAdmin.

Saya sudah memiliki ini di tempat selama beberapa bulan dengan ujung halaman web untuk bertukar contoh dan saya tidak pernah melihat ke belakang. Itu membuat penyebaran jadi lebih menyegarkan dibandingkan dengan penyebaran tradisional.

Scott Forsyth - MVP
sumber
@Scott - terima kasih atas tindak lanjutnya, senang mengetahui apa yang saya posting bukan kegilaan umum karena saya belum pernah melakukannya sebelumnya.
MattB
Saya belum banyak berhasil membuat perubahan pada aturan Penulisan Ulang URL tanpa mengalami downtime. Sebagian besar waktu bagi saya adalah: setiap perubahan pada aturan penulisan ulang URL pada server lalu lintas tinggi akan melonjak CPU menjadi 100% selama ~ 5-10 detik berpotensi menyebabkan waktu habis dan kelambatan yang dirasakan dari pengguna.
kavun
1
@kavun Ya, ada kebenarannya. Pada beberapa pembaruan versi dalam beberapa tahun terakhir, aturan penulisan ulang URL di tingkat global mulai menyebabkan daur ulang appdomain untuk semua situs. Itu tidak terjadi. Jadi jika Anda memiliki situs ASP.NET di server yang sama maka mungkin ada dampaknya. Namun, jika Anda memiliki server ARR khusus hanya untuk ini, maka penalti untuk daur ulang appdomain minimal dan Anda masih dapat menggunakan solusi yang baik seperti ini.
Scott Forsyth - MVP