Luận văn Nghiên cứu hệ thống máy ảo mã nguồn mở OPENVZ

Một trong những phần mềm thƣờng đƣợc lựa chọn đó là OpenVZ. Thông qua việc tìm hiểu về máy ảo mã nguồn mở OpenVZ khóa luận đã nêu đƣợc nội dung tổng quan về ảo hóa, và tiến hành tìm hiểu một cách cụ thể về phần mềm OpenVZ, bao gồm các đặc điểm của phần mềm, cách cài đặt và quản trị hệ thống máy ảo sử dụng phần mềm OpenVZ.

pdf97 trang | Chia sẻ: lylyngoc | Lượt xem: 3010 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu hệ thống máy ảo mã nguồn mở OPENVZ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
khả năng hỗ trợ thêm nhiều VPS nếu các VPS hiện tại tiếp tục duy trì cũng một tải và mức tiêu thụ vài tài nguyên. Mức sử dụng cao (hơn 1 hoăc hơn 100%) có nghĩa là hệ thống bị quá tải và mức độ dịch vụ của VPS bị suy giảm. Cho thấy mức cam kết là số tài nguyên đã “hứa” cho VPS hiện tại. Mức cam kết thấp có nghĩa hệ thống có khả năng hỗ trợ thêm nhiều VPS nữa. Mức độ cam kết hơn 1 có nghĩa VPS đang đƣợc hứa hẹn nhiều tài nguyên hệ thống có và hệ thống đƣợc gọi là vƣợt quá cam kết. Nếu hệ thống chạy rất nhiều VPS 47 nó thƣờng chấp nhận đƣợc một số cái “trên mức cam kết” vì không chắc rằng tất cả các VPS sẽ yêu cầu một trong những nguồn tài nguyên vào cùng thời gian nhƣ nhau. Tuy nhiên mức cam kết rất cao sẽ gây ra cho các VPS không đƣợc phân bố và sử dụng tài nguyên nhƣ đã hứa và có thể thể làm mất ổn định hệ thống. Bộ nhớ thấp là vùng quan trọng nhất của bộ nhớ RAM đại diện cho một phần của bộ nhớ cƣ trú tại địa chỉ thấp hơn và có thể truy cập trực tiếp bởi hạt nhân.Trong OpenVZ, kích thƣớc của vùng nhớ thấp đƣợc giới hạn là 832MB trong UP (bộ xử lý đơn) và phiên bản SMP của hạt nhân, và để 3.6 GB trong phiên bản Enterprise của hạt nhân. Nếu tổng kích thƣớc RAM máy tính thấp hơn giới hạn (832MB hoặc 3.6GB tƣơng ứng) thì kích thƣớc thực tế của các vùng bộ nhớ thấp bằng tổng dung lƣợng bộ nhớ. Bộ nhớ bao gồm RAM và bộ nhớ trao đổi là các tài nguyên máy tính quyết định bộ nhớ có sẵn cho các ứng dụng. Nếu tổng kích thƣớc bộ nhớ đƣợc sử dụng vƣợt quá kích thƣớc bộ nhớ RAM, nhân Linux sẽ chuyển một số dữ liệu sang bộ nhớ trao đổi và tải nó về khi ứng dụng cần tới nó. Dữ liệu đƣợc sử dụng nhiều có xu hƣớng ở lại trong RAM, dữ liệu ít đƣợc sử dụng thì phần lớn thời gian nằm trong bộ nhớ trao đổi. Hoạt động trao đổi ra và trao đổi vào làm giảm hiệu suất hoạt động của hệ thống ở một số phạm vi, tuy nhiên nếu hoạt động này không nhiều thì việc giảm hiệu suất không phải là vấn đề đáng chú ý. Mặt khác, cá lợi ích của việc sử dụng bộ nhớ trao đổi là khá lớn, cho phép tăng số lƣợng các VPS trong hệ thống lên 2 lần. Trao đổi là cần thiết để xử lý sự vƣợt tải của hệ thống. Một hệ thống với không gian bộ nhớ trao đổi đủ chỉ chậm khi sự vƣợt tải cao, trong khi một hệ thống mà không đủ không gian bộ nhớ trao đổi, phản ứng lại với sự vƣợt tải cao do bị từ chối cấp phát bộ nhớ (gây ra việc các ứng dụng từ chối chấp nhận khách hàng hoặc chấm dứt) và trực tiếp giết chết một số ứng dụng. Ngoài ra, sự hiện diện của bộ nhớ trao đổi, giúp cân bằng hệ thống tốt hơn nhờ việc di chuyên dữ liệu giữa các khu vực bộ nhớ thấp và phần còn lại của RAM. Cấp phát bộ nhớ là việc thêm “ảo” tài nguyên hệ thống nhiều hơn RAM hoặc RAM cộng với bộ nhớ trao đổi. Ứng dụng có thể cấp phát bộ nhớ nhƣng bắt đầu sử dụng nó chỉ sau khi và chỉ khi bộ nhớ vật lý trống thực sự giảm. Tổng kích cỡ của bộ nhớ đƣợc phân bổ trong tất cả các VPS là ƣớc lƣợng bộ nhớ vật lý sẽ đƣợc sử dụng nếu tất cả các ứng dụng đòi hỏi đƣợc phân bổ bộ nhớ. Bộ nhớ có sẵn để phân bố không chỉ đƣợc sử dụng (cột Alloc util) hoặc mức cam kết (cột Alloc commit), nhƣng cũng có giới hạn (các ứng dụng sẽ không có khả năng phân bổ nguồn lực nhiều hơn giá trị chỉ ra trong cột Alloc limit). 48 3.4.5. Quản lý cấu hình tài nguyên VPS Bất kỳ VPS nào cũng đƣợc quản lý bởi tệp tin cấu hình riêng của từng VPS. Ta có thể quản lý cấu hình VPS bằng một số cách: 1. Sử dụng các tệp tin mẫu làm việc với OpenVZ. Những tệp tin này đƣợc sử dụng khi một VPS mới đƣợc tạo ra. Chúng đƣợc lƣu trữ cùng thƣ mục với các tệp tin cấu hình VPS (/etc/sysconfig/vz-scripts/) và có tên là ve-name.conf-sample. Hiện tại các tệp tin cấu hình mẫu sau đây đƣợc cung cấp:  light – sẽ sử dụng cho việc tạo “light” VPS có hạn chế về việc giới hạn chất lƣợng của tham số dịch vụ.  vps.basic – đƣợc sử dụng cho cho các VPS phổ biến Bất kỳ tập tin cấu hình mẫu cũng có thể áp dụng cho một VPS sau khi nó đƣợc tạo ra. Có thể thay đổi điều này, ví dụ khi muốn nâng cấp hoặc hạ cấp cấu hình tài nguyên tổng thể của một VPS cụ thể: # vzctl set 101 --applyconfig light --save Lệnh này áp dụng cho tất cả tham số từ các file ve-light.conf-sample tới các VPS đã cho, ngoại trừ các tham số OSTEMPLATE, VE_ROOT và VE_PRIVATE, chúng cần phải tồn tại trong tệp tin cấu hình mẫu. 2. Sử dụng các tiện ích chuyên biệt của OpenVZ để thiết lập các tham số trong tệp tin cấu hình. Các tiện ích này đƣợc mô tả trong phần sau. 3. Trực tiếp tạo và sửa các tệp tin cấu hình tƣơng ứng (/etc/sysconfig/vz- scripts/VPS_ID.conf). Điều này đƣợc thực hiện với sự giúp đỡ của bất kỳ trính soạn thảo nào. Các hƣớng dẫn về cách chỉnh sửa tệp tin cấu hình VPS đƣợc cung cấp ở phần trƣớc. Trong từng trƣờng hợp phải sửa tất cả các tham số cấu hình riêng, từng cái một. a. Chia máy chủ vật lý gốc thành những phần bằng nhau Có thể tạo một VPS cấu hình đại diện cho một phần nhất định của máy chủ vật lý gốc. Nếu muốn tạo một cấu hình nhƣ vậy với 20 VPS đầy đủ có thể đồng thời chạy trên máy chủ vật lý gốc, có thể làm nhƣ sau: # cd /etc/sysconfig/vz-scripts/ 49 # vzsplit -n 20 -f vps.mytest The optimal swap space size is 1005 Mb, twice bigger than the RAM size WARNING: Recommended minimal size of partition holding /vz/private/ is 20Gb! Config /etc/vz/conf/ve-vps.mytest.conf-sample was created Lƣu ý các cấu hình này phụ thuộc vào nguồn tài nguyên của máy chủ vật lý gốc. Do đó, điều quan trọng là xác nhận các tệp tin cấu hình kết quả trƣớc khi sử dụng nó với sự giúp đỡ của tiện ích vzcfgvalidate. Số lƣợng các VPS có thể chạy trên máy chủ vật lý gốc lớn hơn nhiều lần giá trị đƣợc chỉ định trong dòng lệnh vì VPS thƣờng không tiêu thụ tất cả các nguồn tài nguyên đƣợc đảm bảo cho chúng. Để minh họa điều này, xem việc tạo máy chủ từ cấu hình sản xuất trên: # vzctl create 101 --ostemplate centos-4-i386-minimal --config vps.mytest Creating VPS private area: /vz/private/101 VPS private area was created # vzctl set 101 --ipadd 192.168.1.101 --save Saved parameters for VPS 101 # vzctl start 101 Starting VPS ... VPS is mounted Adding IP address(es): 192.168.1.101 VPS start in progress... # vzcalc 101 Resource Current(%) Promised(%) Max(%) Memory 0.53 1.90 6.44 50 Nhƣ trên, nếu VPS sử dụng tất cả các nguồn lực đảm bảo cho chúng, thì có khoảng 20 VPS có thể chạy cùng lúc, tuy nhiên dựa trên đầu ra của cột Promised, có thể chạy 40-50 VPS một cách an toàn trên máy chủ vật lý gốc. b. Phê duyệt cấu hình VPS Các tham số điều khiển tài nguyên hệ thống có mối liên hệ phức tạp. Vi phạm các mối liên hệ này có thể gây ra lỗi cho VPS. Để đảm bảo rằng một VPS không phá vỡ mối liên hệ kia, điều quan trọng là xác nhận các tệp tin cấu hình VPS trƣớc khi tao nó trên cơ sở các môi liên hệ. Dƣới đây là một kịch bản điển hình để xác nhận: # vzcfgvalidate /etc/sysconfig/vz-scripts/101.conf Error: kmemsize.bar should be > 1835008 (currently, 25000) # vzctl set 101 --kmemsize 2211840:2359296 --save Saved parameters for VPS 101 # vzcfgvalidate /etc/sysconfig/vz-scripts/101.conf Recommendation: dgramrcvbuf.bar should be > 132096 (currently, 65536) Validation completed: success Tiện ích kiểm tra các ràng buộc về tham số quản lý tài nguyên và hiển thị tất cả những vị phạm đƣợc tìm thấy. Có 3 cấp độ vi phạm đƣợc thể hiện ở bảng 8 dƣới đây: Bảng 8. Các cấp độ vi phạm Recommendation Đây là một gợi ý, nó không quan trọng tới hoạt động của VPS hay máy chủ vật lý gốc. Cấu hình nói chung là hợp lệ, tuy nhiên nếu hệ thống có đủ bộ nhớ, nên tăng các giá trị các tham số theo nhƣ lời khuyên. Warning Một ràng buộc không đƣợc thỏa mãn, và cấu hình không hợp lệ. Ứng dụng trên VPS có thể không đạt đƣợc hiệu suất tối ƣu hoặc thậm chí bị lỗi. Error Một ràng buộc quan trọng không đƣợc thỏa mãn và cấu hình không hợp lệ. Các ứng dụng trên VPS gia tăng nguy cơ bị lỗi, bị chấm dứt hoặc treo. 51 Nhƣ trong kịch bản trên, đầu tiên tiện ích vzcfgvalidate tìm thấy một lỗi nghiêm trọng đối với giá trị tham số kmemsize. Sau khi thiết lập giá trị hợp lý cho kmemsize, tệp tin cấu hình đƣợc kiểm tra lần nữa có một khuyến cáo duy nhất, lúc này VPS có thể chạy an toàn. 3.5. Các tác vụ nâng cao trên OpenVZ 3.5.1. Xác định số tài khoản VPS bởi định danh của tiến trình Mỗi tiến trình đƣợc xác định bởi duy nhất một PID (định danh của tiến trình), là một mục của tiến trình đó trong bảng tiến trình của hạt nhân. Ví dụ, khi khởi động Apache, nó đƣợc gán một PID, PID này sẽ đƣợc sử dụng để theo dõi và điều khiển chƣơng trình này. PID luôn là một số nguyên dƣơng. Trong OpenVZ có thể sử dụng lệnh vzpid để in số tài khoản của VPS thông qua PID vừa cho. Nhiều tiến trình có thể đƣợc quy định nhƣ đối số. Trong minh họa này, tiện ích vzpid sẽ in chỉ số VPS tƣơng ứng với mỗi tiến trình: [root@ts23 root]# vzpid 12 Pid VPS Name 12 4 init Trong ví dụ trên, hiển thị tiến trình có định danh là 12 có tên là init đang chạy trong VPS có ID=4. 3.5.2. Thay đổi thời gian hệ thống từ VPS Bình thƣờng, không thể thay đổi thời gian hệ thống từ một VPS riêng. Nếu không, các VPS khác nhau có thể can thiệp với nhau và thậm chí có thể phá vỡ các ứng dụng phụ thuộc vào độ chính xác thời gian của hệ thống. Thông thƣờng, chỉ có quản trị hệ thống máy chủ vật lý gốc mới có thể thay đổi thời gian hệ thống. Tuy nhiên, nếu nhƣ muốn đồng bộ hóa thời gian thông qua giao thức thời gian mạng (NTP), phải chạy phần mềm NTP, nó sẽ kết nối với bên ngoài máy chủ NTP và cập nhật thời gian hệ thống. Nó không thích hợp để chạy phần mềm ứng dụng trên máy chủ vật lý gốc của mình, vì từ lỗ hổng này của phần mềm có thể ảnh hƣởng tới tất cả các VPS khác trên máy chủ vật lý gốc. Vì thế nếu có kế hoạch sử dụng NTP, nên tạo một VPS đặc biệt cho nó và cấu hình nó để nó có khả năng sys_time. Ví dụ dƣới đây minh họa cấu hình một VPS nhƣ vậy: 52 [root@localhost ~]# vzctl set 101 --capability sys_time:on --save Unable to set capability on running container WARNING: Some of the parameters could not be applied to a running container. Please consider using --setmode option Saved parameters for CT 101 [root@localhost ~]# vzctl restart 101 Restarting container Stopping container ... Container was stopped Container is unmounted Starting container ... Container is mounted Adding IP address(es): 192.168.1.30 Setting CPU limit: 4 Setting CPU units: 5000 Configure meminfo: 65536 Set hostname: vps101.my.org File resolv.conf was modified Setting quota ugidlimit: 100 Container start in progress... [root@localhost ~]# ssh root@192.168.1.30 root@192.168.1.30's password: Last login: Sun Feb 28 09:13:04 2010 from 192.168.1.7 [root@vps101 ~]# date Thu Mar 18 07:28:01 ICT 2010 [root@vps101 ~]# date 10291300 Fri Oct 29 13:00:00 ICT 2010 [root@vps101 ~]# date 53 Fri Oct 29 13:00:06 ICT 2010 [root@vps101 ~]# exit logout Connection to 192.168.1.30 closed. [root@localhost ~]# date Fri Oct 29 13:00:20 ICT 2010 Các lệnh trên cho thấy cách để thay đổi thời gian hệ thống từ VPS 101, những thay đổi sẽ ảnh hƣởng tới tất cả các VPS và chính máy chủ vật lý gốc. Nó không đƣợc khuyến khích để có nhiều hơn một VPS có khả năng sys_time nhƣ trên. 3.5.3. Truy cập các thiết bị từ bên trong VPS Có thể cấp quyền đọc, ghi hoặc đọc/ghi cho một VPS để truy cập tới một đối tƣợng hay một thiết bị khối. Điều này là cần thiết, ví dụ đối với phần mềm cơ sở dữ liệu Oracl mà muốn sử dụng khả năng làm việc với các phân vùng đĩa nguyên. Trong hầu hết các trƣờng hợp, cung cấp truy cập vào hệ thống phân cấp tệp tin cho một VPS đạt đƣợc bằng cách sử dụng gắn kết. Tuy nhiên, ràng buộc gắn kết không cho phép tạo phân vùng mới, định dạng chúng với một hệ thống tệp tin, hoặc gắn kết chúng riêng bên trong một VPS. Nếu có ý định ủy quyền quản lý đĩa cho ngƣời quản trị viên VPS, cần thêm tùy chọn --devices hoặc --devnodes vào lệnh vzctl set. Xem minh họa sau: Ngƣời quản trị của VPS 101 chịu trách nhiệm quản lý hai thiết bị /dev/sdb1 và /dev/sdb2. Nói các khác, quản trị hệ thống VPS 101 đƣợc phép phân chia phân vùng /dev/sdb và tạo file hệ thống trên hai phân vùng đầu tiên (hoặc sử dụng chúng với bất kỳ phần mềm nào có khả năng làm việc với một phân vùng nguyên chẳng hạn nhƣ phần mềm cơ sở dữ liệu Oracle). Trƣớc tiên, cần cấp các quyền để VPS làm việc với thiết bị khối cần thiết: [root@localhost ~]# vzctl set 101 --devices b:8:16:rw --devices b:8:17:rw --devices b:8:18:rw --save Setting devices Saved parameters for CT 101 54 Lệnh này cho phép đọc/ghi lên các thiết bị khối có mã số chính là 8 và mã số con là 16, 17, 18 (tƣơng ứng với /dev/sdb, /dev/sdb1, /dev/sdb2). Nếu không chắc chắn về các mã số này, sử dụng lệnh sau: [root@localhost ~]# ls -l /dev/sdb{,1,2} brw-r----- 1 root disk 8, 16 Mar 18 17:15 /dev/sdb brw-r----- 1 root disk 8, 17 Mar 18 17:15 /dev/sdb1 brw-r----- 1 root disk 8, 18 Mar 18 17:15 /dev/sdb2 Bây giờ tạo một phân vùng Linux 100MB thêm vào phân vùn /dev/sdb1 đã tồn tại từ VPS 101: [root@localhost ~]# ssh root@192.168.1.30 root@192.168.1.30's password: Last login: Thu Mar 18 17:37:02 2010 from 192.168.1.7 [root@vps101 root]# fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 255 heads, 63 sectors, 2231 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 255 2048256 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (256-2231, default 256): 55 Using default value 256 Last cylinder or +size or +sizeM or +sizeK \ (256-2231, default 2231): +100M Command (m for help): p Disk /dev/sdb: 255 heads, 63 sectors, 2231 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 255 2048256 83 Linux /dev/sdb2 256 268 104422+ 83 Linux Command (m for help): w Sau khi ghi lại bảng phân vùng, có thể định dạng nó và gắn vào trong các VPS: [root@vps101 root]# mke2fs /dev/sdb2 [Output of mke2fs is skipped…] [root@vps101 root]# mount /dev/sdb2 /mnt [root@vps101 root]# df Filesystem 1k-blocks Used Available Use% Mounted on simfs 1048576 149916 898660 15% / ext2 101107 13 95873 1% /mnt Phải luôn chỉ rõ tất cả các mã số con cho các thiết bị muốn ủy quyền, cho phép truy cập tới phân vùng /dev/sdb để tạo, sửa đối và xóa phân vùng trên nó, nhƣng điều khoản sẽ đƣợc trao cho các phân vùng cho phép VPS làm việc với nó. 56 3.5.4. Cơ chế chia sẻ mạng trong giữa máy chủ vật lý gốc và các VPS Để các VPS có khả năng kết nối với nhau và kết nối ra ngoài mạng, cần phải có cơ chế để chia sẻ mạng giữa máy chủ vật lý gốc và các VPS. Có 2 cơ chế đó là sử dụng thiết bị mạng ảo và sử dụng thiết bị Ethernet ảo. a. Sử dụng thiết bị mạng ảo Thiết bị mạng ảo (venet) là thiết bị mạng mặc định cho một VPS, nó hoạt động ở tầng thứ 3 của mô hình OSI (tần mạng), thiết bị này giống nhƣ một kết nối điểm tới điểm (point-to-point) giữa VPS và máy chủ vật lý gốc. Venet đƣợc tạo ra một cách tự động khi VPS khởi động. Lệnh vzctl set thiết lập địa chỉ IP thích hợp và các cài đặt khác trên venet bên trong một VPS. Hình 5. Mô hình dạng sao đối với các VPS sử dụng Venet Có thể mô tả cơ chế làm việc của các VPS và máy chủ vật lý gốc giống nhƣng một mô hình mạng dạng sao đƣợc mô phỏng nhƣ hình 5, trong đó máy chủ là thiết bị trung tâm và các VPS là các máy trạm. Khi thêm vào một VPS một địa chỉ IP thì nó tạo ra một cạc mạng ảo venet0:i nhƣng cạc mạng này không hỗ trợ giao thức ARP vì nó không có địa chỉ MAC, nó cũng không hỗ trợ bridge và không thể gán địa chỉ IP bởi chính VPS đó. Các gói tin đi từ VPS này sang VPS khác hay ra ngoài mạng đều phải qua thiết bị mạng ảo venet0 của máy chủ vật lý gốc, có thể thấy điều đó trong 2 minh hoạ sau: 57 login as: root root@192.168.1.101's password: Last login: Mon Mar 22 09:44:30 2010 from 192.168.1.4 [root@localhost ~]# tracepath 192.168.1.102 1: 192.168.1.101 (192.168.1.101) 0.810ms pmtu 1500 1: 192.168.1.4 (192.168.1.4) 0.112ms 2: 192.168.1.102 (192.168.1.102) asymm 1 0.138ms reached Resume: pmtu 1500 hops 2 back 1 [root@localhost ~]# tracepath dantri.com.vn 1: 192.168.1.101 (192.168.1.101) 0.572ms pmtu 1500 1: 192.168.1.4 (192.168.1.4) 0.104ms 2: 192.168.1.1 (192.168.1.1) 1.105ms pmtu 1492 3: 118.70.1.25 (118.70.1.25) asymm 5 42.583ms 4: 118.70.0.17 (118.70.0.17) asymm 5 85.356ms 5: 210.245.1.17 (210.245.1.17) asymm 6 42.823ms 6: 203.162.248.61 (203.162.248.61) asymm 7 43.893ms 7: localhost (123.30.63.118) asymm 8 45.528ms 8: localhost (123.30.53.19) asymm 9 43.115ms reached Resume: pmtu 1492 hops 8 back 9 58 b. Sử dụng thiết bị Ethernet ảo Thiết bị Ethernet ảo (veth) nó giống nhƣ một thiết bị Ethernet đƣợc gắn vào VPS, nhƣng nó khác với venet ở chỗ nó có địa chỉ MAC, do đó có thể sử dụng trong các cấu hình, khi nó là cầu nối tới cạc mạng thật ethX của máy chủ vật lý gốc hay các thiết bị khác và VPS sử dụng đầy đủ các thiết lập mạng bao gồm IP và gateway. Thiết bị Ethernet ảo bao gồm 2 thiết bị Ethernet, một trong máy chủ vật lý gốc và một trong VPS, các thiết bị này kết nối với nhau, do đó nếu một gói đi vào một thiết bị thì nó sẽ đi ra từ thiết bị còn lại. Điều này có nghĩa rằng, khi thêm vào một VPS một thiết bị Ethernet ảo thì trên máy chủ vật lý gốc cũng xuất hiện thêm một thiết bị Ethernet ảo tƣơng ứng vethID.i. Để thêm một thiết bị veth vào VPS, làm nhƣ sau: # vzctl set 101 --netif_add eth0 --save Lúc này có 2 cạc mạng ảo nối với nhau và có địa chỉ MAC nên có thể cấu hình ngay trong chính VPS và máy chủ vật lý gốc, có thể tạo cầu nối giữa các thiết bị và định tuyến. Cấu hình veth trong máy chủ vật lý gốc: # ifconfig veth101.0 0 # echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding # echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp # echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding # echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp Cấu hình veth trong VPS: [host-node]# vzctl enter 101 [ve-101]# /sbin/ifconfig eth0 0 [ve-101]# /sbin/ip addr add 192.168.0.101 dev eth0 [ve-101]# /sbin/ip route add default dev eth0 Thêm định tuyến trong máy chủ vật lý gốc: 59 [host-node]# ip route add 192.168.0.101 dev veth101.0 Khi sử dụng veth độ an toàn của mạng không phụ thuộc vào máy chủ vật lý gốc mà mỗi VPS phải tự thiết lập mạng lƣới an ninh riêng biệt của chính nó trong khi độ an toàn của mạng khi sử dụng venet lại đƣợc đảm bảo bởi máy chủ vật lý gốc. Xét tổng thể thì giải pháp sử dụng thiết bị mạng ảo thì nhanh, an toàn và dễ thao tác hơn vì vậy nó đƣợc lựa chọn làm thiết bị mặc định mỗi khi một VPS đƣợc tạo mới. c. Sử dụng thiết bị Ethernet ảo và Bridge ảo để bảo vệ máy chủ vật lý gốc và tiết kiệm địa chỉ IP Ta đƣợc cung cấp một số lƣợng có hạn các địa chỉ IP bởi các nhà cung cấp dịch vụ nhƣng lại muốn gán đƣợc càng nhiều địa chỉ IP cho các VPS càng tốt. Muốn bảo vệ các VPS từ Internet nhƣng lại muốn bảo vệ máy chủ vật lý gốc từ Internet và làm cho nó có thể quản lý các VPS từ máy chủ vật lý gốc trong mạng cục bộ. Hình 6. Mô hình mạng thiết bị Ethernet ảo và Bridge ảo Nguồn: 60 Giả thiết có 2 cạc Ethernet thật trên máy chủ vật lý gốc (eth0 và eth1), cần thiết lập một mạng mà ở đó các VPS kết nối ra ngoài Intertnet nhƣng không thông qua máy chủ vật lý gốc nhƣ hình 6. Chỉ tiến hành cấu hình VPS 101 và VPS 102 thì tƣơng tự Trƣớc hết cần tạo ra địa chỉ MAC để cấu hình cho eth0 của VPS 101 và cạc Ethernet ảo veth101.0 bằng tiện ích easymac: [HN]# wget [HN]# chmod 0777 easymac.sh [HN]# ./easymac.sh -R 00:0C:29:70:BB:34 [HN]# ./easymac.sh -R 00:0C:29:C0:2E:07 Sau đó thay thế thiết bị mạng ảo venet bằng thiết bị Ethernet ảo nhƣ sau: [HN]# ifconfig venet0:0 down [HN]# vzctl set 101 --netif_add eth0,00:0C:29:70:BB:34,veth101.0,00:0C:29:C0:2E:07 --save [HN]# ifconfig veth101.0 0 [HN]# echo 0 > /proc/sys/net/ipv4/conf/veth101.0/forwarding [HN]# echo 0 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp Tiếp theo vào VPS để cấu hình cạc mạng vừa đƣợc tạo ra: [CT 101]# vzctl enter 101 [CT 101]# ifconfig venet0:0 down [CT 101]# ifconfig venet0 down [CT 101]# ifconfig eth0 0 [CT 101]# ip addr add 10.0.98.96 dev eth0 [CT 101]# ip route add default dev eth0 Tiếp theo sửa tệp tin cấu hình của cạc Ethernet eth1 của máy chủ vật lý gốc: 61 [HN]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 Chú thích dòng BOOTPROTO=dhcp thành: #BOOTPROTO=dhcp Sau đó lƣu lại và khởi động lại dịch vụ mạng: [HN]# /etc/init.d/network restart Tiếp theo tắt forwarding và proxy_arp của cạc eth1: [HN]# ifconfig eth1 0 [HN]# echo 0 > /proc/sys/net/ipv4/conf/eth1/forwarding [HN]# echo 0 > /proc/sys/net/ipv4/conf/eth1/proxy_arp Sau đó tạo một cầu ảo và nối eth1, veth101.0, veth102.0 …, vethN.0 vào: [HN]# yum install bridge-utils [HN]# brctl addbr br0 [HN]# brctl addif br0 eth1 [HN]# brctl addif br0 veth101.0 [HN]# brctl addif br0 veth102.0 ... [HN]# ifconfig br0 0 Tiếp nữa tắt forwarding và proxy_ary cho cầu ảo br0: [HN]# echo 0 > /proc/sys/net/ipv4/conf/br0/forwarding [HN]# echo 0 > /proc/sys/net/ipv4/conf/br0/proxy_arp Lúc này có thể kiểm tra các VPS bằng cách truy cập từ Internet [INET]# ssh root@10.0.98.96 62 [CT 101]# ... Trong khi máy chủ vật lý gốc không thể đƣợc truy cập từ Internet: [INET]# ssh root@192.168.1.136 inaccessible Khi này vẫn có thể quản lý các VPS từ máy chủ vật lý gốc: [HN]# vzctl enter 101 [CT 101]# ... Ở trong các VPS có thể kết nối ra ngoài mạng một cách bình thƣờng, có thể sử dụng lệnh “ping” để kiểm tra 3.5.5. Chuyển cạc mạng tới VPS Mặc định, tất cả các VPS trên máy chủ đƣợc kết nối với các VPS khác và máy chủ thông qua cạc mạng ảo gọi là venet0. Tuy nhiên, có một khả năng cho một VPS truy cập trực tiếp thông qua cạc mạng vật lý (ví dụ, eth0). Trong ví dụ này các cạc mạng sẽ không truy cập tới máy chủ vật lý gốc của mình. Điều này đƣợc thực hiện nhờ lệnh vzctl: # vzctl set 101 --netdev_add eth0 --save Saved parameters for CT 101 Khi thiết bị mạng đƣợc thêm vào một VPS nhƣ vậy sẽ có những hạn chế sau: 1. Thiết bị mạng này chỉ đƣợc truy cập duy nhất ở nơi mà nó đã đƣợc di chuyển chứ không phải trên máy chủ vật lý gốc và tất cả các VPS khác trên máy chủ. 2. Nếu nhƣ một thiết bị đƣợc lấy ra từ VPS (bằng lệnh vzctl --netdev_del) và đƣợc gửi tới một VPS nào đó, tất cả các thiết lập của thiết bị này sẽ bị xóa hết. Để làm việc quanh vấn đề này, nên lƣu trữ tất cả các cài đặt thiết bị trong tệp tin ifcfg-dev đƣợc chứa trong thƣ mục /etc/sysconfig/network-scripts. Sau khi thiết bị này đã đƣợc thêm vào một VPS, nó sẽ thực hiện lệnh ifup dev bên trong VPS 63 để đọc các thiết lập từ tệp tin nói trên. Nhƣng điều này cũng không khôi phục lại các thiết lập nâng cao của mạng nhƣ các quy tắc lọc gói. 3. Các thiết bị vật lý bên trong một VPS không có hạn chế bảo mật điển hình cho thiết bị venet ảo. Bên trong VPS nó có thể đƣợc chỉ định bất kỳ địa chỉ IP nào cho thiết bị này và sử dụng nó, để nhận lƣu lƣợng mạng ở chế độ ngẫu nhiên. 3.5.6. Bật VPN cho VPS Mạng riêng ảo (VPN) là một công nghệ cho phép thiết lập kết nối mạng an toàn thậm chí qua một mạng lƣới công cộng không an toàn. Thiết lập VPN cho một VPS riêng biệt có thể thông qua thiết bị TUN/TAP. Để cho phép một VPS cụ thể sử dụng thiết bị này, yêu cầu các bƣớc sau: Chắc chắn rằng mô đun TUN đã sẵn sàng trƣớc khi khởi động OpenVZ: # lsmod | grep tun Trong trƣờng hợp này nó chƣa đƣợc tải, để tải nó thì làm nhƣ sau: [root@localhost ~]# modprobe tun [root@localhost ~]# lsmod |grep tun tun 23040 0 Cho phép VPS sử dụng thiết bị TUN/TAP: [root@localhost ~]# vzctl set 101 --devices c:10:200:rw --save Setting devices Saved parameters for CT 101 Tạo các thiết bị tƣơng ứng bên trong VPS và thiết lập quyền cho phép thích hợp: [root@localhost ~]# vzctl exec 101 mkdir -p /dev/net [root@localhost ~]# vzctl exec 101 mknod /dev/net/tun c 10 200 [root@localhost ~]# vzctl exec 101 chmod 600 /dev/net/tun Cấu hình VPN đƣợc thực hiện nhƣ là một nhiệm vụ quản trị phổ biến của Linux. 64 3.5.7. Tải mô đun iptables Nhân OpenVZ cung cấp hỗ trợ thêm mô đun iptables nhƣng nó không đƣợc tải tự động. Nếu muốn bất kỳ mô đun nào đƣợc nạp vào máy chủ vật lý gốc hay thêm vào đó, vào bất kỳ VPS nào, có thể thao tác bằng tay. a. Tải mô đun iptables vào máy chủ vật lý gốc Để tải mô đun iptables khi máy chủ vật lý gốc khởi động, nên cung cấp tên của chúng nhƣ là giá trị của tham số IPTABLES_MODULES trong tệp tin /etc/sysconfig/iptables-config, giá trị mặc định của tham số này nhƣ sau: IPTABLES_MODULES="ip_tables ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length" Có thể thay đổi các giá trị này để thêm các mô đun sau: ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_LOG ipt_conntrack ipt_helper ipt_state iptable_nat ip_nat_ftp ip_nat_irc ipt_TOS Tất cả các mô đun đƣợc chỉ định làm giá trị của tham số này sẽ đƣợc nạp vào máy chủ vật lý gốc sau khi khởi động lại. Tuy nhiên, nếu muốn các mô đun này đƣợc nạp mặc định theo các VPS trên máy chủ này hoặc muốn hạn chế tải mô đun này cho tất cả hoặc các VPS cụ thể, nên thực hiện một số bƣớc khác. 65 b. Tải mô đun iptables vào các VPS cụ thể Các mô đun iptables đƣợc nạp theo mặc định bên trong các máy VPS trên máy chủ đƣợc xác định bởi giá trị của các tham IPTABLES trong tệp tin /etc/sysconfig/vz. Đƣơng nhiên, những mô đun tạo nên giá trị của tham số này sẽ chỉ đƣợc tải vào các VPS trong trƣờng hợp chúng đƣợc tải trên chính máy chủ vật lý gốc. Tham số này có thể đƣợc định nghĩa lại bởi cả hai tệp tin cấu hình là VPS sample (/etc/sysconfig/vz- scripts/ve-sample_name.conf-sample) và tệp tin cấu hình của VPS cụ thể (/etc/sysconfig/vz-scripts/vps_id.conf). Để tải thêm các mô đun iptables hoặc không nạp mô đun mặc định nào đó bên trong VPS cụ thể, nên chỉ rõ nhƣng gì muốn nạp bằng cách sửa đổi tham số iptables trong các tệp tin cấu hình VPS tƣơng ứng hoặc sử dụng lệnh vzctl, ví dụ: # vzctl set 101 --iptables iptable_filter --iptables ipt_length -- iptables ipt_limit --iptables iptable_mangle --iptables ipt_REJECT -- save Lệnh này sẽ chỉ cho OpenVZ nạp các mô đun sau vào VPS 101: iptable_filter, ipt_length, ipt_limit, iptable_mangle, ipt_REJECT. Thông tin này cũng sẽ đƣợc lƣu trong tệp tin cấu hình VPS nhờ tùy chọn --save. Sau đó nên khởi động lại VPS để có hiệu lực 3.5.8. Khởi động lại VPS Khi thực hiện lệnh reboot trên giao diện điều khiển của Linux, lệnh này sẽ gọi hàm khởi động lại hệ thống với đối số “restart”, gửi vào BIOS của máy tính. Sau đó nhân Linux sẽ khởi động lại máy,vì lý do hiển nhiên này mà không VPS nào có thể truy cập trực tiếp BIOS, nếu không, một khởi động lại bên trong một VPS sẽ khởi động lại toàn bộ máy chủ vật lý gốc. Đó là lý do tại sao lệnh reboot trong VPS thực sự lại làm việc theo một cách khác nhau. Khi thực hiện lệnh reboot bên trong VPS, VPS sẽ dừng lại và bắt đầu bằng một kịch bản đặc biệt (/etc/sysconfig/vz-scripts/vpsreboot) đƣợc thực hiện theo định kỳ (mặc định là một phút) bởi một tiện ích thực hiện tự động. Cấu hình định kỳ tự động để chạy các kịch bản nằm trong tệp tin /etc/cron.d/vpsreboot. 66 Nếu muốn một VPS không thể tự khởi động lại, thêm dòng ALLOWREBOOT=“no” vào tệp tin cấu hình VPS (/etc/sysconfig/vz- scripts/vps_id.conf). Nếu muốn có VPS bị tắt khởi động lại theo mặc định thì thêm dòng ALLOWREBOOT=“no” vào tệp tin cấu hình toàn cục của OpenVZ (/etc/sysconfig/vz) và chỉ rõ ALLOWREBOOT=“yes” trong tệp tin cấu hình VPS tƣơng ứng. 3.5.9. Chuyển VPS từ máy chủ vật lý gốc này sang máy chủ vật lý khác Trong quá trình quản trị sẽ có những lúc cần phải bảo trì các máy chủ vật lý gốc vì vậy, cần phải chuyển các VPS sang một máy chủ vật lý gốc khác. OpenVZ hỗ trợ một tiện ích để làm việc này đó là tiện ích vzmigrate. Để thực hiện việc di chuyển này cần làm các bƣớc sau: a. Thiết lập các khoá SSH Trƣớc hết cần thiết lập các khoá SSH để cho phép máy chủ cũ có thể truy cập vào máy chủ mới mà không yêu cầu mật khẩu, chạy các lệnh sau trên máy cũ: [root@OpenVZ ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 74:7a:3e:7f:27:2f:42:bb:52:4c:ad:55:31:6f:79:f2 root@OpenVZ.ics.local [root@OpenVZ ~]# cd .ssh/ [root@OpenVZ .ssh]# scp id_rsa.pub root@192.168.1.112:./id_rsa.pub The authenticity of host '192.168.1.112 (192.168.1.112)' can't be established. RSA key fingerprint is 3f:2a:26:15:e4:37:e2:06:b8:4d:20:ee:3a:dc:c1:69. Are you sure you want to continue connecting (yes/no)? yes 67 Warning: Permanently added '192.168.1.112' (RSA) to the list of known hosts. root@192.168.1.112's password: id_rsa.pub 100% 231 0.2KB/s 00:00 Sau đó chạy đoạn lệnh sau trên máy mới: [root@Char ~]# mkdir /root/.ssh [root@Char ~]# cd .ssh/ [root@Char .ssh]# touch authorized_keys2 [root@Char .ssh]# chmod 600 authorized_keys2 [root@Char .ssh]# cat ../id_rsa.pub >> authorized_keys2 [root@Char .ssh]# rm –f ../id_rsa.pub Tiếp theo chạy đoạn lệnh sau trên máy cũ: [root@OpenVZ .ssh]# ssh -2 -v root@192.168.1.112 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug1: Connecting to 192.168.1.112 [192.168.1.112] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type 1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3 debug1: match: OpenSSH_4.3 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_3.9p1 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-cbc hmac-md5 none 68 debug1: kex: client->server aes128-cbc hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host '192.168.1.112' is known and matches the RSA host key. debug1: Found key in /root/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,gssapi-with- mic,password debug1: Next authentication method: gssapi-with-mic debug1: An invalid name was supplied Cannot determine realm for numeric host address debug1: An invalid name was supplied Cannot determine realm for numeric host address debug1: Next authentication method: publickey debug1: Offering public key: /root/.ssh/id_rsa debug1: Authentications that can continue: publickey,gssapi-with- mic,password debug1: Offering public key: /root/.ssh/id_rsa debug1: Server accepts key: pkalg ssh-rsa blen 149 debug1: read PEM private key done: type RSA debug1: Authentication succeeded (publickey). 69 debug1: channel 0: new [client-session] debug1: Entering interactive session. Last login: Tue Mar 23 23:30:23 2010 from 192.168.1.14 [root@Char ~]# exit Sau khi thiết lập khoá SSH, thì lúc này có thể tiến hành di chuyển các VPS sang máy chủ mới. b. Chuyển VPS sang máy chủ mới Trƣớc khi chuyển sang máy chủ mới thì có 3 VPS trên máy chủ hiện tại là 101, 102 và 103: [root@OpenVZ ~]# vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 101 3 running 192.168.1.101 - 102 3 running 192.168.1.102 - 103 3 running - - Để chuyển VPS 102 từ máy chủ hiện tại sang máy chủ mới có địa chỉ 192.168.1.102, làm nhƣ sau: [root@OpenVZ .ssh]# vzmigrate 192.168.1.112 102 OPT:192.168.1.112 Starting migration of container 101 on 192.168.1.112 Preparing remote node Initializing remote quota Syncing private Syncing 2nd level quota Turning quota off Cleanup Kiểm tra lại trên máy chủ cũ, VPS 102 đã bị di chuyển: 70 [root@OpenVZ ~]# vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 101 3 running 192.168.1.101 - 103 3 running - - Trên máy chủ mới VPS 102 đã đƣợc chuyển sang: [root@Char ~]# vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 102 3 running 192.168.1.102 - Để di chuyển toàn bộ VPS từ máy chủ cũ sang máy chủ mới, chạy đoạn mã sau: for CT in $(vzlist -H -o veid); do vzmigrate --remove-area no -- keep-dst $1 $CT; done 3.5.10. Chuyển máy chủ vật lý gốc thành một VPS Dừng các dịch vụ nhƣ máy chủ web, cơ sở dữ liệu trên máy chủ để chuẩn bị cho việc di chuyển nhằm tránh việc mất mát dữ liệu. Để dễ dàng cho việc di chuyển nên tạo một VPS cơ bản dựa trên bản phân phối giống nhƣ bản phân phối mà muốn di chuyển. Bằng cách đó có thể làm giả một mẫu và sau đó sao chép tới VPS mới và sửa đổi đổi nó. a. Tạo mới một VPS trống (lựa chọn ID của VPS là 123): mkdir /vz/root/123 /vz/private/123 cat /etc/vz/conf/ve-vps.basic.conf-sample > /etc/vz/conf/123.conf Dòng lệnh thứ 2 thực hiện sao chép file cấu hình cơ bản ve-vps.basic.conf- sample thành file 123.conf b. Thực hiện việc copy dữ liệu: Sao chép toàn bộ dữ liệu từ máy chủ vào VPS vừa tạo ra, sử dụng VPS có ID là 123, sau đó toàn bộ dữ liệu đƣợc lƣu vào thƣ mục /vz/private/123/, để thực hiện điều 71 này có nhiều cách nhƣng sẽ lựa chọn cách sử dụng lệnh rsync để chạy trên máy chủ vật lý gốc mới: rsync -arvpz --numeric-ids --exclude=/dev --exclude=/proc -- exclude=/tmp -e ssh root@192.168.1.8:/ /vz/private/123/ Lƣu ý: có thể sao chép chính máy chủ hiện tại vào VPS, khi đó sẽ sử dụng địa chỉ IP của máy chủ hiện tại. c. Thiết lập các tham số của VPS mới Thêm vào file cấu hình /etc/vz/conf/123.conf dòng OSTEMPLATE=xxx với xxx là tên của bản phân phối tƣơng tự với bản phân phối đƣợc cài trên máy chủ cũ: OSTEMPLATE="centos-4-i386-minimal" Sau đó thêm địa chỉ IP cho VPS 123: vzctl set 123 --ipadd 192.168.1.123 --save d. Các điều chỉnh khác Giữa VPS và máy chủ thực sự có một số điểm khác nhau nên cần phải điều chỉnh một số tệp tin ở trong VPS mới  /etc/inittab Một VPS không có tty thực sự, vì vậy cần phải vô hiệu hóa getty trong tệp tin /etc/inittab sed -i -e '/getty/d' /vz/private/123/etc/inittab  /etc/mtab Tạo liên kết từ /etc/mtab tới /proc/mounts để df làm việc tốt hơn rm -f /vz/private/123/etc/mtab ln -s /proc/mounts /vz/private/123/etc/mtab 72 Vấn đề ở đây là hệ thống tệp tin gốc (/) của VPS không phải gắn vào từ chính VPS đó mà gắn vào từ hệ thống máy chủ. Xóa bỏ /etc/mtab trong VPS mà không có một bản ghi để / đƣợc gắn kết, vì thế df không hiển thị đƣợc nó. Bằng cách tạo liên kết /etc/mtab tới /proc/mounts thì chắc chắn /etc/mtab cho thấy những gì thực sự đang kết nối trong VPS. Đây không phải là cách duy nhất để sửa df, có thể điều chỉnh bằng tay bằng cách thêm một dòng vào /etc/mtab để gắn / vào và chắc chắn dòng này sẽ vẫn có sau khi khởi động lại.  /etc/fstab Khi không có một phân vùng đĩa thực sự trong một VPS thì /etc/fstab (hay phần lớn của nó) không còn cần thiết. Xóa các thông tin trong đó trừ các dòng /dev/pts, /proc, /sys bằng cách: cp /vz/private/123/etc/fstab /vz/private/123/etc/fstab.old egrep '/dev/pts|/dev/shm|/proc|/sys' /vz/private/123/etc/fstab.old > /vz/private/123/etc/fstab  /dev Để vzctl enter có thể làm việc, một VPS cần một số thiết bị tty trong /dev. Chúng có thể là /dev/ttyp* và /dev/ptyp* hoặc /dev/ptmx và /dev/pts. Nếu các thiết bị này chƣa tồn tại thì làm nhƣ sau: mkdir /vz/private/123/dev/ mknod --mode 666 /vz/private/123/dev/ptmx c 5 2 mkdir /vz/private/123/dev/pts cp -a /dev/ttyp* /dev/ptyp* /vz/private/123/dev/ Nếu sau khi khởi động VPS mà vẫn không thể thực hiện lệnh vzctl enter cần thực hiện thêm lệnh sau: vzctl exec 123 /sbin/MAKEDEV pty vzctl exec 123 /sbin/MAKEDEV tty Cần tạo lại nếu đã có hoặc tạo mới /dev/null và /dev/urandom nhƣ sau: 73 rm -f /vz/private/123/dev/null mknod --mode 666 /vz/private/123/dev/null c 1 3 mknod --mode 444 /vz/private/123/dev/urandom c 1 9  /proc Kiểm tra xem thƣ mục này đã tồn tại hay chƣa bằng cách: ls -la /vz/private/123/ | grep proc Nếu chƣa tồn tại, tạo mới nó: mkdir /vz/private/123/proc  các dịch vụ trong /etc/init.d Một số dịch vụ của hệ thống cần phải vô hiệu hóa ví dụ nhƣ: acpid, amd, checkfs, checkroot, clock, cosolefont, hdparm, klogd, keymaps, kudzu, im_sensors, microcodectl, netplugd. Để tắt một dịch cụ, sử dụng lệnh: /sbin/chkconfig --del SERVICENAME e. Vô hiệu hóa các giao diện mạng cũ Nên vô hiệu hóa các giao diện mạng vật lý cũ từ trƣớc khi khởi động VPS. Sửa tệp tin /vz/private/{VPSID}/etc/sysconfig/network-scripts/ifcfg-ethx tại dòng ONBOOT=yes chuyển thành: ONBOOT=no Nếu các tệp tin /vz/private/{CTID}/etc/sysconfig/network-scripts/ifdown-venet hoặc /vz/private/{CTID}/etc/sysconfig/network-scripts/ifup-venet tồn tại, cần chắc chắn là sẽ không sử dụng chúng, 2 tệp tin này sẽ tồn tại nếu nhƣ máy chủ cũ đã từng cài OpenVZ, để không sử dụng chúng có một cách đó là đổi tên chúng: mv ifdown-venet SKIP.ifdown-venet 74 mv ifup-venet SKIP.ifup-venet f. Vô hiệu hóa udev nếu tạo thiết bị DEVNODES Nếu đang tạo các thiết bị cho VPS với một thông báo DEVNODES trong tệp tin veid.con thì sau đó các thiết bị này có thể bị ghi đè/xóa bởi edev khi VPS khởi động. Do udev không thể nhìn thấy thiết bị từ bên trong VPS nên nó có thể vô hiệu hóa thiết bị tạo ra sau. Vì vậy nếu tồn tại DEVNODES trong tệp tin veid.conf thì sau đó phải vô hiệu hóa udev. Sửa tệp tin /vz/private/{VPSID}/etc/rc.sysinit và thêm chú thích vào mục edev nhƣ sau: #[ -x /sbin/start_udev ] && /sbin/start_udev Một chú ý quan trọng là trong quá trình sửa các tệp tin này phải bật quota trong tệp tin cấu hình toàn cục OpenVZ (/etc/sysconfig/vz) nếu không mọi sửa đổi sẽ không có tác dụng: DISK_QUOTA=no g. Khởi động VPS mới Sau khi hoàn thành các công việc trên thử khởi động VPS mới và thử lệnh vzctl enter: [root@localhost ~]# vzctl start 123 Starting container ... Container is mounted Adding IP address(es): 192.168.1.123 Setting CPU units: 1000 Configure meminfo: 65536 File resolv.conf was modified Container start in progress... [root@localhost ~]# vzctl enter 123 entered into CT 123 75 [root@localhost /]# 3.5.11. Sao lƣu một VPS đang hoạt động với tiện ích vzdump Vzdump là một tiện ích cho phép tạo những tệp tin sao lƣu của các VPS OpenVZ đang hoạt động. Về cơ bản nó tạo ra một ảnh chụp lƣu trữ các vùng riêng của VPS, bao gồm cả tệp tin cấu hình. Vzdump lƣu trữ bản sao lƣu vào một tệp tin duy nhất ở trên đĩa ở dạng tar. a. Cài đặt vzdump  Tải các gói cần thiết Tải tệp tin cài đặt vzdump: [root@localhost ~]# wget 2.noarch.rpm Trong quá trình cài đặt sẽ yêu cầu các gói MTA và cstream nên tải luôn gói cstream để thuận tiện cài đặt: [root@localhost ~]# wget ftp://fr.rpmfind.net/linux/dag/redhat/el4/en/i386/dag/RPMS/cstream -2.7.4-3.el4.rf.i386.rpm  Cài đặt Tiến hành cài đặt lần lƣợt theo các bƣớc sau: [root@localhost ~]# yum install MTA [root@localhost ~]# rpm -ivh cstream-2.7.4-3.el4.rf.i386.rpm [root@localhost ~]# rpm -ivh vzdump-1.1-2.noarch.rpm Sau khi cài đặt có thể tiến hành sao lƣu ngay 76 b. Tiến hành sao lưu Đơn giản chỉ cần kết xuất một VPS, không cần ảnh chụp, chỉ cần lƣu trữ khu vực tƣ nhân và tệp tin cấu hình vào một thƣ mục kết xuất (mặc định là /vz/dump) nhƣng với cách này thời gian chết hay thời gian dừng VPS để sao lƣu dài: [root@localhost ~]# vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 102 3 running 192.168.1.102 - [root@localhost ~]# vzdump 102 INFO: Starting new backup job - vzdump 102 INFO: Starting Backup of VM 102 (openvz) INFO: status = CTID 102 exist mounted running WARN: online backup without stop/suspend/snapshot WARN: this can lead to inconsistent data INFO: creating archive '/vz/dump/vzdump-102.dat' (/vz/private/102) INFO: Total bytes written: 95221760 (91MiB, 5.4MiB/s) INFO: file size 90MB INFO: Finished Backup of VM 102 (00:00:17) Để giảm thiểu thời gian chết thì thêm vào tham số --suspend, khi sử dụng tham số này vzdump sử dụng rsync và cơ chế trì hoãn/hồi phục để tạo một ảnh chụp: [root@localhost ~]# vzdump --suspend 102 INFO: Starting new backup job - vzdump --suspend 102 INFO: Starting Backup of VM 102 (openvz) INFO: status = CTID 102 exist mounted running INFO: starting first sync /vz/private/102 to /var/tmp/vzdumptmp10597 INFO: Number of files: 8311 INFO: Number of files transferred: 5572 INFO: Total file size: 95874634 bytes INFO: Total transferred file size: 89474929 bytes 77 INFO: Literal data: 89474929 bytes INFO: Matched data: 0 bytes INFO: File list size: 154849 INFO: File list generation time: 0.073 seconds INFO: File list transfer time: 0.000 seconds INFO: Total bytes sent: 89963891 INFO: Total bytes received: 192113 INFO: sent 89963891 bytes received 192113 bytes 7212480.32 bytes/sec INFO: total size is 95874634 speedup is 1.06 INFO: first sync finished (12 seconds) INFO: suspend vps INFO: Setting up checkpoint... INFO: suspend... INFO: get context... INFO: Checkpointing completed succesfully INFO: final sync /vz/private/102 to /var/tmp/vzdumptmp10597 INFO: Number of files: 8311 INFO: Number of files transferred: 0 INFO: Total file size: 95874634 bytes INFO: Total transferred file size: 0 bytes INFO: Literal data: 0 bytes INFO: Matched data: 0 bytes INFO: File list size: 154849 INFO: File list generation time: 0.075 seconds INFO: File list transfer time: 0.000 seconds INFO: Total bytes sent: 154865 INFO: Total bytes received: 20 INFO: sent 154865 bytes received 20 bytes 103256.67 bytes/sec INFO: total size is 95874634 speedup is 619.01 78 INFO: final sync finished (1 seconds) INFO: resume vps INFO: Resuming... INFO: vps is online again after 1 seconds INFO: creating archive '/vz/dump/vzdump-102.dat' (/var/tmp/vzdumptmp10597/102) INFO: Total bytes written: 95221760 (91MiB, 11MiB/s) INFO: file size 90MB INFO: Finished Backup of VM 102 (00:00:23) Khi sử dụng cơ chế LVM2 để tạo ảnh chụp thì không có thời gian chết nhƣng việc này yêu cầu không gian trống trên đĩa lớn hơn 512MB: [root@localhost ~]# vzdump --snapshot 102 c. Khôi phục VPS tới một VPS có ID khác Ta có thể tạo ra một VPS giống hệt một VPS cũ nhƣng với một ID khác: [root@localhost ~]# vzdump --restore /vz/dump/vzdump-102.tar 112 INFO: restore openvz image '/vz/dump/vzdump-102.tar' using ID 112 INFO: extracting archive '/vz/dump/vzdump-102.tar' INFO: extracting configuration to '/etc/vz/conf/112.conf' INFO: restore successful Trƣớc khi chạy VPS mới nên đổi địa chỉ IP của VPS mới để tránh xung đột: [root@localhost ~]# vzctl set 112 --ipdel 192.168.1.102 --save Saved parameters for CT 112 [root@localhost ~]# vzctl set 112 --ipadd 192.168.1.112 --save Saved parameters for CT 112 [root@localhost ~]# vzctl start 112 Starting container ... Initializing quota ... 79 Container is mounted Adding IP address(es): 192.168.1.112 Setting CPU units: 1000 Configure meminfo: 65536 File resolv.conf was modified Container start in progress.. [root@localhost ~]# vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 102 3 running 192.168.1.102 - 112 3 running 192.168.1.112 - Vậy đã hoàn thành việc sao lƣu một VPS và khôi phục tới một VPS khác giống VPS ban đầu. 80 CHƢƠNG 4. SO SÁNH OPENVZ VÀ MỘT SỐ MÁY ẢO KHÁC TRÊN LINUX Có rất nhiều phần mềm ảo hóa đƣợc sử dụng trên Linux bao gồm cả loại miễn phí và trả phí. Miễn phí có thể kể đến nhƣ Xen, OpenVZ, Virtual Box, Linux-Vserver, KVM và trả phí ví dụ nhƣ Parallels Virtuozzo, VMWare, z/VM…Nhƣng trong phạm vi của bài nghiên cứu này khóa luận chỉ so sánh 3 phần mềm thƣờng gặp đó là Xen, Virtual Box và VMWare với OpenVZ. 4.1. Về mặt sử dụng công nghệ Bảng 9. Các công nghệ mà các phần mềm ảo hóa sử dụng Các công nghệ ảo hóa Ảo hóa đầy đủ (full virt) Ảo hóa song song (paravirt) Ảo hóa mức hệ điều hành (OS virt) Các phần mềm ảo hóa OpenVZ  Xen   Virtual Box  VMWare  4.2. Về mặt hiệu năng Bảng 10. Đánh giá hiệu năng của các phần mềm ảo hóa OpenVZ Trung bình Xen Rất nhanh với ảo hóa song song và chậm hơn khi sử dụng công nghệ ảo hóa đầy đủ Virtual Box Nhanh tƣơng đƣơng nhƣ Xen VMWare Nhanh nhƣng chậm hơn Xen và Virtual Box 4.3. Về khả năng mở rộng Hiệu quả của các giải pháp ảo hóa liên quan tới số lƣợng các máy ảo có khả năng thực hiện đồng thời hay còn gọi là khả năng mở rộng. Để so sánh khả năng này, thực hiện phép thử nghiệp đối với các phần mềm này bằng việc tăng số lƣợng các VPS theo mức 1, 81 2, 4, 8, …32 VPS. Các phần mềm này đƣợc cài trên các máy chủ có cấu hình nhƣ nhau và đơn vị dùng để đo là lƣu lƣợng thông tin mà phần mềm có thể xử lý hay tính bằng số giao dịch trong một giây. Ta có đƣợc 2 biểu đồ nhƣ hình 7 và hình 8 bên dƣới: Hình 7. Biểu đồ thể hiện lưu lượng trung bình trên một máy ảo Nguồn: virtualization-technology 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 0 50 100 150 200 250 300 350 Số lượng máy ảo(n) L ư u l ư ợ n g ( s ố g ia o t á c /s ) Lưu lượng trung bình trên một máy ảo Xen OpenVZ VirtualBox 82 Hình 8. Biểu đồ thể hiện tổng lưu lượng các máy ảo Nguồn: virtualization-technology Biểu đồ thứ nhất cho thấy khi số lƣợng các VPS tăng dần từ 1 tới 6 thì số giao tác trung bình trên một VPS giảm dần và trong đó Xen có lƣu lƣợng trung bình cao nhất, tiếp đến là OpenVZ, sau cùng là Virtual Box. Trong biểu đồ thứ hai cho thấy tổng lƣu lƣợng của các máy ảo khi số máy ảo tăng từ 1 tới 32 thì chỉ có Xen và OpenVZ là hoạt động ổn định nhƣng Xen vẫn giữ ở mức cao hơn so với OpenVZ là VirtualBox. Qua một số bƣớc thử nghiệm cho thấy Xen vƣợt trội hơn so với các máy ảo còn lại, OpenVZ và VirtualBox có khả năng mở rộng ở mức độ trung bình trong đó OpenVZ hoạt động ổn định hơn kể cả khi tăng số VPS. 4.4. Kết luận Nếu nói về hiệu suất của các máy ảo thì OpenVZ kém hơn Xen nhƣng không hề kém hơn VirtualBox và VMWare. Với số lƣợng VPS trung bình thì OpenVZ hoạt động với độ ổn định cao hơn. Ngoài ra OpenVZ sử dụng công nghệ ảo hóa hệ điều hành, công nghệ này khá quen thuộc và dễ quản lý nên sẽ thuận tiện cho việc triển khai ảo hóa. Theo nhƣ các nhà phát triển thì OpenVZ nên đƣợc sử dụng cho các ứng dụng mạng vì sự tối ƣu hóa đƣợc thực hiện ở tầng mạng. 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 0 100 200 300 400 500 600 Số lượng máy ảo L ư u l ư ợ n g ( S ố g ia o t á c / s Tổng lưu lượng của các máy ảo Xen OpenVZ VirtualBox 83 KẾT LUẬN Công nghệ thông tin ngày càng phát triển mạnh mẽ và những công nghệ mới liên tục đƣợc đƣa vào áp dụng để thay thế những công nghệ cũ, lỗi thời và kém hiệu quả. Nhƣng việc áp dụng các công nghệ mới sẽ đòi hỏi chi phí đầu tƣ rất cao vì vậy ảo hóa đã đƣợc sử dụng nhƣ là một công nghệ mới để giải quyết vấn đề trên. Một trong những phần mềm thƣờng đƣợc lựa chọn đó là OpenVZ. Thông qua việc tìm hiểu về máy ảo mã nguồn mở OpenVZ khóa luận đã nêu đƣợc nội dung tổng quan về ảo hóa, và tiến hành tìm hiểu một cách cụ thể về phần mềm OpenVZ, bao gồm các đặc điểm của phần mềm, cách cài đặt và quản trị hệ thống máy ảo sử dụng phần mềm OpenVZ. Ngoài ra khóa luận cũng đã tìm hiểu đƣợc một số tài liệu so sánh về các phần mềm ảo hóa bao gồm cả miễn phí và trả phí thƣờng đƣợc sử dụng trên Linux để đƣa ra nhƣng kết luận chung về hiệu quả hoạt động của các phần mềm này. Khóa luận cũng chỉ ra rằng ảo hóa là một công nghệ rất hữu ích cần đƣợc sử dụng một cách phổ biến không chỉ vì nó là xu hƣớng công nghệ mà vì những lợi ích mà nó mang lại cho ngƣời sử dụng đặc biệt là các doanh nghiệp. 84 PHỤ LỤC Bảng giới thiệu các thuật ngữ đƣợc sử dụng trong luận văn Tên thuật ngữ Ý nghĩa HN (Hardware Node) Máy chủ vật lý hệ thống VMWare Tên một hãng phần mềm ảo hóa VirtualBox Tên một phần mềm ảo hóa do Sun phát triển Parallels Virtuozzo Tên một phần mềm ảo hóa Xen Tên một phần mềm ảo hóa KVM Tên một phần mềm ảo hóa VPS (Virtual Private Server) Máy chủ riêng ảo đƣợc cài đặt và quản lý bởi phần mềm máy ảo OS template Mẫu hệ điều hành chứa thông tin về các gói và thông tin cài đặt của một bản phân phối nào đó đƣợc sử dụng khi tạo mới một máy chủ riêng ảo venet Thiết bị mạng ảo, thiết bị này giống nhƣ một kết nối điểm tới điểm (point-to-point) giữa VPS và máy chủ vật lý gốc veth Thiết bị Ethernet ảo (veth) nó giống nhƣ một thiết bị Ethernet đƣợc gắn vào VPS, nhƣng nó khác với venet ở chỗ nó có địa chỉ MAC hypervisor Là một lớp phần mềm mỏng giữa phần cứng và hệ điều hành để cho phép chạy nhiều hệ điều hành mà không phải chỉnh sửa trên một máy chủ tại cùng thời điểm. 85 TÀI LIỆU THAM KHẢO Tài liệu tiếng Anh [1] Từ điển OpenVZ Website: [2] Bảng so sánh các công nghệ ảo hóa trên Linux: Website: [3] Tài liệu so sánh một số công nghệ ảo hóa mã nguồn mở: Website: virtualization-technology

Các file đính kèm theo tài liệu này:

  • pdfLUẬN VĂN-NGHIÊN CỨU HỆ THỐNG MÁY ẢO MÃ NGUỒN MỞ OPENVZ.pdf
Luận văn liên quan