Thứ ba, 27/05/2014 | 00:00 GMT+7

Cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 cho WordPress và Nginx trên Ubuntu 14.04

Trong hướng dẫn này, ta sẽ dạy bạn cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 để phục vụ nhiều ứng dụng từ một domain hoặc địa chỉ IP. Cân bằng tải có thể cải thiện hiệu suất, tính khả dụng và khả năng phục hồi trong môi trường của bạn.

Cân bằng tải và ủy quyền ngược lớp 7 phù hợp với trang web nếu bạn muốn có một domain duy nhất phục vụ nhiều ứng dụng, vì các yêu cầu http có thể được phân tích để quyết định ứng dụng nào sẽ nhận được lưu lượng truy cập.

Hướng dẫn này được viết bằng WordPress và một trang web tĩnh làm ví dụ, nhưng các khái niệm chung của nó được dùng với các ứng dụng khác để có hiệu quả tương tự.

Yêu cầu

Trước khi tiếp tục với hướng dẫn này, bạn nên có ít nhất hai ứng dụng chạy trên các server riêng biệt. Ta sẽ sử dụng một trang web tĩnh được lưu trữ trên Nginx và WordPress làm hai ứng dụng của ta . Nếu bạn muốn làm theo chính xác hướng dẫn này, thì đây là các hướng dẫn mà ta đã sử dụng để cài đặt môi trường tiên quyết của bạn :

Môi trường bắt đầu của ta trông như thế này:

 Server  ứng dụng riêng biệt

Ngoài môi trường hiện tại của bạn, ta sẽ tạo các VPS sau:

  • haproxy-www : Server HAProxy của bạn, để cân bằng tải và đảo ngược ủy quyền
  • wordpress-2 : Server ứng dụng web WordPress thứ hai của bạn (chỉ bắt buộc nếu bạn muốn cân bằng tải thành phần WordPress trong môi trường của bạn )
  • web-2 : Web server Nginx thứ hai của bạn (chỉ bắt buộc nếu bạn muốn cân bằng tải thành phần Nginx trong môi trường của bạn )

Nếu bạn không quen với các khái niệm hoặc thuật ngữ cân bằng tải cơ bản, như cân bằng tải lớp 7 hoặc phần backend hoặc ACL , thì đây là bài viết giải thích những điều cơ bản: Giới thiệu về HAProxy và các khái niệm cân bằng tải .

Mục tiêu của ta

Đến cuối hướng dẫn này, ta muốn có một môi trường giống như sau:

Cân bằng tải lớp 7

Nghĩa là, user của bạn sẽ truy cập cả hai ứng dụng của bạn thông qua http://example.com . Tất cả các yêu cầu bắt đầu bằng http://example.com/wordpress sẽ được chuyển tiếp đến các server WordPress của bạn và tất cả các yêu cầu khác sẽ được chuyển tiếp đến các server Nginx cơ bản của bạn. Lưu ý bạn không nhất thiết phải cân bằng tải các ứng dụng của bạn để chúng xuất hiện trên một domain duy nhất, nhưng ta sẽ đề cập đến việc cân bằng tải trong hướng dẫn này.

Lưu ý: DigitalOcean Load Balancers là một dịch vụ cân bằng tải được quản lý đầy đủ, có tính khả dụng cao. Nếu bạn đang chạy ứng dụng của bạn trên DigitalOcean, dịch vụ Cân bằng tải có thể thay thế HAProxy trong các loại cấu hình này. Để thử điều này, hãy làm theo hướng dẫn của ta về cách cài đặt Bộ cân bằng tải từ bước 2 thay vì cài đặt HAProxy.

Cài đặt HAProxy

Tạo một VPS mới với Mạng riêng. Đối với hướng dẫn này, ta sẽ gọi nó là haproxy-www .

Trong VPS haproxy-www của ta , hãy cài đặt HAProxy với apt-get :

sudo apt-get update sudo apt-get install haproxy 

Ta cần bật tập lệnh HAProxy init, vì vậy HAProxy sẽ bắt đầu và dừng cùng với VPS của bạn.

sudo vi /etc/default/haproxy 

Thay đổi giá trị của ENABLED thành 1 để kích hoạt tập lệnh HAProxy init:

ENABLED=1 

Lưu và thoát. Bây giờ HAProxy sẽ bắt đầu và dừng với VPS của bạn. Ngoài ra, bây giờ bạn có thể sử dụng lệnh service để kiểm soát HAProxy của bạn . Hãy kiểm tra xem nó có đang chạy không:

