Một vài thành phần trong OpenNebula

Một phần của tài liệu NGHIÊN CỨU XÂY DỰNG HỆ THỐNG QUẢN LÝ VÀ CẤP PHÁT TÀI NGUYÊN CHO HỆ THỐNG VIRTUAL LAB TRÊN NỀN ĐIỆN TOÁN ĐÁM MÂY (Trang 29 - 52)

Phần này chúng tôi tập trung giới thiệu các thành phần được OpenNebula cung cấp, các thành phần này được sử dụng để hiện thực hệ thống quản lý và cấp phát tài nguyên. Đó là XMP-RPC và JAVA-API.

Hình 2.12. OpenNebula int erf ace

2.3.4.1 XMP-RPC

Dựa vào hình trên (3.6) ta nhận thấy XML-RPC đóng vai trò là một interface chính trong OpenNebula, phân lớp này thể hiện tất cả các chức năng để giao tiếp với OpenNebula deamon. Thông qua XML-RPC ta có thể điều khiển và quản lý tất cả các OpenNebula resource, bao gồm các virtual machine, network, image, user, host và các cluster.

XML-RPC thường được sử dụng để xây dựng thư viện cho một ứng dụng cloud hay một interface ở cấp thấp cho OpenNebula core.

2.3.4.1.1 Vai trò

Trong openNebula, XMP-RPC là một lớp chính đóng vai trò giao tiếp với các thành phần bên trên và openNebula ở bên dưới. Hệ thống sẽ sử dụng JAVA-API thông qua XMP- RPC để tương tác, lấy thông tin và quản lý các tài nguyên của openNebula.

Mỗi xml-rpc request khi được thực hiện sẽ qua các bước định danh và định quyền. Sau khi một request được xác thực, một response sẽ được trả về. Cấu trúc của một response như sau:

- OUT1 (Boolean): true nếu request được thực thi thành công,false nếu ngược lại. - OUT2 (String): message trả về trong trường hợp request thực thi thất bại.

- OUT3 (Int): mã lỗi trong trường hợp thực thi thất bại.

2.3.4.1.3 Một số request chính

- onevm: quản lý virtual machine

- one.vm.release: release một virtual machine - one.vm.deploy: triển khai một virtual machine

- one.vm.action(session, “hold”, id): hold một virtual machine

- one.vm.action(session, “restart”, id): khởi động lại một virtual machine - one.vm.action(session, “shutdown”, id): tắt một virtual machine

- one.vm.action(session, “delete”, id): xóa một virtual machine

- one.vm.allocate: xin cấp phát mới một virtual machine trong OpenNebula - one.vm.info: xem thông tin chi tiết của một virtual machine

- onetemplate: quản lý template

- one.template.update: update một template - one.template.allocate: tạo mới một template

- one.template.publish: publish or unpublish một resource - one.template.delete: xóa một template

- one.template.info: xem thông tin chi tiết một template đã được tạo - onehost: quản lý host

- one.host.allocate: xin cấp phát một host mới trong OpenNebula. - one.host.delete: xóa một host có sẵn khỏi pool.

- one.host.info: xem thông tin chi tiết của host. - oneimage: quản lý các image

- one.image.allocate: tạo mới một image

- one.image.info: xem thông tin chi tiết một image

2.3.4.2 JAVA-API

2.3.4.2.1 Giới thiệu JAVA-API

Java API được thiết kế như một wrapper cho các phương thức XML-RPC. Java API hỗ trợ những cách thuận tiện và đơn giản nhất để giao tiếp với hệ thống OpenNebula bên dưới. Có đầy đủ các chức năng mà các phương thực XML-RPC đã hỗ trợ và được sử dụng trong các ứng dụng cloud viết bằng ngôn ngữ Java.

2.3.4.2.2 Một vài lớp chính của JAVA API

- org.opennebula.client.Client: Đối tượng chính để kết nối với OpenNebula. - org.opennebula.client.vm.VirtualMachine.

- action(java.lang.String action): thực thi một tác vụ(hold, restart, shutdown, delete) trên một virtual machine. (adsbygoogle = window.adsbygoogle || []).push({});

- allocate(Client client, java.lang.String description): xin cấp phát một virtual machine mới trong OpenNebula.

- deploy(int hostId): deploy một virtual machine có sẵn trên host.

- info(Client client, int id): xem thông tin chi tiết của một virtual machine. - org.opennebula.client.template.Template.

- allocate(Client client, java.lang.String description): tạo mới một template. - delete(Client client, int id): xóa một template.

- info(Client client, int id): xem thông tin chi tiết một template đã được tạo.

- publish(Client client, int id, boolean publish): publish or unpublish một resource. - org.opennebula.client.host.Host.

