Không có thời gian tải lên / Rollback trong IIS


17

Tôi không chắc đây có phải là cách đúng để đặt câu hỏi này không, nhưng về cơ bản đây là những gì tôi muốn làm:

1.) Đẩy một bộ thay đổi đến một trang web trong IIS.
2.) Đừng làm gián đoạn người dùng.
3.) Có thể cuộn lại dễ dàng.

Vì vậy, có một vài điều mà tôi biết phải xảy ra:

1.) Hết phiên Proc - xử lý
2.) Hết bộ đệm Proc - xử lý

Vì vậy, các câu hỏi vẫn còn:
1.) Làm thế nào để tôi không làm gián đoạn người dùng? Nếu tôi chỉ tải các tệp lên bin, ứng dụng sẽ tái chế và mất hơn 10 giây để quay lại trực tuyến
2.) Làm thế nào để tôi quay lại dễ dàng?

Tôi đã nghĩ một giải pháp khả thi là có hai trang web được thiết lập trong IIS, một trang web công cộng và một trang web riêng tư. Tải lên đi đến riêng tư và được làm nóng. Sau khi khởi động, các trang web được hoán đổi. Một rollback chỉ đòi hỏi trao đổi sang riêng tư mà không cần tải lên.

Điều này có vẻ âm thanh trong lý thuyết, nhưng tôi không chắc chắn về cơ học. Có ý kiến ​​gì không?


@NickatUship: chỉ có 1 máy chủ mà trang web được lưu trữ trên? Và nếu không, bất kỳ khả năng thêm một giây?
MattB

@NickatUship: còn nữa, bạn đang dùng phiên bản IIS nào?
MattB

Chúng tôi có khả năng có thể giải quyết điều này với bộ cân bằng tải của chúng tôi - đó là sự thật. Tôi đã hy vọng có thể làm một cái gì đó trên máy chủ - nó sẽ hoạt động tốt hơn cho dòng chảy của chúng tôi. Chúng tôi đang ở trên IIS 7.
ChickenMilkBomb 24/03

Tôi tự hỏi nếu chúng tôi có thể sử dụng quy tắc viết lại URL toàn cầu để triển khai thời gian chết bằng 0) Viết lại * .domain.com thành * .arbitrarysiteA.com, một ứng dụng trong IIS 2.) tải lên * .arbitrarySiteB.com 3.) làm ấm nó lên 4.) chuyển đổi viết lại thành * .siteB.com
ChickenMilkBomb

Câu trả lời:


29

Đây là cách tôi sẽ tiếp cận vấn đề này - hãy nhớ rằng tôi chưa từng làm điều này trước đây, đó chỉ là những khái niệm mà tôi đã thử nghiệm một chút trong môi trường dev của mình. Bạn sẽ có thể thiết lập một khung công tác khá mạnh mẽ bằng cách sử dụng khung này và một số tập lệnh trong ngôn ngữ bạn chọn. Về cơ bản, chúng tôi sẽ thiết lập một môi trường cân bằng tải ghetto và sử dụng nó để chuyển đổi giữa trang web mới và trang web cũ.

Để thiết lập nó, bạn sẽ cần:

Cài đặt ARR để bắt đầu.

Thiết lập 3 trang web trong IIS:

  • Trang web 1 sẽ là trang web mà người dùng của bạn thực sự kết nối đến, giả sử http://192.168.1.1/. Đây cũng là trang web ARR. Chỉ cần thiết lập một thư mục trống để chỉ đến và đặt nó vào nhóm ứng dụng của riêng nó. Thiết lập nhóm ứng dụng để không hết thời gian theo các hướng dẫn này .
  • Trang web 2 và 3 sẽ là các trang web thực sự lưu trữ nội dung của bạn. Chúng cần phải có trên IP của chính chúng và do cách ARR hoạt động, trên một cổng khác với trang web 1. Hãy nói rằng chúng là http://192.168.1.2:8080http://192.168.1.3:8080. Họ cũng nên ở trong nhóm ứng dụng của riêng mình và trỏ đến các thư mục khác nhau trên hệ thống tệp (nhưng cả hai thư mục thường có cùng một nội dung)