user@haproxy-www:/etc/init.d$ sudo service haproxy status haproxy not running. 

Nó không chạy. Điều đó tốt thôi, vì nó cần được cấu hình trước khi ta có thể sử dụng nó. Tiếp theo hãy cấu hình HAProxy cho môi trường của ta .

Cấu hình HAProxy

Tệp cấu hình của HAProxy được chia thành hai phần chính:

  • Global : đặt các thông số cho toàn bộ quá trình
  • Proxy : bao gồm các tham số mặc định , nghe , giao diện user backend

, nếu bạn không quen với HAProxy hoặc các khái niệm và thuật ngữ cân bằng tải cơ bản, vui lòng tham khảo liên kết này: Giới thiệu về HAProxy và các khái niệm cân bằng tải

Cấu hình HAProxy: Global

Tất cả cấu hình HAProxy phải được thực hiện trên VPS HAProxy, haproxy-www của bạn .

Đầu tiên, hãy tạo một bản sao của file haproxy.cfg mặc định:

cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig 

Bây giờ hãy mở haproxy.cfg trong editor :

sudo vi /etc/haproxy/haproxy.cfg 

Bạn sẽ thấy rằng có hai phần đã được xác định: global mặc định . Đầu tiên ta sẽ xem xét một số tham số mặc định.

Theo mặc định , hãy tìm các dòng sau:

mode    http option  httplog 

Chọn http làm chế độ cấu hình HAProxy để thực hiện cân bằng tải lớp 7 hoặc lớp ứng dụng. Điều này nghĩa là bộ cân bằng tải sẽ xem xét nội dung của các yêu cầu http và chuyển tiếp nó đến server thích hợp dựa trên các luật được xác định trong giao diện user . Nếu bạn không quen với khái niệm này, vui lòng đọc phần Các loại cân bằng tải trong Giới thiệu về HAProxy của ta .

Chưa đóng file cấu hình! Ta sẽ thêm cấu hình proxy tiếp theo.

Cấu hình HAProxy: Proxy

Cấu hình giao diện user

Điều đầu tiên ta muốn thêm là một giao diện user . Đối với cài đặt cân bằng tải và ủy quyền ngược lớp 7 cơ bản, ta sẽ muốn xác định một ACL sẽ được sử dụng để hướng lưu lượng truy cập của ta đến các server backend thích hợp. Có rất nhiều ACL được dùng trong HAProxy và ta sẽ chỉ trình bày một trong số chúng trong hướng dẫn này ( path_beg ) –để có danh sách đầy đủ các ACL trong HAProxy, hãy xem tài liệu chính thức: HAProxy ACLs

Ở cuối file , hãy thêm giao diện user của ta , www . Đảm bảo thay thế haproxy_www_public_IP bằng IP công cộng của VPS haproxy-www của bạn:

<pre>
giao diện user www
bind <span class = “highlight”> haproxy www public IP </span>: 80
tùy chọn http-server-close
acl url
đường dẫn wordpress xin / wordpress
sử dụng
backend wordpress-backend nếu url wordpress
backend web backend mặc định
</pre>

Dưới đây là giải thích về ý nghĩa của mỗi dòng trong đoạn mã cấu hình giao diện user ở trên:

  • giao diện user www : chỉ định giao diện user có tên “www”, vì ta sẽ sử dụng giao diện này để xử lý lưu lượng truy cập www đến
  • bind haproxy_www_public_IP: 80 : thay thế haproxy_www_public_IP bằng địa chỉ IP công khai của haproxy-www. Điều này cho HAProxy biết rằng giao diện user này sẽ xử lý lưu lượng mạng đến trên địa chỉ IP và cổng này
  • tùy chọn http-server-close : bật chế độ đóng kết nối HTTP trên server và duy trì khả năng hỗ trợ HTTP duy trì và kết nối trên client . Tùy chọn này sẽ cho phép HAProxy xử lý nhiều yêu cầu của khách hàng với một kết nối duy nhất, điều này thường cải thiện hiệu suất
  • acl url_wordpress path_beg / wordpress : chỉ định ACL được gọi là url_wordpress đánh giá là đúng nếu đường dẫn của yêu cầu bắt đầu bằng “/ wordpress”, ví dụ: http://example.com/wordpress/hello-world
  • use_backend wordpress-backend if url_wordpress : hướng bất kỳ lưu lượng truy cập nào trùng với url_wordpress ACL đến wordpress-backend , ta sẽ sớm xác định
  • default_backend web-backend : điều này chỉ định rằng bất kỳ lưu lượng nào không phù hợp với luật use_backend sẽ được chuyển tiếp đến web-backend mà ta sẽ xác định trong bước tiếp theo

