cân bằng tải nhiều trường hợp drupal ngang


8

Tôi đã phát triển REST WebAPI bằng mô-đun Dịch vụ. Nó hoạt động tốt. Tôi có một ứng dụng khách API đó với việc sử dụng dự kiến ​​yêu cầu tôi mở rộng theo chiều ngang đối tượng Drupal của mình. Lưu ý rằng do bản chất của API của tôi, yêu cầu tài nguyên CPU và GPU đáng kể, tôi không thể sử dụng máy chủ đám mây. Ngoài ra, do bản chất của API của tôi, các phiên bản Drupal phải chạy trên HĐH Windows. .

  • Một máy chủ CentOS chạy HaProxy làm bộ cân bằng tải phía trước,
  • Hai để bắt đầu, với nhiều bổ sung khi cần, các máy chủ Windows Server 2008 R2 lưu trữ Drupal,
  • Một máy chủ cơ sở dữ liệu CentOS cung cấp một cơ sở dữ liệu cho nhiều phiên bản Drupal,
  • Một máy chủ cơ sở dữ liệu CentOS chạy ở chế độ sao chép trong trường hợp máy chủ DB 1 chết.

Câu hỏi của tôi liên quan đến cách thức hoạt động của bộ cân bằng tải HaProxy. Tôi giả định rằng các sessionIds được tạo bởi các phiên bản Drupal sẽ là duy nhất với nhau. Bộ cân bằng tải có nhìn vào sessionId và định tuyến tất cả các yêu cầu đến cùng một máy chủ đã tạo ra sessionId đó không? Giao tiếp REST WebAPI sẽ hoạt động như thế nào nếu cân bằng tải khiến mỗi yêu cầu API chuyển đến một máy chủ khác nhau? Có bất kỳ và tất cả dữ liệu được tham chiếu bởi WebAPI phải được lưu trữ trong cơ sở dữ liệu vì tôi không thể đảm bảo rằng nhiều yêu cầu API cho cùng một tài nguyên sẽ được chuyển đến cùng một phiên bản Drupal?


Câu hỏi rất thú vị. Mặc dù vậy, tôi không thể cảm thấy rằng đó là một câu hỏi chung chung hơn là một câu hỏi nghiêm túc về Drupal (nó có thể áp dụng cho bất kỳ API REST dựa trên PHP nào sử dụng xác thực phiên nếu tôi đọc đúng); nếu đó là trường hợp bạn có thể được lợi từ việc gắn cờ để nó được di chuyển đến trang web SO chính. Chỉ cần một suy nghĩ :)
Clive

+1 để tìm thêm thông tin ở nơi khác. Bạn có thể sử dụng hầu hết các lời khuyên để nhân rộng bất kỳ ứng dụng PHP nào với Drupal. Vì nhận xét của tôi chỉ là một chút quá dài, tôi đã đăng một câu trả lời có thể giúp bạn tìm thấy những gì bạn cần.
rocketeerbkw

Cảm ơn rocketeerbkw và Berdir vì những hiểu biết của bạn. Trong nghiên cứu liên tục của tôi về vấn đề này, tôi đã biết rằng HaProxy không xử lý SSL bằng các phiên dính và tôi cần sử dụng một cái gì đó như stunnel cho SSL, vì tất cả các giao tiếp API của tôi đều qua SSL. Có vẻ như cần nhiều nghiên cứu hơn để hiểu đầy đủ động thái tiếp theo của tôi ở đây.
Blake Senftner

Và nhiều nghiên cứu hơn dường như chỉ ra cấu hình của tôi cần giống như tier1: máy chủ tường lửa & stunnel, tier2: bộ cân bằng tải, tier3: nhiều máy chủ web drupal, tier4: máy chủ cơ sở dữ liệu dùng chung, tier5: máy chủ cơ sở dữ liệu sao chép. Và có thể cùng với tier4 một SAN để lưu trữ tệp được chia sẻ cho nhiều phiên bản Drupal. Bất kỳ cái nhìn sâu sắc, mẩu bánh mì, hoặc các bài viết web mô tả những người thiết lập một cái gì đó như thế này đều được chào đón.
Blake Senftner

Câu trả lời:


12

Có nhiều máy chủ web đằng sau một bộ cân bằng tải / proxy ngược là khá phổ biến đối với Drupal và được hỗ trợ tốt. Varnish thường được sử dụng trong thế giới Linux bởi vì thứ đó cực kỳ nhanh khi có thể thực sự sử dụng nó, nghĩa là khách truy cập ẩn danh. Đó rõ ràng không phải là trường hợp cho trang web của bạn.