- allocate(Client client, java.lang.String hostname, java.lang.String im,

java.lang.String vmm, java.lang.String tm): tạo một host mới trong OpenNebula. - delete(Client client, int id) : xóa một host có sẵn.

- org.opennebula.client.image.Image.

- allocate(Client client, java.lang.String description) : tạo mới một image trong OpenNebula.

- enable (boolean enable) : enable/disable một image. - delete (Client client, int id) : xóa một image.

CHƯƠNG 3 GIẢI PHÁP CHI TIẾT 3.1 Tổng quan

Sơ đồ tổng quan của hệ thống virtual lab bao gồm các thành phần được mô tả như trong hình sau:

Hình 3.1. Sơ đồ tổng quan của hệ thống v irtual lab

- Course Management : thành phần quản lý các tác vụ liên quan đến môn học, thực hành của sinh viên.

- Accounting & Pricing : Thành phần dùng để tính toán chi phí sử dụng, có chức năng điều chỉnh lưu lượng sử dụng của người dùng dựa trên các chính sách định sẵn.

- Scheduling : Có chức năng lập lịch, xếp thời khóa biểu sao cho tối ưu nhất, hổ trợ việc triển khai các máy ảo lên các node một cách hợp lý và hiệu quả.

- Virtual Machine Management : thành phần quản lý việc triển khai cũng như thu hồi các máy ảo, cấp phát các máy ảo một cách linh động và hợp lý.

- Monitoring : Có chức năng giàm sát sự hoạt động của các host trong openNebula và giám sát sự hoạt động của các máy ảo, ra thông báo kịp thời nếu hệ thống có vấn đề.

Nhìn chung để có một hệ thống ổn định thì các thành phần này cần phải phối hợp hoạt động với nhau một cách hợp lý và ăn ý. Chẳng hạn như khi có một yêu cầu gửi đến từ giao diện web portal yêu cầu triển khai các máy ảo, thì thành phần Virtual Machine Management(VMM) sẽ tiếp nhận yêu cầu này sau đó sẽ truy xuất xuống openNebula để lấy thông tin hiện tại của hệ thống rồi gửi sang thành phần Scheduling để hỏi xem máy ảo nên triển khai như thế nào là hợp lý và tiết kiệm tài nguyên nhất, khi nhận được kết quả trả về từ Scheduling, VMM sẽ yêu cầu openNebula triển khai máy ảo theo đúng những gì Scheduling tính toán trước đó, nếu thực hiện thành công, VMM sẽ thông báo cho thành phần Accounting & Pricing về kết quả để module này thực hiện các tính toán cần thiết của mình đồng thời gửi kết quả đến Monitor để giám sát sự hoạt động của máy ảo này, nếu thực hiện thất bại, thì tùy vào nguyên nhân thất bại mà VMM có thể triển khai lại hoặc thông báo đến người dùng.

3.2 Các tương tác chính

3.2.1 Giữa Resources Management System( RMS) và Monitor

Resources Management System ở đây bao gồm hai thành phần Course Management và Virtual Machine Management. Tương tác được thể hiện qua sơ đồ sau:

Hình 3.2. Sơ đồ tương tác giữa Resource Management System v à Mon itor system

Monitor sẽ cung cấp một vài chức năng cho Resouses Management System như lấy thông tin của máy ảo, host, thêm, sửahoặc xóa host, máy ảo. Những chức năng này cần thiết cho user xem thông tin sử dụng của máy ảo, hoặc cho người quản trị xem thông tin hiện tại của hệ thống.

Hình 3.3. Sơ đồ tương tác giữa Resources Management System (RMS) v à Scheduler

RMS sẽ tương tác với Scheduler sẽ tương tác với nhau thông qua giao thức XML-RPC, RMS sẽ gửi cho Scheduler yêu cầu của người dùng cùng với thông tin hệ thống để Scheduler dựa vào đó tính toán và giải quyết yêu cầu một cách hợp lý nhất sau đó trả kết quả về cho RMS.

3.2.3 Giữa Resources Management System và Accounting& Pricing (AP)

Sau khi RMS tạo một template mới thì sẽ gửi thông tin đó sang AP để AP tính toán chi phí cho template đó và lưu trữ xuống cơ sở dữ liệu.

RMS khi triển khai thành công một máy ảo thì cũng gửi thông tin sang AP như thông tin về máy ảo, thời gian bắt đầu, thời gian sẽ kết thúc máy ảo. Đồng thời trong quá trình sử dụng máy ảo RMS sẽ gửi thông tin sang ÂP để yêu cầu chi phí sử dụng hiện tại của máy ảo đó là bao nhiêu. (adsbygoogle = window.adsbygoogle || []).push({});

3.3 Thiết kế database