Cấu hình backend

Sau khi bạn hoàn tất cấu hình giao diện user , hãy tiếp tục thêm phần backend đầu tiên của bạn bằng cách thêm các dòng sau. Đảm bảo thay thế các từ được đánh dấu bằng các giá trị thích hợp:

<pre>
backend web-backend
web server -1 <span class = “highlight”> web 1 private_IP </span>: 80 lần kiểm tra
</pre>

Dưới đây là giải thích về ý nghĩa của mỗi dòng trong đoạn mã cấu hình backend ở trên:

  • backend web-backend : chỉ định một chương trình backend có tên là web-backend
  • server web-1… : chỉ định một server backend có tên là web-1 , IP riêng (mà bạn phải thay thế) và cổng mà nó đang lắng nghe, trong trường hợp này là 80 . Tùy chọn kiểm tra làm cho bộ cân bằng tải thực hiện định kỳ kiểm tra tình trạng trên server này

Sau đó, thêm phần backend cho ứng dụng WordPress của bạn:

<pre>
backend wordpress-backend
reqrep ^ ([^ \:] ) \ / <span class = “highlight”> wordpress </span> / (. ) \ 1 \ / \ 2
server wordpress-1 <span class = “highlight”> wordpress 1 private_IP </span>: 80 kiểm tra
</pre>

Dưới đây là giải thích về ý nghĩa của mỗi dòng trong đoạn mã cấu hình backend ở trên:

  • backend wordpress-backend : chỉ định một backend có tên là wordpress-backend
  • reqrep… : ghi lại các yêu cầu cho / wordpress đến / khi chuyển tiếp lưu lượng truy cập đến các server WordPress.Điều này là không cần thiết nếu ứng dụng WordPress được cài đặt trong server root nhưng ta muốn nó có thể truy cập được thông qua / wordpress trên server HAProxy của ta
  • server wordpress-1… : chỉ định server backend có tên là wordpress-1 , IP riêng (bạn phải thay thế) và cổng mà nó đang nghe, trong trường hợp này là 80 . Tùy chọn kiểm tra làm cho bộ cân bằng tải thực hiện định kỳ kiểm tra tình trạng trên server này

Cấu hình HAProxy: Số liệu thống kê

Nếu bạn muốn bật số liệu thống kê HAProxy, có thể hữu ích trong việc xác định cách HAProxy đang xử lý lưu lượng truy cập đến, bạn cần thêm thông tin sau vào cấu hình của bạn :

<pre>
số liệu thống kê nghe: 1936
số liệu thống kê cho phép

phạm vi thống kê www
thống kê phạm vi web-backend
phạm vi thống kê wordpress-backend
thống kê tiểu /
thống kê lĩnh vực Haproxy \ Thống kê
thống kê auth <span class = “highlight”> user </span>: <span class = “highlight”> password </span>
</pre>

