Vấn đề về trạng thái phiên của máy chủ web IIS 7.5 cân bằng tải


14

chúng tôi gặp sự cố với một trang web ASP.NET nơi các phiên của người dùng đang hoạt động kỳ quặc - dữ liệu phiên xuất hiện, biến mất và xuất hiện lại.

Tôi nghĩ tôi biết vấn đề là gì:

  1. Thiết lập của chúng tôi là 2 x Tải WebServers cân bằng + cơ sở dữ liệu trạng thái phiên đơn.
  2. Bộ lưu trữ trạng thái phiên ASP.NET SQL dường như phụ thuộc vào ID Instance của Trang web IIS (ID Metabase) để xác định duy nhất ID cookie phiên đến và truy xuất / lưu trữ giá trị.
  3. ID trường hợp trang web IIS của trang web khác nhau trên mỗi máy chủ trực tiếp (ID / W3SVC / 1 / Root trên máy chủ web A, ID / W3SVC / 2 / Root trên máy chủ web B).
  4. Cân bằng tải không sử dụng mối quan hệ khách hàng để mỗi yêu cầu HTTP của người dùng có thể đi đến một trong hai máy chủ.

Do đó, khi người dùng đăng nhập vào trang web và di chuyển xung quanh, mỗi cuộc gọi HTTP có thể đi đến một trong hai máy chủ web và do đó sử dụng bản ghi Trạng thái Phiên với các ID khác nhau tùy thuộc vào máy chủ. Trong thực tế, người dùng sẽ đồng thời có 2 phiên phiên riêng biệt. Tôi tin rằng tôi đã xác minh điều này như trong cơ sở dữ liệu bảng ASPStateTempSments của , mỗi ID cookie phiên dường như tương ứng với 2 bản ghi có tên gần như giống hệt nhau (ID của chúng chỉ khác nhau bởi một vài ký tự cuối cùng, mà tôi tin là một công cụ sửa đổi dựa trên AppID từ Bảng AspStateTempAppluggest ) được tạo trong vòng vài giây với nhau.

Do đó, Trạng thái Phiên sẽ xuất hiện sai khi các thay đổi được thực hiện cho một bản ghi phiên sẽ chỉ tồn tại đối với máy chủ web đó. Nếu Người dùng di chuyển đến máy chủ cân bằng tải khác, các giá trị phiên sẽ dường như biến mất hoặc hoàn nguyên.

Tôi tin rằng giải pháp là đồng bộ hóa ID Instance IIS của các trang web (ví dụ: tạo cả hai / W3SVC / 1 / Root ), nhưng tôi đã cố gắng chỉnh sửa giá trị đó trong IIS trong Cài đặt nâng cao và mặc dù nó đã được lưu trang web trả về 404 trên máy chủ đó cho đến khi tôi thay đổi lại.

Tôi tìm thấy tập lệnh VBS cho vấn đề này nhưng dường như chỉ dành cho IIS 6 nên tôi lo lắng về việc thử nó. Có ai khác gặp phải tình huống này trên IIS 7.5 không, và bạn đã khắc phục nó như thế nào?


EDIT / GIẢI PHÁP

Lỗi của tôi là tôi đã quên khởi động lại IIS sau khi tôi thay đổi ID trường hợp trang web trong IIS. Sau này, ID đã được cập nhật và các phiên ASP.NET được đồng bộ hóa trên hai máy chủ web.

Hướng dẫn đầy đủ:

  1. Remote Desktop lên máy chủ LIVE1, mở IIS Mgr, nhấp vào trang web có vấn đề và chọn Cài đặt nâng cao trong thanh bên.
  2. Thay đổi ID thành một cái gì đó duy nhất, ví dụ 10. Nhấp vào OK.
  3. Khởi động lại dịch vụ web ( c:\windows\system32\iisreset /restart)

Thực hiện tương tự cho LIVE2 (đảm bảo ID trang web giống như trên LIVE1)

Lưu ý rằng ID trang web sẽ ảnh hưởng đến vị trí của tệp trang web, ví dụ: thư mục tệp nhật ký sẽ trở thành C:\inetpub\logs\LogFiles\W3SVC10 ví dụ.

Cũng lưu ý rằng bạn có thể thực hiện các thay đổi này theo cách thủ công bằng cách chỉnh sửa thuộc tính id trang web trong tệp cấu hình IIS trên mỗi máy chủ : C:\Windows\System32\inetsrv\config\applicationHost.config. Yêu cầu quản trị viên tư nhân và vẫn cần thiết lập lại sau đó.

Câu trả lời:


11

Đánh giá theo câu hỏi của bạn, có vẻ như bạn có một máy chủ trạng thái phiên trung tâm (DB?) Theo dõi dữ liệu phiên?

Bạn cũng phải đồng bộ hóa khóa máy được sử dụng để mã hóa cho mọi xác thực mẫu vv để hoạt động. Điều này cũng có thể ảnh hưởng đến việc xác định phiên, tôi không chắc chắn.

Cấu hình các phím máy trong IIS 7

Hơn nữa, bạn nên sử dụng cấu hình được chia sẻ giữa các máy, nó có thể tự khắc phục sự cố với các phím máy khác nhau.

Đồng bộ hóa cấu hình IIS cho Web Server Farm?

EDIT: Khi bạn thay đổi ID trang web, bạn đã thử khởi động lại trình quản lý IIS để xem liệu webroot có thay đổi không? Có thể cấu hình được kết nối với ID có nghĩa là thay đổi ID cũng sửa đổi nội dung như gốc tài liệu, v.v.


Cảm ơn những ý tưởng của Jishi nhưng tôi đã đồng bộ hóa machineKey trong web.configs. Tôi đoán rằng tôi thực sự đang tìm cách thay đổi ID Instance IIS của một trang web mà không phải xóa hoàn toàn và cấu hình lại các trang web trên các máy chủ web.
James McCormack

Khi bạn thay đổi ID trang web, bạn đã thử khởi động lại trình quản lý IIS để xem liệu webroot có thay đổi không? Có thể cấu hình được kết nối với ID có nghĩa là thay đổi ID cũng sửa đổi nội dung như gốc tài liệu, v.v.
jishi

1
Đúng, thế thôi! Tôi quên khởi động lại dịch vụ IIS (dòng lệnh iisreset / restart). Làm việc tốt sau đó! Vui lòng cập nhật câu trả lời của bạn với thông tin này và tôi sẽ cung cấp cho bạn Câu trả lời được chấp nhận.
James McCormack

Thỏa thuận được thực hiện. Mừng vì việc này giúp ích được cho bạn.
jishi
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.