Sau khi cài đặt ARR, sẽ có một danh mục mới trong IIS Manager có tên là "Server Farms" - nhấp chuột phải vào đó và tạo một trang trại mới.

  • đặt cho nó một cái tên có ý nghĩa với bạn
  • thêm Webserver 2 và Webserver 3 làm máy chủ - đảm bảo nhấp vào nút "cài đặt nâng cao", mở danh mục "applicationRequestRouting" và thay đổi httpPort thành 8080 cho mỗi máy chủ
  • Kết thúc trình hướng dẫn - bạn sẽ được hỏi nếu bạn muốn tạo quy tắc Viết lại URL - nhấp vào Có
  • Bây giờ bạn có cụm máy chủ - để hoàn tất cấu hình, hãy truy cập cụm máy chủ và nhấp vào nút cấu hình Proxy - bật "máy chủ ghi lại ngược trong tiêu đề phản hồi" và áp dụng các thay đổi
  • Trong Trình quản lý IIS, đi đến danh mục máy chủ cấp gốc và nhấp vào nút Viết lại URL, sẽ có một quy tắc được tạo cho trang trại của bạn
    • nhấp đúp vào quy tắc để đến cài đặt
    • mở hộp điều kiện
    • thêm một điều kiện mới cho {SERVER_PORT}không phù hợp với 8080
    • áp dụng các thay đổi

Tại thời điểm này, bạn có những điều cơ bản về những gì chúng tôi cần để thực hiện yêu cầu của bạn. Nếu bạn truy cập, http://192.168.1.1/bạn sẽ nhận được trang web của mình từ Trang web 1 hoặc Trang web 2, nhưng nó sẽ hoàn toàn liền mạch rằng có các trang web khác.

Bây giờ những gì bạn có thể làm khi bạn muốn triển khai một phiên bản mới của ứng dụng của mình là:

  • Drainstop 1 trong số các máy chủ trong trang trại của bạn (trong các công cụ nông trại của máy chủ, đi đến "Giám sát và quản lý", chọn máy chủ và chọn "Làm cho máy chủ không khả dụng một cách duyên dáng")
  • triển khai phiên bản mới của trang web tới hệ thống ngoại tuyến
  • khởi động trang web ngoại tuyến bằng IP / cổng thay thế
  • làm cho trang web có sẵn cho trang trại một lần nữa
  • lặp lại quá trình cho máy chủ khác

Công cụ Triển khai Web phát huy tác dụng khi bạn nói về việc muốn viết kịch bản tất cả những điều này. Nó giúp dễ dàng tạo một gói cho ứng dụng của bạn và triển khai nó từ dòng lệnh. Sau đó, bạn cũng có thể khôi phục gói đó một cách dễ dàng nếu có vấn đề. ARR cũng có thể được script bằng cách sử dụng các Microsoft.Web.Administrationdll.

Một điều khác - nếu bạn thực sự có trên Windows 2008 R2 (là IIS 7.5), hãy xem mô-đun khởi động ứng dụng - nó sẽ giúp bạn làm phần này ấm lên dễ dàng hơn.


Tuyệt vời - cảm ơn matt. +1 thậm chí chỉ để đặt tất cả điều này xuống. Tôi sẽ điều tra và lấy lại bảng.
ChickenMilkBomb

Hoàn hảo .. có thể không phải là bằng chứng ngu ngốc .. nhưng công việc điều tra
Vivek Kumbhar

1
Đây là câu trả lời cho việc triển khai không thời gian chết của các ứng dụng IIS. Tôi đã viết một hướng dẫn chuyên sâu về cách làm điều này + tự động hóa nó PowerShell.
kavun 8/11/2015

10

MattB đánh nó ra khỏi nước. +1 Tôi sẽ trả lời với nhiều chi tiết hơn nhưng tôi không muốn lấy điểm của anh ấy. Tôi sẽ thêm vào những gì anh ấy nói.

Tôi có một thiết lập tương tự như những gì anh ấy mô tả, và nó hoạt động rất tốt. ARR là cách để đi, ngay cả trên một máy chủ.

Tuy nhiên, một vài điều tôi sẽ thêm.