Dưới đây là giải thích về các dòng không tầm thường trong đoạn mã cấu hình thống kê lượt nghe ở trên:

  • thống kê nghe: 1936 : cấu hình trang thống kê của HAProxy để có thể truy cập trên cổng 1936 (tức là http: // haproxy \ _www \ _public \ _IP: 1936 )
  • phạm vi thống kê… : thu thập số liệu thống kê trên giao diện user hoặc backend được chỉ định
  • stats uri / : chỉ định URI của trang thống kê là /
  • vùng thống kê Haproxy \ Statistics : bật thống kê và đặt tên vùng xác thực (xác thực cửa sổ bật lên), được sử dụng cùng với tùy chọn xác thực số liệu thống kê
  • stats auth haproxy: password : chỉ định thông tin xác thực cho trang thống kê. Thay đổi tên user và password của bạn

Bây giờ lưu và thoát. Khi bạn khởi động HAProxy, trang thống kê sẽ có sẵn qua http: // haproxy \ _www \ _public \ _ip: 1936 / sau khi bạn khởi động dịch vụ HAProxy của bạn . HAProxy hiện đã sẵn sàng để bắt đầu, nhưng trước tiên hãy bật tính năng ghi log .

Bật ghi log HAProxy

Kích hoạt đăng nhập HAProxy rất đơn giản. Trước tiên, hãy chỉnh sửa file rsyslog.conf:

sudo vi /etc/rsyslog.conf 

Sau đó, tìm hai dòng sau và bỏ ghi chú chúng để kích hoạt nhận log hệ thống UDP. Nó sẽ giống như sau khi bạn hoàn tất:

$ModLoad imudp $UDPServerRun 514 $UDPServerAddress 127.0.0.1 

Bây giờ khởi động lại rsyslog để kích hoạt cấu hình mới:

sudo service rsyslog restart 

Ghi log HAProxy hiện đã được bật! Tệp log sẽ được tạo tại /var/log/haproxy.log sau khi HAProxy được khởi động.

Cập nhật cấu hình WordPress

Bây giờ URL của ứng dụng WordPress của bạn đã thay đổi, ta phải cập nhật một vài cài đặt trong WordPress.

Trên một trong hai server WordPress , hãy chỉnh sửa wp-config.php của bạn. Nó nằm ở nơi bạn đã cài đặt WordPress (trong hướng dẫn, nó đã được cài đặt trong /var/www/example.com nhưng cài đặt của bạn có thể khác):

<pre>
cd <span class = “highlight”> / var / www / example.com </span>; sudo vi wp-config.php
</pre>

Tìm dòng gần đầu cho biết define('DB_NAME', 'wordpress'); và thêm các dòng sau vào trên nó, thay thế các giá trị được đánh dấu,:

<pre>
xác định ('WP SITEURL', '<span class = “highlight”> http: // haproxy www public IP </span>');
xác định ('WP HOME', '<span class = "highlight"> http: // haproxy www public IP </span>');
</pre>

Lưu và thoát. Như vậy, các URL WordPress được cấu hình để trỏ đến trình cân bằng tải của bạn thay vì chỉ server WordPress ban đầu của bạn, điều này sẽ hoạt động khi bạn thử và truy cập Trang tổng quan wp-admin.

Khởi động HAProxy

Trên haproxy-www , khởi động HAProxy để thay đổi cấu hình của bạn có hiệu lực:

sudo service haproxy restart 

Hoàn thành Reverse Proxy

Như vậy, các ứng dụng của bạn có thể truy cập thông qua cùng một domain , example.com , thông qua Reverse Proxy lớp 7, nhưng chúng vẫn chưa được cân bằng tải. Môi trường của bạn sẽ giống như sơ đồ sau:

Reverse Proxy Không có Cân bằng Tải

Theo giao diện user mà ta đã xác định trước đó, đây là mô tả về cách HAProxy sẽ chuyển tiếp lưu lượng truy cập của bạn:

  • http://example.com/wordpress : mọi yêu cầu bắt đầu bằng / wordpress sẽ được gửi đến wordpress-backend (bao gồm server wordpress-1 của bạn)
  • http://example.com/ : bất kỳ yêu cầu nào khác sẽ được gửi đến web-backend (bao gồm server web-1 của bạn)

Nếu tất cả những gì bạn muốn làm là lưu trữ nhiều ứng dụng trên một domain duy nhất, thì bạn đã hoàn tất! Nếu bạn muốn cân bằng tải các ứng dụng của bạn , bạn cần phải đọc tiếp.

Cách thêm cân bằng tải

Cân bằng tải web-1

Để cân bằng tải một web server cơ bản, tất cả những gì bạn cần làm là tạo một web server mới có cấu hình và nội dung giống hệt như bản root của bạn. Ta sẽ gọi server mới này: web-2 .

Bạn có hai tùy chọn khi tạo VPS mới:

  1. Nếu bạn có tùy chọn tạo VPS mới từ ảnh chụp nhanh của web-1 , thì đó là cách đơn giản nhất để tạo web-2
  2. Tạo nó từ đầu. Cài đặt tất cả cùng một phần mềm, cấu hình nó giống hệt nhau, sau đó sao chép nội dung của root server Nginx của bạn từ web-1 sang web-2 bằng rsync (Xem Hướng dẫn Rsync ).

Lưu ý : Cả hai phương pháp nói trên đều thực hiện sao chép một lần nội dung root server của bạn. Nếu bạn cập nhật các file nào của bạn trên một trong các node server , web-1 hoặc web-2 , hãy đảm bảo bạn đồng bộ hóa lại các file .

Sau khi web server giống hệt của bạn đã được cài đặt , hãy thêm nó vào phần backend web trong cấu hình HAProxy.

Trên haproxy-www , hãy chỉnh sửa haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg 

Tìm phần backend web của cấu hình:

<pre>
backend web-backend
web server -1 <span class = “highlight”> web 1 private_IP </span>: 80 lần kiểm tra
</pre>

Sau đó, thêm server web-2 của bạn vào dòng tiếp theo:

<pre>
web server -2 <span class = “highlight”> web 2 private_IP </span>: 80 lần kiểm tra
</pre>

Lưu và thoát. Bây giờ hãy reload HAProxy để thay đổi có hiệu lực:

sudo service haproxy reload 

Bây giờ phần backend web của bạn có hai server xử lý tất cả lưu lượng truy cập không phải WordPress của bạn! Nó được cân bằng tải! '

Cân bằng tải wordpress-1

Cân bằng tải một ứng dụng như WordPress hơi phức tạp hơn so với cân bằng tải một web server tĩnh vì bạn phải lo lắng về những thứ như đồng bộ hóa các file đã tải lên và user database bổ sung.

Tất cả các bước cần thiết để tạo một server WordPress bổ sung, giống hệt nhau được mô tả trong một hướng dẫn cân bằng tải khác: Cách sử dụng HAProxy làm Bộ cân bằng tải lớp 4 cho WordPress . Hoàn thành ba bước sau từ hướng dẫn đó để tạo server WordPress thứ hai của bạn, wordpress-2 :

  1. Tạo server ứng dụng web thứ hai của bạn
  2. Đồng bộ hóa các file ứng dụng web
  3. Tạo user database mới

Dừng lại khi bạn đến phần được gọi là Chưa cân bằng tải .

Khi bạn đã tạo xong wordpress-2 và bạn đã cài đặt database đúng cách, tất cả những gì bạn phải làm là thêm nó vào phần backend wordpress của bạn trong cấu hình HAProxy.

Trên haproxy-www , hãy chỉnh sửa haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg 

Tìm phần wordpress-backend của cấu hình:

<pre>
backend wordpress-backend
server wordpress-1 <span class = “highlight”> wordpress 1 private_IP </span>: 80 kiểm tra
</pre>

Sau đó thêm server wordpress-2 của bạn vào dòng tiếp theo:

<pre>
server wordpress-2 <span class = “highlight”> wordpress 2 private_IP </span>: 80 kiểm tra
</pre>

Lưu và thoát. Bây giờ hãy reload HAProxy để thay đổi có hiệu lực:

sudo service haproxy reload 

Như vậy, wordpress-backend của bạn có hai server xử lý tất cả lưu lượng truy cập WordPress của bạn! Nó được cân bằng tải!

Kết luận

Đến đây bạn đã hoàn thành hướng dẫn này, bạn có thể mở rộng các khái niệm ủy quyền ngược và cân bằng tải để thêm nhiều ứng dụng và server hơn vào môi trường của bạn để làm cho nó phù hợp với nhu cầu của bạn hơn. Lưu ý có vô số cách để cấu hình môi trường của bạn và bạn có thể cần tìm hiểu Hướng dẫn cấu hình HAProxy nếu bạn có các yêu cầu phức tạp hơn.

Ngoài ra, nếu bạn đang tìm kiếm một cách khác để cải thiện hiệu suất của version WordPress của bạn , bạn có thể cần xem xét bản sao MySQL. Hãy xem hướng dẫn này mô tả cách cài đặt với WordPress:

<div class = “author”> Bởi Mitchell Anicas </div>


Tags:

Các tin liên quan

Cách cung cấp tệp mật khẩu KeePass2 với Nginx trên server Ubuntu 14.04
2014-05-16
Cách cài đặt WordPress với Nginx trên Ubuntu 14.04
2014-05-15
Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.04
2014-05-09
Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.04
2014-05-09
Cách cài đặt Nginx trên Ubuntu 14.04 LTS
2014-04-29
Cách thiết lập server block Nginx (server ảo) trên Ubuntu 14.04 LTS
2014-04-25
Cách tùy chỉnh tên server Nginx của bạn sau khi biên dịch từ nguồn trong CentOS
2014-02-11
Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.5
2014-01-29
Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
2014-01-29
Cách thêm module ngx_pagespeed vào Nginx trong Debian Wheezy
2014-01-15