ไม่มีดาวน์ไทม์อัปโหลด / ย้อนกลับใน IIS


17

ฉันไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องในการถามคำถามนี้หรือไม่ แต่นี่คือสิ่งที่ฉันต้องการทำ:

1. ) พุชเซ็ตการแก้ไขไปยังไซต์ใน IIS
2. ) อย่าขัดจังหวะผู้ใช้
3. ) สามารถย้อนกลับได้อย่างง่ายดาย

ดังนั้นมีบางสิ่งที่ฉันรู้ว่าต้องเกิดขึ้น:

1. ) Out of Proc session - จัดการ
2. ) Out of Proc cache - จัดการ

ดังนั้นคำถามที่เหลืออยู่:
1. ) ฉันจะป้องกันไม่ให้ผู้ใช้ขัดจังหวะได้อย่างไร? หากฉันเพิ่งอัปโหลดไฟล์ไปยังถังขยะแอปจะรีไซเคิลและใช้เวลา 10 + วินาทีในการกลับมาออนไลน์
2. ) ฉันจะย้อนกลับได้อย่างง่ายดายได้อย่างไร

ฉันคิดว่าวิธีแก้ปัญหาที่เป็นไปได้คือให้มีไซต์สองแห่งตั้งอยู่ใน IIS หนึ่งสาธารณะและส่วนตัวหนึ่งแห่ง การอัปโหลดจะเป็นแบบส่วนตัวและทำให้ร่างกายอุ่นขึ้น หลังจากวอร์มอัพไซต์จะถูกสลับ การย้อนกลับเป็นการแลกเปลี่ยนเป็นการส่วนตัวโดยไม่ต้องอัปโหลด

ดูเหมือนว่าจะเป็นไปตามทฤษฎี แต่ฉันก็ไม่แน่ใจในกลไก ความคิดใด ๆ


@NickatUship: มีเพียง 1 เซิร์ฟเวอร์ที่เว็บไซต์โฮสต์อยู่ และถ้าไม่ความเป็นไปได้ของการเพิ่มวินาที?
MattB

@NickatUship: ยังมีรุ่น IIS อะไรอยู่
MattB

เราสามารถแก้ปัญหานี้ได้ด้วย loadbalancer ของเรา - นั่นเป็นเรื่องจริง ฉันหวังว่าจะสามารถทำบางสิ่งบางอย่างบนเซิร์ฟเวอร์ของตัวเอง - มันจะทำงานได้ดีขึ้นสำหรับการไหลของเรา เราใช้ IIS 7
ChickenMilkBomb

ฉันสงสัยว่าเราสามารถใช้กฎการเขียนซ้ำ URL ส่วนกลางสำหรับการหยุดทำงานไม่เป็นศูนย์ 1) Rewrite * .domain.com เป็น * .arbitrarysiteA.com ซึ่งเป็นแอปใน IIS 2) อัปโหลดไปยัง * .arbitrarySiteB.com 3. ) อุ่นมัน up 4. ) เปลี่ยนการเขียนเป็น * .siteB.com
ChickenMilkBomb

คำตอบ:


29

นี่คือวิธีที่ฉันจะเข้าถึงปัญหานี้ - โปรดจำไว้ว่าฉันไม่ได้ทำมาก่อนมันเป็นเพียงแนวคิดที่ฉันทดสอบเล็กน้อยในสภาพแวดล้อมการพัฒนาของฉัน คุณควรจะสามารถตั้งค่ากรอบงานที่แข็งแกร่งโดยใช้สิ่งนี้และสคริปต์บางอย่างในภาษาที่คุณเลือก โดยทั่วไปเรากำลังจะตั้งค่าสภาพแวดล้อมการทำโหลดสลัมและใช้เพื่อสลับระหว่างไซต์ใหม่และไซต์เก่า

ในการติดตั้งคุณจะต้อง:

  • โมดูลIIS Application Request Routing (ARR)
  • เครื่องมือการปรับใช้ IIS เว็บ (msdeploy)
  • 3 เว็บไซต์ IIS ที่แตกต่างกัน (ที่มีที่อยู่ IP 3 ที่แตกต่างกัน - แค่ใช้พอร์ตหรือส่วนหัวโฮสต์อาจไม่ทำงานที่นี่)