Các phiên được lưu trữ trong cơ sở dữ liệu theo mặc định, vì vậy đó không phải là vấn đề. Điều khác duy nhất cần được chia sẻ trên tất cả các máy chủ là thư mục tệp công khai và bất kỳ tệp nào khác giống như các tệp riêng tư nếu bạn đang sử dụng một cái gì đó như thế). Trong hầu hết các trường hợp, một hệ thống tệp được chia sẻ / phân phối như NFS được sử dụng cho việc này mặc dù có một số cách tiếp cận nâng cao hơn. Trên một trang web mà tôi tham gia là hệ thống tệp được cung cấp bởi một máy chủ khác là NFS-mount trên các máy chủ Drupal (vì vậy truy cập chậm) và đang được Lighthttpd phân phối dưới một tên miền khác. Nhưng một lần nữa, điều đó có lẽ không phù hợp với bạn vì bạn sẽ không đến máy chủ nhiều hình ảnh và tập tin css, tôi đoán vậy.

Như được đề cập bởi rocketeerbkw, có các phụ trợ bộ đệm cho Memcache, Redis và những người khác. Cho đến nay, Ive chỉ sử dụng Memcache nhưng gần đây tôi đã bắt đầu tìm hiểu về Redis và nó có vẻ rất hứa hẹn nhưng tôi không chắc liệu nó có sẵn cho Windows hay không. Tuy nhiên, có thể thiết lập một máy chủ Linux riêng được sử dụng cho bộ đệm. Drupal 7 phụ thuộc rất nhiều vào bộ nhớ cache, việc có thể đưa chúng ra khỏi cơ sở dữ liệu là rất quan trọng vì hai lý do:

  1. Các công cụ như Redis và Memcache được thiết kế để tra cứu dựa trên khóa nhanh và chúng giữ dữ liệu của chúng luôn trong bộ nhớ để giúp việc tra cứu nhanh nhất có thể. Họ cũng đã tích hợp hỗ trợ để tự động dọn dẹp dữ liệu bộ đệm cũ nếu giới hạn được định cấu hình gần hơn.

  2. Có thể thậm chí quan trọng hơn, nó giúp tải cơ sở dữ liệu xuống. Khi bạn đã có thiết lập cơ bản tại chỗ, việc thêm các máy chủ web bổ sung rất dễ dàng. Khi bạn bắt đầu đạt đến giới hạn của một máy chủ cơ sở dữ liệu, mọi thứ sẽ phức tạp hơn nhiều và bạn cần xem xét những thứ như sao chép chính / chủ (Drupal 7 không thực sự thu được nhiều từ môi trường chính / phụ).

Vì vậy, về cơ bản, đó chỉ là API của riêng bạn mà bạn cần quan tâm. Nếu có thể, bạn cần đảm bảo rằng mọi thứ luôn có sẵn từ tất cả các máy chủ. Bạn có thể sử dụng cơ sở dữ liệu, hệ thống tệp hoặc một cái gì đó khác (Drupal cũng có thể sử dụng MongoDB để lưu trữ dữ liệu nhất định, ví dụ như các trường). Nếu đó không phải là một tùy chọn, thì bạn sẽ cần phải sử dụng các phiên dính để người dùng luôn kết thúc trong cùng một ví dụ. Tuy nhiên, bạn thực sự nên cố gắng tránh điều đó bởi vì nếu một trong các máy chủ bị lỗi thì tất cả người dùng trên máy chủ đó cần kết nối lại với máy chủ khác, có thể mất dữ liệu.


0

Theo mặc định PHP lưu trữ các phiên trên đĩa. Nếu người dùng đăng nhập vào Máy chủ 1, sau đó nhấn Máy chủ 2, họ sẽ đăng xuất. Có một vài lựa chọn để sửa lỗi này:

  1. Không lưu trữ phiên trên đĩa
  2. Đảm bảo người dùng luôn truy cập cùng một máy chủ
  3. Gắn kết hệ thống tệp được chia sẻ trên tất cả các máy chủ

Để thực hiện # 2 và trả lời câu hỏi của bạn về HAProxy; Trong thiết lập cơ bản nhất, bạn có thể chạy nó trong Chế độ TCP và sử dụng thuật toán cân bằng "nguồn" ( http://cbonte.github.com/haproxy-dconv/configuration-1.4.html#4-balance ) để đảm bảo người dùng nhấn cùng một máy chủ. Bạn nên đọc các tài liệu để xác định xem có bất kỳ nhược điểm nào đối với bạn khi sử dụng phương pháp đó không.

Đối với # 1, bạn có thể sử dụng kho lưu trữ khóa / giá trị như Redis hoặc Memecached mà tất cả các máy chủ của bạn sẽ kết nối và truy xuất phiên. Điều này làm cho các phiên tải / lưu rất nhanh và bạn cũng có thể sử dụng làm bộ đệm Drupal được chia sẻ.


6
Drupal bằng cách mặc định lưu trữ các phiên trong cơ sở dữ liệu chứ không phải trong hệ thống tệp.
Berdir
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.