Thứ năm, 11/04/2013 | 00:00 GMT+7

Cách mở rộng ứng dụng web trên Ubuntu 12.10


Mở rộng quy mô ứng dụng web trên Ubuntu

Mở rộng quy mô ứng dụng web là một trong những điều thú vị nhất đối với administrator web phải làm. Mở rộng quy mô là quá trình administrator hệ thống sử dụng nhiều server để phục vụ một ứng dụng web.

Hầu hết việc mở rộng quy mô liên quan đến việc tách web server và database của bạn, đồng thời thêm các hệ thống dự phòng vào từng khía cạnh.

Bài viết này sẽ hướng dẫn bạn các bước để chuyển một ứng dụng từ một server sang hai server , bằng cách thêm một web server dự phòng.

Hai server (sẽ được gọi là " Server A" và " Server B") sẽ là web server của bạn và sẽ sử dụng nginx để cân bằng tải.

Trong tất cả các ví dụ trong hướng dẫn này, bản đồ server tới IP sau sẽ được áp dụng:

Server A: 1.1.1.1

Server B: 2.2.2.2

Server A và B sẽ được cân bằng tải bằng cách sử dụng một chương trình có tên là nginx. Nginx có thể hoạt động bởi chính web server , nhưng trong trường hợp của ta , ta sẽ chỉ sử dụng nó cho bộ cân bằng tải giữa hai server chạy apache.

Bước 1 - Cấu hình Nginx trên Server A

Các bước sau sẽ dẫn đến Server A và Server B chia sẻ tải từ lưu lượng truy cập trang web.

Điều đầu tiên ta sẽ làm là cài đặt nginx trên Server A, để thực hiện cân bằng tải của ta .

 
sudo apt-get install nginx php5-fpm

Sau khi nó được cài đặt, ta cần phải cấu hình nó một chút. Ta cần chỉnh sửa / etc / nginx / sites-enable / default và cho nginx biết địa chỉ IP và số cổng nơi trang web của ta thực sự sẽ được lưu trữ.

Hãy tiếp tục và mở file đó:

sudo nano /etc/nginx/sites-enabled/default

Ta có thể làm điều đó với một khối ngược dòng. Ví dụ về khối ngược dòng được hiển thị ở đây và được giải thích từng dòng bên dưới. Trong tập hợp các ví dụ sau,

upstream nodes {
	ip_hash; 
        server 1.1.1.1:8080 max_fails=3 fail_timeout=30s;
	server 2.2.2.2:8080 max_fails=3 fail_timeout=30s; 
}

Dòng đầu tiên xác định một khối ngược dòng và đặt tên cho nó là " các node " và dòng cuối cùng đóng khối đó.

Bạn có thể tạo bao nhiêu khối ngược dòng tùy thích, nhưng chúng phải được đặt tên duy nhất.

Hai dòng " server " là những dòng quan trọng; chúng xác định địa chỉ IP và số cổng mà web server thực tế của ta đang nghe.

Lưu ý địa chỉ IP này có thể là của cùng một server mà ta đang chạy nginx trên đó.

Cho dù có đúng như vậy hay không, bạn nên sử dụng một cổng khác 80.

Bạn nên sử dụng một cổng khác với cổng HTTP mặc định vì bạn muốn giúp user cuối vô tình gặp phải bất kỳ server riêng lẻ nào được sử dụng để cân bằng tải web server .

Tường lửa cũng được dùng như một biện pháp phòng ngừa, vì tất cả các kết nối web đến bất kỳ server nào trong dòng lên của bạn đều bắt nguồn từ địa chỉ IP của server đang chạy nginx. Các bước để tăng cường bảo mật trên web server của bạn sẽ được khám phá ở phần sau của bài viết này.

Điều tiếp theo ta phải làm là cấu hình nginx để nó sẽ phản hồi và chuyển tiếp các yêu cầu cho một tên server cụ thể. Ta có thể thực hiện cả hai điều này với một khối virtualhost bao gồm một dòng proxy_pass.

Xem bên dưới để biết ví dụ và giải thích.

server {
        listen   1.1.1.1:80;

        root /path/to/document/root/;
        index index.html index.htm;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        location / {
                proxy_pass http://nodes;
        }
}

Có một số phần quan trọng đối với cấu hình này, bao gồm dòng "nghe", dòng "server_name" và khối "vị trí".

Đảm bảo chỉnh sửa tài liệu root để trỏ đến trang web

Hai yếu tố đầu tiên là các yếu tố cấu hình tiêu chuẩn, chỉ định địa chỉ IP và cổng mà web server của ta đang nghe tương ứng, nhưng nó là yếu tố cuối cùng, khối "vị trí", cho phép ta cân bằng tải các server của bạn .

Vì Server A sẽ đóng role là điểm cuối mà user sẽ kết nối và là một trong những server cân bằng tải, ta cần tạo một khối server ảo thứ hai, lắng nghe trên một cổng không chuẩn cho các kết nối đến.

server {
        listen   127.0.0.1:8080; 

         root /path/to/document/root/;
        index index.html index.htm index.php;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Sau khi hoàn tất, hãy reload nginx:

sudo service nginx reload

Bước 2 - Cấu hình nginx trên Server B

Ta cần cài đặt một khối virtualhost tương tự trên Server B để nó cũng sẽ phản hồi các yêu cầu cho domain của ta . Nó sẽ trông rất giống với khối server thứ hai mà ta có trên Server A.

server {
        listen   2.2.2.2:8080; 

        root /path/to/document/root/;
        index index.html index.htm index.php;

        server_name domain.tld www.domain.tld;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Reload nginx trên server thứ hai:

sudo service nginx reload

Đó là cấu hình duy nhất mà ta cần thực hiện trên server này!

Một trong những hạn chế khi xử lý các web server cân bằng tải là khả năng dữ liệu không đồng bộ giữa các server .

Giải pháp cho vấn đề này có thể là sử dụng repository git để đồng bộ hóa với từng server , đây sẽ là chủ đề của hướng dẫn trong tương lai.

Đến đây bạn sẽ có một cấu hình cân bằng tải đang hoạt động. Như mọi khi, mọi phản hồi trong phần comment đều được hoan nghênh!

Bởi Jason Kurtz

Tags:

Các tin liên quan