ติดตั้ง ARR เพื่อเริ่มต้นด้วย

ติดตั้ง 3 เว็บไซต์ใน IIS:

  • เว็บไซต์ 1 http://192.168.1.1/จะเป็นเว็บไซต์ที่ผู้ใช้ของคุณจริงเชื่อมต่อให้พูด นี่คือเว็บไซต์ ARR เพียงตั้งค่าไดเรกทอรีที่ว่างเปล่าเพื่อให้ชี้ไปที่และวางไว้ในแอพของตัวเอง สระว่ายน้ำติดตั้งแอปไม่หมดเวลาตามคำแนะนำเหล่านี้
  • เว็บไซต์ 2 และ 3 จะเป็นเว็บไซต์ที่โฮสต์เนื้อหาของคุณ ความต้องการเหล่านี้จะอยู่ในไอพีของตัวเองและเนื่องจากวิธีการทำงานของ ARR ในพอร์ตที่แตกต่างจากเว็บไซต์ 1. ช่วยบอกว่าพวกเขามีและhttp://192.168.1.2:8080 http://192.168.1.3:8080พวกเขาควรอยู่ในกลุ่มแอพของตัวเองและชี้ไปที่ไดเรกทอรีต่าง ๆ บนระบบไฟล์ (แต่ไดเรกทอรีทั้งคู่มีเนื้อหาเหมือนกัน)

หลังจากติดตั้ง ARR จะมีหมวดหมู่ใหม่ในตัวจัดการ IIS ที่เรียกว่า "เซิร์ฟเวอร์ฟาร์ม" - คลิกขวาที่และสร้างฟาร์มใหม่

  • ให้ชื่อที่มีความหมายกับคุณ
  • เพิ่ม Webserver 2 และ Webserver 3 เป็นเซิร์ฟเวอร์ตรวจสอบให้แน่ใจว่าได้คลิกปุ่ม "การตั้งค่าขั้นสูง" เปิดหมวดหมู่ "applicationRequestRouting" และเปลี่ยน httpPort เป็น 8080 สำหรับแต่ละเซิร์ฟเวอร์
  • เสร็จสิ้นตัวช่วยสร้าง - คุณจะถูกถามว่าคุณต้องการสร้างกฎการเขียนซ้ำ URL หรือไม่คลิกใช่
  • ตอนนี้คุณมีเซิร์ฟเวอร์ฟาร์ม - เพื่อสิ้นสุดการกำหนดค่าให้ไปที่ฟาร์มและคลิกปุ่มการกำหนดค่าพร็อกซี - เปิด "ย้อนกลับเขียนโฮสต์ใหม่ในส่วนหัวตอบกลับ" และใช้การเปลี่ยนแปลง
  • ใน IIS Manager ให้ไปที่หมวดเซิร์ฟเวอร์ระดับรากแล้วคลิกปุ่ม URL Rewrite จะมีกฎที่สร้างขึ้นสำหรับฟาร์มของคุณ
    • ดับเบิลคลิกที่กฎเพื่อไปที่การตั้งค่า
    • เปิดกล่องเงื่อนไข
    • เพิ่มเงื่อนไขใหม่สำหรับ{SERVER_PORT}ไม่ตรงกับ 8080
    • ใช้การเปลี่ยนแปลง

ณ จุดนี้คุณมีพื้นฐานของสิ่งที่เราจำเป็นต้องทำตามคำขอของคุณ หากคุณไปที่http://192.168.1.1/คุณจะได้รับเว็บไซต์ของคุณจากเว็บไซต์ 1 หรือเว็บไซต์ 2 แต่จะราบรื่นอย่างสมบูรณ์ว่ามีเว็บไซต์อื่น ๆ

