Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.04
Rancher là một nền tảng open-souce , tự lưu trữ và hoàn chỉnh để chạy và dễ dàng quản lý các container trong quá trình production . Bản thân là một Docker image , một server Rancher sẽ hoạt động trên bất kỳ server Linux nào có sẵn Docker.Một số tính năng chính khiến Rancher trở thành một giải pháp hấp dẫn là:
- Mạng nhiều server : Tất cả các server được thêm vào Rancher đều được liên kết cho phép liên lạc an toàn giữa các containers .
- Cân bằng tải : Một dịch vụ cân bằng tải được bao gồm để phân phối dung lượng công việc giữa các containers hoặc thậm chí trên nhiều cloud .
- Khám phá dịch vụ : Rancher bao gồm một hệ thống DNS nội bộ cho phép các containers và dịch vụ được xác định theo tên để chúng được dùng trong các dịch vụ khác trên mạng.
- Quản lý cơ sở hạ tầng : Với Rancher, bạn có thể thêm, giám sát và quản lý tài nguyên máy tính từ bất kỳ nhà cung cấp cloud nào.
- Công cụ điều phối : Rancher là nền tảng quản lý containers duy nhất hỗ trợ các khuôn khổ điều phối containers phổ biến nhất bao gồm Cattle, Swarm, Kubernetes và Mesos. Vì vậy, nếu bạn đã có cơ sở hạ tầng của bạn hoạt động với một trong những khuôn khổ đó thì bạn có thể sử dụng Rancher một cách dễ dàng.
- Nguồn mở : Rancher miễn phí, công khai và minh bạch. Bạn có quyền kiểm soát tuyệt đối cơ sở hạ tầng của bạn .
Trong hướng dẫn này, bạn sẽ xây dựng một cụm Rancher để triển khai ứng dụng Node.js cân bằng tải, với hỗ trợ lưu trữ dữ liệu bằng MongoDB .
Ở cuối hướng dẫn này, bạn sẽ có bốn version cân bằng tải của một ứng dụng Node.js đơn giản và một server MongoDB với một containers dữ liệu riêng biệt để lưu trữ liên tục.
Yêu cầu
- Một server Ubuntu 14.04 1GB có cài đặt Rancher. Ta sẽ sử dụng Rancher để tạo sáu server bổ sung, mỗi server có 1GB RAM. Thực hiện theo các yêu cầu và Bước 1 của Cách quản lý triển khai nhiều nút của bạn với Rancher và Máy Docker trên Ubuntu 14.04 để cài đặt Server ban đầu của bạn với Rancher.
- Một ứng dụng Node.js sử dụng MongoDB để lưu trữ dữ liệu. Ta cung cấp một ví dụ đơn giản bằng cách sử dụng thư viện Hapi.js , bạn có thể sử dụng thư viện này trong trường hợp chưa có ứng dụng của riêng mình. Bạn có thể tìm thấy ứng dụng ví dụ này trong kho Github này .
- Git được cài đặt trên máy local của bạn, vì vậy bạn có thể sao chép ứng dụng mẫu. Làm theo tài liệu cài đặt Git chính thức nếu bạn cần đáp ứng yêu cầu này.
- Docker được cài đặt trên máy local của bạn, vì vậy bạn có thể xây dựng hình ảnh ứng dụng mà ta sẽ triển khai. Bạn có thể làm theo tài liệu chính thức cho việc này.
- Một account trên Docker Hub , một nơi đăng ký miễn phí và công khai cho các Docker image . Đây là nơi ta sẽ lưu trữ mã ứng dụng của bạn để ta có thể triển khai nó cho nhiều server bằng cách sử dụng Rancher. Bạn cần tên user Docker Hub của bạn để hoàn thành các bước trong hướng dẫn này.
- Mã thông báo truy cập DigitalOcean có cả quyền truy cập Đọc và Ghi, bạn có thể tạo mã này bằng cách truy cập trang Ứng dụng & API . Sao chép mã thông báo này, vì bạn cần nhập mã này vào Rancher để tạo thêm server .
Bạn cũng nên có kiến thức cơ bản về các khái niệm Docker như containers , hình ảnh và Dockerfiles. Xem Cách cài đặt và sử dụng Docker trên Ubuntu 16.04 .
Bước một - Khám phá ứng dụng Node.js
Đối với hướng dẫn này, ta sẽ sử dụng một ứng dụng Node.js đơn giản dựa trên khuôn khổ Hapi.js để nhận thông báo, ghi lại và liệt kê tất cả các thông báo đã gửi trước đó. Hãy cùng khám phá cách ứng dụng hoạt động và cách nó nhận các giá trị cấu hình để ta có thể đặt các giá trị đó bằng Docker khi ta tạo hình ảnh của bạn .
Bạn sẽ chuẩn bị ứng dụng và Docker image trên máy phát triển local của bạn , thay vì server .
Sao chép ứng dụng mẫu vào máy local của bạn bằng lệnh sau:
- git clone https://github.com/do-community/hapi-example
Sau đó, chuyển vào folder dự án:
- cd hapi-example
Hãy xem file chính của ứng dụng, server.js
. Nó chứa kết nối MongoDB và mã để khởi tạo server . Mở file này trong editor local của bạn và bạn sẽ thấy các nội dung sau:
const Hapi = require('hapi'); const mongojs = require('mongojs'); // Loads environment variables // Used only in development require('dotenv').config({silent: true}); const server = new Hapi.Server(); server.connection({ port: process.env.PORT || 3000 }); // Connect with the database server.app.db = mongojs(process.env.MONGO_HOST + '/api'); // Add the routes server.register(require('./routes'), (err) => { if (err) { console.error('Failed to load plugin:', err); } // Start the server server.start((err) => { if (err) { throw err; } console.log('Server running at:', server.info.uri); }); });
Mã cho các tuyến được đóng gói dưới dạng một plugin Hapi.js để tiết kiệm dung lượng trong hướng dẫn này, nhưng nếu bạn tò mò, bạn có thể xem trong file routes.js
.
Các phần quan trọng của file server.js
như sau:
require('dotenv').config({silent: true});
Điều này sử dụng gói dotenv
Node.js để tải các biến môi trường của ta từ file .env
. Bạn có thể xem lại tài liệu về gói dotenv
trong kho lưu trữ Github của nó nếu bạn quan tâm đến cách nó hoạt động. Ta chỉ lưu các biến trong file này cho quá trình phát triển; nó dễ dàng hơn so với việc viết thủ công các biến trong terminal. Trong quá trình production , ta sẽ lấy các biến từ Docker, thông qua Rancher.
Tiếp theo, ta đặt cổng cho server , sử dụng một biến môi trường có tên là PORT
, với giá trị dự phòng là 3000
, trong trường hợp biến không được xác định:
server.connection({ port: process.env.PORT || 3000 });
Cổng 3000
là quy ước chung cho các ứng dụng Node.js. Giá trị này có thể được thay đổi nếu cần thiết; yêu cầu duy nhất là nó phảitrên 1023
và dưới 65535
.
Cuối cùng, trước khi tải các tuyến và khởi động server , ta kết nối với server MongoDB, sử dụng một biến môi trường có tên MONGO_HOST
:
server.app.db = mongojs(process.env.MONGO_HOST + '/api');
Giá trị môi trường này sẽ được xác định thông qua Rancher với tên server của server MongoDB khi ta tạo containers MongoDB. Giá trị api
là tên của database mà ta sẽ kết nối và nó sẽ được cài đặt tự động nếu nó không tồn tại.
Đến đây bạn đã có một số thông tin cơ bản về những gì ứng dụng đang tìm kiếm và cách ta cấu hình cổng và kết nối database của nó, hãy đưa Docker vào bức tranh.
Bước 2 - Xây dựng Docker image
Rancher sử dụng Docker image để triển khai ứng dụng đến server , vì vậy hãy tạo Docker image cho ứng dụng của bạn . Để tạo Docker image cho ứng dụng của bạn , ta cần một file có tên Dockerfile
chứa một loạt các bước mà Docker sẽ tuân theo khi xây dựng hình ảnh. Tệp này đã có trong repository ứng dụng mà bạn đã sao chép. Hãy xem nội dung của nó để hiểu nó hoạt động như thế nào. Mở nó trong editor của bạn và bạn sẽ thấy mã sau:
FROM node:6 MAINTAINER James Kolce <contact@jameskolce.com> RUN mkdir -p /usr/api COPY . /usr/api WORKDIR /usr/api RUN npm install --production ENV PORT 3000 EXPOSE $PORT CMD ["npm", "start"]
Hãy xem xét từng bước chi tiết. Đầu tiên, ta thấy dòng này:
FROM node:6
Dòng này tuyên bố rằng hình ảnh của ta được xây dựng trên hình ảnh Node.js chính thức từ Docker Hub và ta đang chọn version 6 của Node.js vì ứng dụng của ta sử dụng một số tính năng ES6 chỉ có trong version đó hoặc cao hơn. Bạn nên chọn một version cụ thể thay vì chỉ sử dụng phiên bản mới nhất trong phiên bản production để tránh bất kỳ thay đổi nào có thể làm hỏng ứng dụng của bạn .
Sau dòng đó, ta cài đặt folder làm việc của bạn :
RUN mkdir -p /usr/api COPY . /usr/api WORKDIR /usr/api
Đầu tiên, ta chạy mkdir
để tạo một folder mới có tên /usr/api
, đây là nơi ứng dụng của ta sẽ hoạt động. Cờ -p
nghĩa là mkdir
sẽ tạo các folder trung gian theo yêu cầu. Sau đó, ta sao chép nội dung của hình ảnh vào folder đó. Sau đó, ta đặt folder mới này làm folder làm việc của ta để các lệnh tiếp theo sẽ được chạy từ folder đó.
Dòng tiếp theo chạy lệnh npm
và cài đặt các phụ thuộc production cho ứng dụng của ta .
RUN npm install --production
Tiếp theo, ta thấy hai dòng sau:
ENV PORT 3000 EXPOSE $PORT
Dòng đầu tiên xác định một biến môi trường được gọi là PORT
mà ứng dụng của ta sẽ sử dụng cho cổng lắng nghe của nó. Chỉ trong trường hợp biến này không được xác định, ta đặt 3000
làm giá trị mặc định. Sau đó, ta để lộ cổng đó để ta có thể truy cập vào nó từ bên ngoài containers . Việc sử dụng một biến môi trường giúp thay đổi điều này dễ dàng hơn mà không cần phải viết lại mã ứng dụng của ta . Và hãy nhớ rằng, ứng dụng của ta được thiết kế để sử dụng các biến môi trường này.
Bước cuối cùng trong Dockerfile của ta chạy server Node.js của ta :
CMD ["npm", "start"]
Để tạo Docker image của ứng dụng của ta từ file này, hãy đảm bảo bạn đang ở trong folder hapi-example
trong terminal của bạn và thực hiện lệnh sau:
- docker build -t your_dockerhub_username/hapi-example .
Lệnh này tạo một Docker image bằng Dockerfile
của ta . Lưu ý dấu chấm ở cuối lệnh. Điều này chỉ định đường dẫn đến Dockerfile
, nằm trong folder hiện tại. Cờ -t
đặt một thẻ cho hình ảnh của ta và ta sẽ sử dụng your_dockerhub_username / hapi-example
cho thẻ, đây là nhãn mà ta áp dụng cho hình ảnh để ta có thể sử dụng nó để tạo các version containers từ hình ảnh. Ta sử dụng tên user Docker Hub làm tiền tố, vì ta đang chuẩn bị xuất bản hình ảnh này sau khi ta kiểm tra nó và thẻ local của Docker image phải trùng với tên repository trên Docker Hub.
Nếu bạn nhận được thông báo Cannot connect to the Docker daemon. Is the docker daemon running on this host?
khi bạn chạy lệnh này, hãy đảm bảo ứng dụng Docker đang chạy và Docker được khởi động. Sau đó chạy lại lệnh.
Bây giờ ta hãy kiểm tra hình ảnh mà ta vừa tạo để có thể chắc chắn rằng mọi thứ đang hoạt động như mong đợi. Như bạn đã thấy trước đó, ứng dụng của ta dựa trên MongoDB, vì vậy hãy tạo một containers MongoDB mà ứng dụng của ta có thể sử dụng để lưu trữ dữ liệu của nó. Chạy lệnh sau để tạo và khởi động containers MongoDB dựa trên hình ảnh MongoDB Docker chính thức:
- docker run --name testdb -p 27017:27017 -d mongo:3
Ta gán một tên tạm thời cho containers với tùy chọn --name
; ta sẽ sử dụng tên đó để dừng server khi ta hoàn thành thử nghiệm ứng dụng. Ta cũng liên kết cổng server 27017
với cổng được containers hiển thị để ta có thể kiểm tra xem MongoDB có đang chạy hay không bằng cách sử dụng trình duyệt web local của ta . Cuối cùng, ta chỉ định hình ảnh mà ta muốn sử dụng. Bạn nên sử dụng cùng version MongoDB mà ứng dụng đã được phát triển đảm bảo rằng mọi thứ hoạt động như mong đợi, vì vậy trong trường hợp này ta chỉ định version 3
.
Sau khi thực hiện lệnh đó, hãy truy cập http://localhost:27017
trong trình duyệt của bạn và bạn sẽ thấy thông báo: It looks like you are trying to access MongoDB over HTTP on the native driver port
nghĩa là MongoDB đang chạy.
Bây giờ hãy chạy containers ứng dụng của bạn và liên kết nó với containers MongoDB bằng cách chạy lệnh này:
- docker run --name hapi-app -p 3000:3000 -d -e MONGO_HOST=testdb --link testdb your_dockerhub_username/hapi-example
Lệnh này tương tự như lệnh ta đã sử dụng để khởi động containers MongoDB, nhưng lần này ta sử dụng hình ảnh ứng dụng của bạn ( your_dockerhub_username / hapi-example
) và ánh xạ cổng 3000
của server của ta với cổng được containers hiển thị. Đây cũng là cổng mà ta đã sử dụng khi tạo Dockerfile
. Ngoài ra, ta thêm một biến môi trường có tên MONGO_HOST
chỉ định tên của containers MongoDB của ta sẽ được ứng dụng của ta sử dụng để kết nối với server database . Tham số --link testdb
cho phép ta sử dụng tên của containers database làm server lưu trữ bên trong containers của ứng dụng của ta .
Sau khi chạy lệnh, hãy kiểm tra ứng dụng bằng cách truy cập http://localhost:3000
trong trình duyệt của bạn. Nó sẽ hiển thị một trang trống không có bất kỳ lỗi nào .
Bạn cũng có thể thấy một mảng trống ( [ ]
) hoặc dạng xem JSON trên Firefox khi bạn truy cập http://localhost:3000
. Một trong hai kết quả này cũng không sao.
Bây giờ ta đã chứng minh Docker image hoạt động local , hãy dừng và xóa các containers local của ta . Lưu ý xóa containers không giống như xóa hình ảnh. Hình ảnh của ta sẽ được giữ nguyên để ta có thể tạo lại containers sau này hoặc đẩy hình ảnh vào Rancher, đó là những gì ta sẽ làm sau khi dọn dẹp môi trường local của bạn .
Đầu tiên, dừng containers database bằng cách sử dụng tên của nó mà bạn đã xác định trước đó:
- docker stop testdb
Bây giờ containers đã dừng, bạn có thể xóa nó khỏi máy của bạn vì bạn sẽ không cần nó nữa:
- docker rm testdb
Lặp lại các bước tương tự cho containers ứng dụng của bạn. Đầu tiên dừng nó, sau đó loại bỏ nó.
- docker stop hapi-app && docker rm hapi-app
Bây giờ ta hãy xuất bản hình ảnh làm việc để ta có thể sử dụng nó với Rancher.
Bước 3 - Tải hình ảnh lên Docker Hub
Để triển khai các containers bằng cách sử dụng Rancher, ta cần quyền truy cập vào register Docker , nơi ta có thể tạo một repository để lưu trữ Docker image của bạn . Ta sẽ sử dụng Docker Hub là cơ quan đăng ký chính thức cho Docker. Docker Hub được sử dụng miễn phí cho các repository công khai.
Đăng nhập vào Docker Hub bằng tên user và password của bạn. Sau khi đăng nhập, hãy nhấp vào nút Tạo repository ở phía bên phải của màn hình. Điền vào các trường như sau:
- Tên (bắt buộc) : Tên repository của bạn, trong trường hợp này, đó là
hapi-example
. - Mô tả : Mô tả ngắn gọn để xác định nhanh hình ảnh của bạn trong tương lai.
- Mô tả đầy đủ : Bạn có thể thêm tài liệu đánh dấu vào đây làm tài liệu tham khảo cho hình ảnh của bạn nhưng vì ứng dụng của ta khá đơn giản nên bạn có thể để trống trường này.
- Chế độ hiển thị : Bạn có thể đặt hình ảnh của bạn ở chế độ riêng tư, nơi chỉ bạn mới có quyền truy cập hoặc công khai ở nơi mọi người có thể sử dụng hình ảnh của bạn. Đối với hướng dẫn này, hãy tạo một repository công khai.
Nếu bạn đặt repository của bạn là riêng tư, bạn sẽ phải thêm thông tin đăng nhập Docker Hub của bạn vào trang Cơ sở hạ tầng -> Đăng ký trong giao diện user Rancher.
Sau khi điền tất cả các trường bắt buộc, hãy nhấp vào nút Tạo . Khi hoàn tất , bạn sẽ được chuyển hướng đến trang web lưu trữ mới của bạn .
Để tải lên Docker image của bạn, bạn phải đăng nhập vào Docker Hub thông qua lệnh docker
. Quay lại terminal của bạn, thực hiện lệnh sau:
- docker login
Bạn sẽ được yêu cầu nhập tên user và password của bạn . Giống như hầu hết các công cụ CLI, bạn sẽ không thấy password của bạn khi nhập.
Khi bạn đã đăng nhập, hãy tải hình ảnh lên Docker Hub bằng lệnh sau để tải tất cả các file lên repository :
- docker push your_dockerhub_username/hapi-example
Việc đẩy một hình ảnh có thể mất vài phút tùy thuộc vào kết nối internet local của bạn. Sau khi hình ảnh được xuất bản thành công, ta có thể cài đặt server của bạn bằng cách sử dụng Rancher.
Bước 4 - Tạo và gắn nhãn server lưu trữ
Hãy sử dụng Rancher để tạo tất cả các server mà ta cần để triển khai dịch vụ của bạn . Ta cần hai cho ứng dụng Node.js, một cho server MongoDB và một cho bộ cân bằng tải. Ta sẽ thực hiện tất cả những điều này trong giao diện user Rancher bằng cách sử dụng API của DigitalOcean.
Truy cập giao diện Rancher trong trình duyệt của bạn bằng cách truy cập http:// your_rancher_ip_address
và làm theo các bước sau để tạo bốn server mà ta cần:
- Đi tới Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server ở đầu trang.
- Chọn DigitalOcean làm nhà cung cấp server lưu trữ.
- Di chuyển thanh trượt Số lượng đến 4 server .
- Chỉ định một cái tên. Nhập
host
, mà sẽ tự động tạo tên từhost1
đểhost4
. - Dán Mã thông báo ứng dụng DigialOcean của bạn mà bạn đã tạo vào trường Mã thông báo truy cập .
- Đối với Hình ảnh , sử dụng giá trị mặc định của ubuntu-14-04-x64 .
- Đối với Kích thước , sử dụng giá trị mặc định là 1GB .
- Nhấp vào nút Tạo và đợi vài phút trong khi các server được tạo và thêm vào Rancher.
Sau khi Rancher hoàn thành việc tạo tất cả các server , ta sẽ thêm nhãn cho mỗi server để phân loại loại của chúng để ta có thể sắp xếp nơi ta sẽ đặt từng thành phần của bạn . Việc gắn nhãn server cũng cho phép ta mở rộng quy mô server của bạn tùy thuộc vào loại của chúng. Ví dụ: nếu ta nhận được quá nhiều nhu cầu cho ứng dụng của bạn , ta có thể tăng số lượng server thuộc loại đó và Rancher sẽ tự động triển khai containers Docker thích hợp cho ta . Các nhãn mà ta sẽ tạo ra là: loadbalancer
, application
và database
.
Hãy tạo nhãn đầu tiên, loadbalancer
.
- Tới Infrastructure> Hosts và chọn các server đầu tiên,
host1
. - Nhấp vào nút Tùy chọn (biểu tượng có ba dấu chấm) và chọn tùy chọn Chỉnh sửa .
- Nhấp vào nút Add Label và trong đầu vào chính nhập từ
type
, và sau đó nhậploadbalancer
trong đầu vào giá trị gia tăng. - Nhấp vào nút Lưu .
Tiếp theo, gắn nhãn các server ứng dụng. Lặp lại quy trình trước đó với hai server tiếp theo nhưng lần này sử dụng application
trong đầu vào Giá trị .
Đối với server lưu trữ cuối cùng, hãy lặp lại quy trình nhưng sử dụng database
trong đầu vào Giá trị .
Tất cả bốn server bây giờ phải có nhãn, vì vậy hãy cài đặt các dịch vụ. Ta sẽ bắt đầu với database .
Bước 5 - Triển khai server MongoDB
Ta sẽ sử dụng Docker image MongoDB chính thức trên Docker Hub để triển khai server database của bạn . Vùng chứa MongoDB cũng sẽ có containers sidekick để lưu trữ tất cả dữ liệu của ta . Cả hai containers sẽ được triển khai trên server có nhãn là database
.
Để làm điều đó, hãy làm theo các bước sau trong giao diện user Rancher:
- Chọn menu Ngăn xếp , chọn tùy chọn User , sau đó nhấp vào nút Thêm dịch vụ .
- Trong trang Thêm dịch vụ , đảm bảo thanh trượt Quy mô được đặt thành Chạy 1 containers .
- Đối với tên của dịch vụ, hãy sử dụng
MongoDB
. - Đối với hình ảnh, nhập
mongo:3
. - Nhấp vào nút Thêm vùng chứa Sidekick ở phần trên cùng.
- Đặt tên cho containers mới này là
Data
. Vùng chứa này sẽ được sử dụng làm ổ lưu trữ dữ liệu MongoDB. - Vì ta sẽ chỉ sử dụng containers này cho dữ liệu, hãy sử dụng hình ảnh hộp
busybox
. - Trong tab Command bên dưới, chuyển tùy chọn Autorestart thành Never (Bắt đầu một lần) , vì ta sẽ chỉ sử dụng containers này để lưu trữ.
- Chuyển sang tab Tập và thêm một tập mới bằng cách nhấp vào nút + và nhập
/data/db
vào trường văn bản xuất hiện. Đây là đường dẫn mặc định nơi MongoDB lưu trữ dữ liệu. - Chuyển sang tab Lập lịch và thêm luật lập lịch mới với các tham số sau:
The Host must have a host label of type = database
. Sử dụng trình đơn thả xuống để giúp bạn tạo luật này. - Quay lại và nhấp vào tab dịch vụ MongoDB , sau đó cuộn xuống tab Lệnh và đặt tùy chọn Tự động khởi động thành Luôn luôn .
- Chuyển sang tab Tập và chọn Dữ liệu trong tùy chọn Tập từ .
- Chuyển sang tab Lập lịch và thêm luật lập lịch mới với các tham số sau:
The Host must have a host label of type = database
- Cuối cùng, nhấp vào nút Tạo ở dưới cùng và đợi vài phút trong khi dịch vụ được kích hoạt.
Bây giờ hãy cấu hình dịch vụ ứng dụng.
Bước 6 - Triển khai server Node.js
Ta sẽ sử dụng một cách tiếp cận tương tự để triển khai ứng dụng Node.js mà ta đã chuẩn bị trước đó. Hình ảnh ta lưu trữ trên Docker Hub sẽ được triển khai trên application
có nhãn server và sẽ được liên kết với dịch vụ MongoDB để lưu trữ và truy cập dữ liệu. Vì vậy, hãy làm theo các bước sau trong giao diện user Rancher:
- Chọn menu Ngăn xếp , chọn tùy chọn User , sau đó nhấp vào nút Thêm dịch vụ .
- Trong phần Quy mô , chọn tùy chọn Luôn chạy một version của containers này trên mọi server .
- Tên mà ta sẽ sử dụng cho dịch vụ này là
NodeJS
. - Đối với hình ảnh, ta sẽ sử dụng hình ảnh mà ta đã triển khai cho Docker Hub. Nhập
your_dockerhub_username / hapi-example
. - Trong phần Liên kết dịch vụ , chọn Dịch vụ đích và chọn MongoDB . Sau đó chọn As name và nhập
db
, để dịch vụNodeJS
của ta có thể truy cập vào dịch vụ MongoDB. - Trong tab Lệnh ở cuối trang, chọn Thêm Biến Môi trường và thêm một biến có tên
MONGO_HOST
với giá trị làdb
, ánh xạ đến tên dịch vụ đích mà ta đã sử dụng ở bước trước. Lưu ý ứng dụng của ta dựa vào biến môi trường này để định vị server database . - Chuyển sang tab Lập lịch , nhấp vào nút Thêm Luật Lập lịch và sử dụng trình đơn thả xuống để xây dựng luật cho biết
The Host must have a host label of type = application
. - Cuối cùng, nhấn Create và đợi Rancher cài đặt dịch vụ.
Trong một thời gian ngắn, bạn sẽ thấy rằng cả hai application
có nhãn server hiện đang chạy dịch vụ mới này. Vì có nhiều hơn một, hãy cài đặt bộ cân bằng tải để ta có thể sử dụng cả hai server này một cách hiệu quả.
Bước 7 - Triển khai Load Balancer
Bộ cân bằng tải của ta sẽ được liên kết với các dịch vụ NodeJS
của ta để cân bằng dung lượng công việc giữa tất cả các containers trên các server ứng dụng.
- Để tạo bộ cân bằng tải, hãy chọn menu Ngăn xếp , chọn tùy chọn User , nhưng lần này hãy nhấp vào mũi tên trên nút Thêm Dịch vụ . Chọn Thêm bộ cân bằng tải từ danh sách thả xuống.
- Đối với Tên , nhập
LoadBalancer
. - Đặt Cổng nguồn thành
80
và Cổng mục tiêu mặc định thành3000
là cổng mà các containerNodeJS
của ta đang hiển thị. - Trong tùy chọn Target Service, chọn NodeJS , đây là dịch vụ mà ta đã tạo gần đây.
- Trong tab Lập lịch ở cuối trang, hãy nhấp vào nút Thêm Luật Lập lịch và tạo một luật cho biết
The Host must have a host label of type = loadbalancer
. - Cuối cùng, nhấp vào Tạo và đợi trong khi Rancher kích hoạt dịch vụ.
Mỗi khi ta tạo một dịch vụ, ta đã sử dụng các nhãn mà ta đã tạo để xác định cách dịch vụ được triển khai. Điều này giúp dễ dàng quản lý các server bổ sung trong tương lai. Bây giờ hãy đảm bảo mọi thứ hoạt động.
Bước 8 - Kiểm tra ứng dụng
Để kiểm tra ứng dụng của bạn , ta cần lấy địa chỉ của server cân bằng tải. Chọn dịch vụ LoadBalancer và bạn sẽ thấy địa chỉ IP trong tab Cổng .
Để kiểm tra xem ứng dụng của ta có đang hoạt động hay không, hãy thực hiện lệnh sau trong một terminal :
curl LoadBalancerIP
Lệnh này sẽ gửi một yêu cầu GET đến server . Bạn sẽ thấy một phản hồi có chứa một mảng trống ( []
) vì database của ta trống.
Bây giờ hãy thêm thông báo vào database đảm bảo rằng ứng dụng có thể lưu dữ liệu. Thực hiện lệnh sau:
curl -i -X POST -H "Content-Type:application/json" LoadBalancerIP -d '{"message":"This is a test"}'
Lệnh này sẽ gửi một yêu cầu POST đến server với một đối tượng JSON chứa một khóa message
với giá trị Đây là một bài kiểm tra . Ứng dụng này sẽ chỉ chấp nhận một khóa message
, vì vậy mọi tên khác sẽ bị loại bỏ. Sau khi gửi yêu cầu, bạn sẽ nhận được cùng một tin nhắn mà bạn đã gửi dưới dạng phản hồi, cùng với _id
từ MongoDB. Điều này nghĩa là kết nối với server MongoDB đang hoạt động và ứng dụng đã lưu dữ liệu .
Bây giờ, để kiểm tra lại xem ứng dụng có hoạt động đúng hay không, hãy thực hiện lại lệnh đầu tiên và bạn sẽ nhận được thông báo bạn đã thêm ở bước trước.
curl LoadBalancerIP
Đầu ra sẽ như thế này:
HTTP/1.1 200 OK content-type: application/json; charset=utf-8 cache-control: no-cache content-length: 61 Date: Tue, 12 Jul 2016 20:07:02 GMT Connection: keep-alive {"message":"This is a test","_id":"e64d85579aee7d1000b075a2"}
Ứng dụng ví dụ này không an toàn; bất kỳ ai biết địa chỉ và API đều có thể thêm thông báo vào hệ thống. Khi bạn hoàn thành hướng dẫn này, bạn có thể cần tắt ứng dụng này bằng cách xóa dịch vụ trong Rancher.
Đến đây, bạn đã có hai server ứng dụng, một database và một bộ cân bằng tải được cấu hình và sẵn sàng sử dụng. Hãy xem cách mở rộng quy mô dịch vụ của ta để xử lý nhiều lưu lượng truy cập hơn.
Bước 9 - Mở rộng quy mô server Node.js
Khi ứng dụng của bạn bắt đầu nhận được nhiều nhu cầu và server của bạn không thể xử lý tải, bạn có thể tăng số lượng server Node.js và tải sẽ được phân phối tự động giữa các containers trên các server ứng dụng. Làm theo các bước sau để mở rộng ứng dụng của bạn:
- Chuyển đến trang Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server .
- Chọn số lượng bạn muốn; trong trường hợp này, ta sẽ thêm 2 server nữa.
- Sử dụng
host5
làm tên cho server mới đầu tiên, vì server cuối cùng ta tạo là serverhost4
. Bởi vì ta sẽ tạo hai server mới, Rancher sẽ tự động đặt tên máy tiếp theo thành serverhost6
. - Thêm Mã thông báo truy cập DigitalOcean của bạn vào trường cùng tên.
- Đối với Hình ảnh , sử dụng giá trị mặc định của ubuntu-14-04-x64 .
- Đối với Kích thước , sử dụng giá trị mặc định là 1GB .
- Bấm vào nút Thêm nhãn và trong
type
nhập Nhập khóa , sau đó nhậpapplication
trong đầu vào Giá trị . - Nhấp vào nút Tạo và đợi trong khi các server mới được kích hoạt và thêm vào Rancher.
Sau khi các server mới trực tuyến, vì chúng được gắn nhãn là server ứng dụng, các version mới của ứng dụng NodeJS
sẽ được cấu hình và triển khai tự động, đồng thời bộ cân bằng tải sẽ phân phối dung lượng công việc giữa bốn containers trên bốn server .
Kết luận
Trong hướng dẫn này, bạn đã học cách chuẩn bị, triển khai và mở rộng một ứng dụng Node.js chức năng có hỗ trợ lưu trữ dữ liệu với MongoDB. Như bạn thấy , với Rancher và GUI của nó, quá trình này khá trực quan và dễ dàng mở rộng quy mô một ứng dụng hoàn chỉnh. Và nhờ các tính năng lập lịch của Rancher, khi ứng dụng của bạn đạt được thời gian lớn, bạn có thể xử lý tải một cách dễ dàng.
Các tin liên quan
Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.042016-07-13
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.04
2016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19
Cách cài đặt và sử dụng Composer trên Ubuntu 16.04
2016-05-17
Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
2016-05-16
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.04
2016-05-04
Cách cài đặt và cấu hình VNC trên Ubuntu 16.04
2016-04-26
Cách thêm không gian swap trên Ubuntu 16.04
2016-04-25
Cách cài đặt WordPress với LEMP trên Ubuntu 16.04
2016-04-25
Cách cài đặt Java với Apt-Get trên Ubuntu 16.04
2016-04-23