Về mặt thiết kế cơ sở dữ liệu, hệ thống gặp rắc rối ở chỗ phải sử dụng đến hai cơ sở dữ liệu khác nhau, mộ do tự tạo ra nhằm quản lý các tài nguyên của Virtual Lab, một là dữ liệu của chính OpenNebula. Trong khi đó, các thành phần này lại có mối quan hệ chặt chẽ

với nhau. Ví dụ như việc quản lý người dùng của hệ thống. Với mỗi một người dùng của Virtual Lab, về nguyên tắc cần phải có một tài khoản được khai báo trong OpenNebula và một tài khoản thuộc cơ sở dữ liệu riêng của Virtual Lab.

Hình 3.4. User phải được lưu trữ v à quản lý hai cơ sở dữ liệu k hác nhau

Để đảm bảo sự nhất quán về tài khoản người dùng, các thông tin về tên tài khoản, mật mã phải được đồng nhất giữa hai cơ sở dữ liệu. Tuy nhiên, xét ở góc độ quản lý cơ sở dữ liệu, chúng ta không thể tạo được quan hệ giữa hai bảng trên hai cơ sở dữ liệu độc lập với nhau như vậy.

Một ví dụ khác, hệ thống Virtual Lab cần lưu trữ dữ liệu thời gian hoạt động của mỗi một máy ảo bao gồm thời gian bắt đầu và kết thúc của nó. Như vậy, ta cần lưu trữ một bảng có tên là res_vm_time chứa mã chiếu đến ID của một máy ảo thực sự đang tồn tại trong hệ thống OpenNebula. Dĩ nhiên, ta có thể lưu trữ bằng một quan hệ lỏng lẻo, nghĩa là chỉ cần biết mã máy ảo một lần, lưu vào cơ sở dữ liệu của Virtual Lab. Tuy vậy, yêu cầu của một hệ thống làm việc tin cậy không cho phép chúng ta duy trì những quan hệ lỏng lẻo về mặt cơ sở dữ liệu như thế.

Hình 3.5. Thuộc tính v m_id của bảng res_v m_time tham chiếu đến mã máy ảo trong hệ thống OpenNebula

Từ thực tế trên, ta cần phải có một phương pháp kết nối hai cơ sở dữ liệu để duy trì các quan hệ chặt chẽ giữa các bảng.

Một phương pháp để thử nghiệm là lưu trữ lại các đối tượng của OpenNebula và chung cơ sở dữ liệu của Virtual Lab. Như vậy, chúng ta có thể tạo được các quan hệ giữa các bảng một cách dễ dàng. Tuy nhiên, phương pháp này đòi hỏi một cách thức để sao chép dữ liệu từ OpenNebula một các thường xuyên để cập nhật cho hệ thống Virtual Lab. Điều này kéo theo một chi phí rất lớn, làm giảm hiệu suất của toàn hệ thống. Khi số lượng người dùng tăng nhanh, hệ thống sẽ không thể đủ sức mạnh để đáp ứng nhu cầu thực tế. Hơn nữa, một hệ thống như vậy không thể tin tưởng được. Luôn luôn tồn tại những khoảng thời gian mà dữ liệu của OpenNebula không đồng nhất với dữ liệu của Virtual Lab. Ví dụ, Virtual Lab có nhu cầu khởi động một máy ảo có mã là 100. Tuy nhiên, khi gửi yêu cầu cho OpenNebula thì hệ thống này đã xóa máy ảo trên mà chưa cập nhập cho Virtual Lab. Điều này sẽ sinh ra các lỗi trong quá trình thực thi không đáng có.

Vì vậy, trong thực tế, ta không thể lưu trữ lại dữ liệu của OpenNebula trong hệ thống Virtual Lab. Chúng tôi đã nghiên cứu và quyết định tự xây dựng lấy một lớp trung gian để đảm bảo các mối quan hệ giữa các bảng của Virtual Lab với các thành phần của

dữ liệu của Virtual Lab, cũng như viết thêm các hàm Java API truy cập đến OpenNebula, đảm bảo thông tin luôn được cập nhật với chi phí chấp nhận được.

Hình 3.6. Thiết k ế lớp Jav a để duy trì các quan hệ giữa hai cơ sở dữ liệu độc lập

Xét lại ví dụ bảng res_vm_time cần chứa một tham chiếu đến đối tượng máy ảo được

quản lý bởi OpenNebula. Khi hiện thực theo nguyên tắc cùa Hibernate, việc truy cập cơ sở dữ liệu được hỗ trợ rất tốt từ bên dưới. Người dùng không cần phải viết các câu truy vấn SQL mỗi khi cần truy cập đến cơ sở dữ liệu, mà công việc này được thực hiện thông qua một DAO (Data access object).

Nhờ vậy, công sức phát triển cũng như sự trong sáng của chương trình sẽ được tăng lên đáng kể.