ตอนนี้สิ่งที่คุณสามารถทำได้เมื่อคุณต้องการปรับใช้แอปพลิเคชันเวอร์ชันใหม่ของคุณคือ:

  • drainstop 1 ของเซิร์ฟเวอร์ในฟาร์มของคุณ (ในเครื่องมือเซิร์ฟเวอร์ฟาร์มไปที่ "การตรวจสอบและการจัดการ" เลือกเซิร์ฟเวอร์และเลือก "ทำให้เซิร์ฟเวอร์ไม่พร้อมใช้งานอย่างสง่างาม")
  • ปรับใช้รุ่นใหม่ของไซต์ไปยังระบบที่ออฟไลน์
  • อุ่นไซต์ที่ออฟไลน์โดยใช้ IP / พอร์ตสำรอง
  • ทำให้ไซต์พร้อมใช้งานสำหรับฟาร์มอีกครั้ง
  • ทำซ้ำกระบวนการสำหรับเซิร์ฟเวอร์อื่น

เครื่องมือการปรับใช้เว็บจะปรากฏขึ้นเมื่อคุณพูดถึงความต้องการที่จะเขียนสคริปต์ทั้งหมดนี้ มันทำให้ง่ายสุด ๆ ในการสร้างแพ็คเกจสำหรับแอปพลิเคชันของคุณและปรับใช้จากบรรทัดคำสั่ง คุณสามารถย้อนกลับแพคเกจนั้นได้อย่างง่ายดายหากมีปัญหา ARR สามารถสคริปต์ได้โดยใช้Microsoft.Web.AdministrationDLLs

อีกอย่างหนึ่ง - ถ้าคุณอยู่บน Windows 2008 R2 (ซึ่งก็คือ IIS 7.5) ลองดูที่Application Warmup module - มันน่าจะทำให้การอุ่นเครื่องของคุณง่ายขึ้นเช่นกัน


ยอดเยี่ยม - ขอบคุณมาก +1 แม้เพียงวางสิ่งนี้ลง ฉันจะตรวจสอบและกลับไปที่กระดาน
ChickenMilkBomb

สมบูรณ์แบบ .. อาจไม่ได้เป็นข้อพิสูจน์ที่ผิดพลาด แต่มีการตรวจสอบงาน
Vivek Kumbhar

1
นี่คือคำตอบสำหรับการหยุดทำงานที่ไม่มีการปรับใช้ของแอปพลิเคชัน IIS ฉันเขียนบทช่วยสอนเชิงลึกเกี่ยวกับวิธีการทำสิ่งนี้ + ทำให้ PowerShell เป็นแบบอัตโนมัติ
kavun

10

แมตต์ตีมันจากน้ำ +1 ฉันจะตอบกลับพร้อมรายละเอียดเพิ่มเติม แต่ฉันไม่ต้องการรับคะแนนของเขา ฉันจะเพิ่มสิ่งที่เขาพูด

ฉันมีการตั้งค่าที่คล้ายกับสิ่งที่เขาอธิบายและใช้งานได้ดี ARR เป็นวิธีที่จะไปแม้กระทั่งบนเซิร์ฟเวอร์เดียว

อย่างไรก็ตามสองสามสิ่งที่ฉันจะเพิ่ม

สร้าง 2 ไซต์ตามที่ Matt แนะนำ เรียกพวกเขาว่า yoursite.com01 และ yoursite.com02

สร้างกฎการเขียนซ้ำ URL 2 รายการ หนึ่งรายการสำหรับ www.yourdomain.com และอีกหนึ่ง staging.yourdomain.com สำหรับการผลิตให้ใช้ {HTTP_HOST} ด้วยค่า (^ www.yourdomain.com $) | (yourIP) (หรือสิ่งที่คุณต้องการผูก) สำหรับการแสดงละครใช้ {HTTP_HOST} ด้วยค่า (^ staging.yourdomain.com $) โทรกฎ yoursite.com และ staging.yoursite.com

ผูกกฎ = yoursite.com ไปยังไซต์ = yoursite.com01 และกฎ = staging.yoursite.com ไปยังไซต์ = yoursite.com02

ติดตั้ง FTP บน staging.yoursite.com