Tạo 2 trang web, như Matt khuyến nghị. Gọi cho họ một cái gì đó như yoursite.com01 và yoursite.com02.

Tạo 2 quy tắc Viết lại URL. Một cho www.yourdomain.com và thêm một staging.yourdomain.com. Để sản xuất, hãy sử dụng {HTTP_HOST} với giá trị (^ www.yourdomain.com $) | (yourIP). (hoặc bất kỳ ràng buộc nào bạn thích) Để dàn dựng, hãy sử dụng {HTTP_HOST} với giá trị là (^ staging.yourdomain.com $). Gọi các quy tắc yoursite.com và staging.yoursite.com.

Quy tắc Bind = yoursite.com đến trang web = yoursite.com01 và rule = staging.yoursite.com đến trang web = yoursite.com02.

Thiết lập FTP trên staging.yoursite.com.

Lưu lượng sản xuất hiện sẽ chuyển đến Rule = staging.yoursite.com và Site = yoursite.com01. Lảo đảo sang phía đối diện.

Bạn có thể triển khai để dàn dựng tại bất kỳ điểm nào, thử nghiệm, trước khi quay, kiểm tra người khác, v.v. Thực hiện trong ngày, điều đó không thành vấn đề. Triển khai vào cùng một tài khoản FTP mỗi lần. Hoạt động tuyệt vời với các máy chủ xây dựng.

Sau đó, khi bạn sẵn sàng phát trực tiếp, chỉ cần thực hiện 3 thay đổi: - di chuyển ràng buộc FTP từ yoursite.com02 sang yoursite.com01 - thay đổi Quy tắc viết lại URL yoursite.com để trỏ đến yoursite.com02 - thay đổi quy tắc Viết lại URL. yoursite.com để trỏ đến yoursite.com01

Bây giờ bạn có Zero thời gian chết, chuyển đổi tức thì, với chức năng khôi phục ngay lập tức!

Gotcha duy nhất của bạn để xem xét là trạng thái ngoài phiên của bạn. Đảm bảo rằng máy chủ trạng thái của bạn chấp nhận cả hai id trang web để bạn không bị mất trạng thái phiên trong quá trình trao đổi.

Cũng lưu ý rằng đây chỉ là web và không phải cơ sở dữ liệu.

Để tạo kịch bản, sử dụng Trình chỉnh sửa cấu hình. Thực hiện các thay đổi mà bạn muốn và sau đó nhấp vào "Tạo tập lệnh". Nó sẽ cung cấp cho bạn mã C #, appcmd hoặc AHAdmin.

Tôi đã có điều này tại chỗ trong một vài tháng với giao diện người dùng để trao đổi các trường hợp và tôi không bao giờ nhìn lại. Nó làm cho việc triển khai trở nên mới mẻ so với việc triển khai truyền thống.


@ Hủy bỏ - cảm ơn vì đã theo dõi, thật tốt khi biết những gì tôi đã đăng không phải là sự điên rồ chung vì tôi chưa bao giờ làm điều đó trước đây.
MattB

Tôi chưa có nhiều thành công khi thực hiện các thay đổi đối với quy tắc Viết lại URL mà không phát sinh thời gian chết. Phần lớn thời gian đối với tôi là: mọi thay đổi đối với quy tắc Viết lại URL trên các máy chủ lưu lượng truy cập cao sẽ tăng CPU lên 100% trong ~ 5-10 giây có khả năng gây ra thời gian chờ và nhận thấy sự chậm trễ từ người dùng.
kavun

1
@kavun Vâng, có sự thật đó. Tại một số phiên bản cập nhật trong vài năm qua, các quy tắc Viết lại URL ở cấp độ toàn cầu bắt đầu gây ra việc tái chế tên miền cho tất cả các trang web. Đó không phải là trường hợp. Vì vậy, nếu bạn có các trang web ASP.NET trên cùng một máy chủ thì có thể có một tác động. Tuy nhiên, nếu bạn có một máy chủ ARR chuyên dụng chỉ cho việc này thì hình phạt cho tái chế tên miền appd là tối thiểu và bạn vẫn có thể sử dụng một giải pháp tốt như thế này.
Scott Forsyth - MVP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.