Để có thể kết nối với dữ liệu của cả hai hệ thống, bên trong lớp VM_TIME, ta viết thêm các hàm truy cập đến OpenNebula thông qua Cloud API cho các thuộc tính cần thiết.

Hình 3.8. Ví dụ các hàm truy cập đến OpenNebula của lớp VM_TIME

Như vậy, thông qua một phương thức trung gian, hệ thống giám sát và quản lý tài nguyên của Virtual Lab có thể duy trì được quan hệ giữa các thành phần thuộc hai hệ thống độc lập với nhau. Nhờ đó, ta có thể tăng độ ổn định, giảm chi phí cho hệ thống một cách đáng kể mà vẫn giữ cho mã chương trình hết sức trong sáng.

Vì các quan hệ nêu trên được bảo đảm, ta có thể đưa ra bảng thiết kế cơ sở dữ liệu cho toàn bộ hệ thống trong một lược đồ EER duy nhất.

CHƯƠNG 4 DEMO HỆ THỐNG 4.1 Giao diện web tổng quan

Khi vào web portal, màn hình sau sẽ hiển thị và yêu cầu người dùng đăng nhập:

Hình 4.1. Trang đăng nhập

Sauk hi đăng nhập vào hệ thống thành công sẽ xuất hiện trang About us, đây là trang giới thiệu:

Các chức năng để demo chính của hệ thống được nằm trong thẻ Subjects, khi click vào đó sẽ hiện thị ra danh sách các môn học:

Hình 4.3. Danh sách các môn học

Trong trang này, có thể thêm, xóa, hoặc chỉnh sửa các môn học, ngoài ra còn có chức năng thêm bài thực hành ( lab) vào một môn học. Chức năng Add subject:

Hình 4.4. Thêm một môn học v ào cơ sở dữ liệu

Sau khi submit, nếu thêm thành công sẽ quay lại màn hình ban đầu và hiển thị danh sách môn học mới:

Hình 4.5. Sau k hi t hêm t hành công môn học

Khi click vào tên mỗi một môn học, sẽ hiển thị danh sách các bài thực hành của môn học đó: (adsbygoogle = window.adsbygoogle || []).push({});

Hình 4.6. Danh sách các bài thực hành

Hình trên là danh sách các bài thực hành của môn hệ điều hành, từ trang này có thể chỉnh sửa, xóa hoặc thêm một bài thực hành. Ví dụ sau sẽ thêm một bài thực hành có tên là Lab5 – Lập trình thread vào môn học hệ điều hành:

Hình 4.7. Thêm một bài thực hành

Ở đây, tên của bài thực hành không được trùng nhau, nếu trùng sẽ có thông báo lỗi xuất hiện, sau khi thêm thành công sẽ trở lại trang chính của môn học đó:

Hình 4.8. Sau k hi thêm bài thực hành thành công

Khi click vào tên các bài thực hành, sẽ hiển thị các template của máy ảo phục vụ cho bài thực hành đó:

Hình 4.9. Template máy ảo dành cho bài Lab1

Từ những template này, chúng ta có thể tạo ra và chạy các máy ảo, muốn tạo máy ảo theo template nào, chọn Create từ template đó, chờ một khoảng thời gian để OpenNebula triển khai máy ảo đó, nếu thành công sẽ chuyển sang một màn hình mới hiển thị máy ảo đã được khởi động:

Dựa vào đây có thể biết được thông số VNC port của máy ảo là 5941, người sử dụng chỉ cần dùng một VNC client để kết nối đến máy ảo và sử dụng chúng:

PHẦN III: TỔNG KẾT

1. Các kết quả đạt được 1.1.Về mặt lý thuyết 1.1.Về mặt lý thuyết

- Chúng tôi đã hiểu được cách thức để xây dựng nên một hệ thống Cloud computing sử dụng trong môi trường nội bộ của trường đại học Bách khoa, nắm được các kĩ thuật cũng như các công nghệ được sử dụng trong openNebula, cách thức sử dụng nó để xây dựng nên một private cloud.

- Trong giai đoạn này chúng tôi cũng đã tìm hiều được những lý thuyết cơ bản về Virtual Lab, một môi trường thực hành ảo, xây dựng được những chức năng cơ bản cho môi trường Virtual Lab trong trường đại học Bách Khoa.

- Tìm hiểu được cách tạo được các ảnh máy ảo được tích hợp sẵn các thành phần dùng để xác thực người sử dụng thông qua một trung tâm dữ liệu người dùng ( ở đây là hệ cơ sở dữ liệu openLDAP)

Một phần của tài liệu NGHIÊN CỨU XÂY DỰNG HỆ THỐNG QUẢN LÝ VÀ CẤP PHÁT TÀI NGUYÊN CHO HỆ THỐNG VIRTUAL LAB TRÊN NỀN ĐIỆN TOÁN ĐÁM MÂY (Trang 29 - 52)