ทราฟฟิกการผลิตกำลังไปที่ Rule = staging.yoursite.com และไซต์ = yoursite.com01 ตรงไปตรงมา

คุณสามารถปรับใช้กับการแสดงละคร ณ จุดใดก็ได้ทดสอบ pre-spinup มีคนอื่นทดสอบ ฯลฯ ทำในระหว่างวันมันไม่สำคัญ ปรับใช้กับบัญชี FTP เดียวกันทุกครั้ง ใช้งานได้ดีกับการสร้างเซิร์ฟเวอร์

จากนั้นเมื่อคุณพร้อมใช้งานเพียงทำการเปลี่ยนแปลง 3 รายการ: - ย้ายการเชื่อมโยง FTP จาก yoursite.com02 ไปยัง yoursite.com01 - เปลี่ยน URL การเขียนซ้ำกฎ yoursite.com ให้ชี้ไปที่ yoursite.com02 - เปลี่ยนการแสดงละคร URL กฎการเขียนซ้ำ yoursite.com ให้ชี้ไปที่ yoursite.com01

ตอนนี้คุณมีการหยุดทำงานเป็นศูนย์เปลี่ยนได้ทันทีด้วยฟังก์ชันย้อนกลับได้ทันที!

gotcha เดียวที่คุณต้องพิจารณาคือสถานะเซสชันที่ไม่อยู่ในกระบวนการ ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์สถานะของคุณยอมรับทั้งรหัสไซต์เพื่อให้คุณไม่สูญเสียสถานะเซสชันระหว่างการสลับ

โปรดทราบว่านี่เป็นเว็บเท่านั้นและไม่ใช่ฐานข้อมูล

สำหรับการเขียนสคริปต์ให้ใช้เครื่องมือแก้ไขการกำหนดค่า ทำการเปลี่ยนแปลงที่คุณต้องการแล้วคลิกที่ "สร้างสคริปต์" มันจะให้รหัส C #, appcmd หรือ AHAdmin แก่คุณ

ฉันมีสิ่งนี้มาหลายเดือนแล้วโดยมีส่วนหน้าของหน้าเว็บเพื่อแลกเปลี่ยนอินสแตนซ์และฉันไม่เคยมองย้อนกลับ มันทำให้การปรับใช้สดชื่นมากเมื่อเทียบกับการปรับใช้แบบดั้งเดิม


@Scott - ขอบคุณสำหรับการติดตามดีที่รู้ว่าสิ่งที่ฉันโพสต์ไม่ได้บ้าทั่วไปเพราะฉันไม่เคยทำมาก่อน
MattB

ฉันไม่ประสบความสำเร็จในการเปลี่ยนแปลงกฎการเขียนซ้ำ URL โดยไม่หยุดทำงาน เวลาส่วนใหญ่ของฉันคือ: การเปลี่ยนแปลงกฎ URL Rewrite บนเซิร์ฟเวอร์ที่มีปริมาณการใช้งานสูงจะขัดขวาง CPU เป็น 100% เป็นเวลาประมาณ 5-10 วินาทีซึ่งอาจทำให้หมดเวลาและรับรู้ความช้าจากผู้ใช้
kavun

1
@kavun ใช่มีความจริงที่ว่า ในการอัปเดตบางรุ่นในช่วงไม่กี่ปีที่ผ่านมากฎการเขียนซ้ำ URL ในระดับโลกเริ่มทำให้แอปโดเมนหมุนเวียนในทุกไซต์ ไม่เคยเป็นอย่างนั้น ดังนั้นหากคุณมีไซต์ ASP.NET บนเซิร์ฟเวอร์เดียวกันอาจมีผลกระทบ อย่างไรก็ตามหากคุณมีเซิร์ฟเวอร์ ARR เฉพาะสำหรับเรื่องนี้แล้วโทษสำหรับการรีไซเคิลแอปโดเมนนั้นน้อยมากและคุณยังสามารถใช้วิธีแก้ปัญหาที่ดีเช่นนี้ได้
Scott Forsyth - MVP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.