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.
97 trang |
Chia sẻ: lylyngoc | Lượt xem: 3188 | Lượt tải: 1
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:
- LUẬN VĂN-NGHIÊN CỨU HỆ THỐNG MÁY ẢO MÃ NGUỒN MỞ OPENVZ.pdf