Cấu hình
,------------------+ | | | | | CentOS Linux | | | | | +------+----+------' | | | | | | ,------+----+------+ | Cisco | | Switch | +------------------'
CẤU HÌNH:
- Máy cái (host computer) chạy Centos 5, cấu hình từ đầu (fresh install), trong đó cài các máy ảo (guest computers).
- Máy cái (host computer) chạy vlan + bonding nối với switch Cisco qua đường trunk + port_channel.
- Tạo các bridge trong máy cái ứng với các VLAN
- Kết nối máy ảo (guest computers) với các bridge đã tạo ra
- Màn hình điều khiển (console) của máy ảo được truy cập qua đường VNC.
- Thí nghiệm cụ thể: máy chủ IBM x3650, CentOS 5.1 x86_64, Cisco Switch Catalyst 2960
ĐẶC ĐIỂM:
- Máy cái cài tối thiểu, không cài đồ hoạ, chỉ có VNC
- Máy cái dùng CPU Intel-VT, cho phép chạy full-virtualization
Cài CentOS Linux
Cài CentOS Linux với cấu hình hoàn toàn tối thiểu với các phần sau:
- Virtualization
- Text editor
- VNC (nếu cần truy cập màn hình đồ hoạ console của máy ảo qua VNC)
Không cấu hình tự động tường lửa (firewall) vì cái này cần đặt cấu hình về sau, nếu cần. Cấu hình tường lửa tự động khó phù hợp.
Cách tạo bridge của Xen, thích hợp cho trường hợp mạng chưa có bond + vlan
Xen có hai dịch vụ (sevice, daemon) thể hiên trong CentOS là xend và xendomains. Khi chạy sẽ tạo ra một số bridge, NAT, v.v nội tại bên trong máy cái.
Cấu hình chính: /etc/xen/xend-config.sxp. Trong đó có định ra: (network-script network-bridge). Đó là gọi đến file network-bridge trong thư mục /etc/xen/scripts. Lệnh etc/xen/scripts/network-bridge start khởi tạo mạng (giả lập bridge) phù hợp theo nhu cầu, còn lệnh /etc/xen/scripts/network-bridge stop thì nó sẽ bỏ bridge xenbr0 đi,… khôi phục lại trạng thái từ trước của hệ thống.
Nếu giả sử, máy cái có thêm vỉ mạng eth1, và ta muốn rằng sẽ có thêm một bridge nữa mang tên xenbr1 với tác dụng tương tự xenbr0 thì có thể chỉnh như sau.
- Trong /etc/xen/xend-config.sxp sửa dòng (network-script network-bridge) thành (network-script my-network-bridge).
- Tạo ra file mới /etc/xen/scripts/my-network-bridge: với nội dung như sau:
#!/bin/sh XEN_SCRIP_DIR=$(dirname $0) $XEN_SCRIP_DIR/network-bridge "$@" netdev=eth0 bridge=xenbr0 vifnum=0 $XEN_SCRIP_DIR/network-bridge "$@" netdev=eth1 bridge=xenbr1 vifnum=1
Tất nhiên, cần đảm bảo rằng /etc/xen/scripts/my-network-bridge là chương trình loại “chạy được” (executable), ví dụ dùng lệnh: chmod +x /etc/xen/scripts/my-network-bridge. Như vậy ta có được tình huống như sau.
,------------------------+ ,-------------------------+ | Máy ảo 1 (dùng nat) | | Máy ảo 2 (dùng bridge) | +-----------+------------' +------------+------------' | eth0 | eth0 | | | | ,-----------+------------+ | | Bridge : virbr0 | | +-----------+------------' | | | | | | virbr0 | ,-----------+------------+ | | Máy cái | | +-----------+------------' | | eth0 (cổng ảo) | | | | | vif2.0 ,-----------+-------------------------------+------------+ | Bridge : xenbr0 | +-----------------------------+--------------------------' | peth0 (cổng vật lý) | v mạng lưới bên ngoài
Ngoài script mặc định (default) là network-bridge ra, xen còn có một số script khác có thể dùng cho các trường hợp khác: network-nat, network-route.
Xử lý bond + vlan trên Linux và port-channel + trunk trên Cisco switch
Trước hết làm bond + vlan và port-channel + trunk trước. Nhưng trước khi làm như vậy, ta bỏ hoàn toàn cách tạo bridge của xen. Khi có bond + vlan vào thì script của xen chạy không ổn. Vậy ta bỏ nó bằng cách:
- Trong /etc/xen/xend-config.sxp sửa dòng (network-script network-bridge) thành (network-script my-network-bridge).
- Tạo ra file mới /etc/xen/scripts/my-network-bridge: với nội dung như sau:
#!/bin/sh # this empty script does nothing
Chuẩn VLAN là dùng 802.1q, và chuẩn port-channel là 802.3ad
CISCO SWITCH:
Giả sử nhóm gộp 2 cổng g0/1 và g0/2 vào thành một channel mã hiệu 2. Cấu hình như sau
interface GigabitEthernet0/1 channel-group 2 mode active interface GigabitEthernet0/2 channel-group 2 mode active interface port-channel2 switchport mode trunk
Lệnh channel-group 2 mode active là để chọn 802.3ad cho đường port-channel. Hầu hết cả Switch hiện nay đều có chuẩn đường vlan trunk chạy 802.1q ở chế độ mặc định (default), nên cũng không cần lệnh gì thêm cho đường trunk.
CENTOS LINUX:
Linux CentOS đặt cấu hình các cổng trong thư mục /etc/sysconfig/network-scriptsetc/rc.local, ví dụ:
ifconfig mybr2 192.168.0.1 netmask 255.255.255.0 up ifconfig mybr8 up route del default; route add default gw 192.168.0.254
Như vậy, ta đã chuẩn bị xong phần network, kiểu như sau:
,-----------------+ ,---------------+ ,---------------+ | Máy ảo 1 | | Máy ảo 2 | | Máy ảo 3 | | (dùng nat) | | (dùng bridge) | | (dùng bridge) | +-------+---------' +-------+-------' +-------+-------' | eth0 | eth0 | eth0 | | | | | | ,-------+---------+ | | | Bridge : virbr0 | | | +-------+---------' | | | | | | | | | virbr0 | | ,-------+---------+ | | | Máy cái | | | +----+-------+----' | | eth1 | | eth0 | | (ảo) | | (cổng ảo) | | | | | vif2.0 | | ,----+----------------+----------+ | | | Bridge : xenbr0 | | | +-------------+------------------' | | | peth0 (cổng vật lý) | | | | | v | | mạng lưới bên ngoài | | | | | vif3.0 ,----+--------------------------------------------+------+ | Bridge : xenbr1 | +----------------------------+---------------------------' | peth1 (cổng vật lý) | v mạng lưới bên ngoài
Tạo máy ảo và chạy máy ảo đó
Nhìn chung, ở cấu hình tối thiểu khi cài CentOS với Xen, thì OS đã tự động dùng image có tích hơp Xen rồi. Kiểm tra:
# uname -r 2.6.18-53.1.14.el5xen
Và có một số chương trình tiện ích
- xm: hiển thị các lệnh hay dùng của xm
- xm list: hiển thị các máy ảo đang chạy
- xm create WindowsXP: chạy máy ảo mang tên WindowsXP
- xm destroy WindowsXP: rút cáp nguồn của máy ảo mang tên WindowsXP (cold shutdown)
- xm shutdown WindowsXP: shutdown máy ảo mang tên WindowsXP (soft shutdown)
- xm reboot WindowsSP: khởi động lại máy ảo mang tên WindowsSP (soft reboot)
- virt-install: script đi kèm CentOS dùng để tạo ra file cấu hình máy ảo
- virt-manager: chương trình đồ hoạ (GTK) đi kèm CentOS để quản lý Xen
Như vậy, để tạo máy ảo, ta có thể dùng virt-install, màn hình text, để tạo máy ảo.
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. yes What is the name of your virtual machine? WindowsXP How much RAM should be allocated (in megabytes)? 600 What would you like to use as the disk (path)? /VM/WindowsXP.img How large would you like the disk (/VM/WindowsXP.img) to be (in gigabytes)? 4 Would you like to enable graphics support? (yes or no) yes What is the virtual CD image, CD device or install location? /ISO/WindowsXP-SP2.iso
- fully virtualized: dùng chức năng full-virtualization, cần phải có CPU hỗ trợ chức năng này
- graphics support: tức là truy cập vào màn hình console của máy ảo được chuyển hướng (redirect) qua đường VNC của máy cái
Chức năng full virtualization đòi hỏi phải có CPU có tính năng này. Kiểm tra bằng lệnh cat /proc/cpuinfo | grep vmx (đối với Intel) hoặc cat /proc/cpuinfo | grep svm (đối với AMD). Nếu có chữ vmx hoặc svm trong danh sách các flag hiện ra bởi cat /proc/cpuinfo thì là được. Một số máy tính đòi hỏi phải vào BIOS setup để enable chức năng này của CPU.
Chương trình virt-install vậy là sẽ tạo file WindowsXP trong thư mục /etc/xen; ngoài ra file /VM/WindowsXP.img cũng được tạo ra để mô phỏng ổ đĩa C, còn có file /ISO/WindowsXP-SP2.iso là đĩa XP2 (hoặc distro khác) dùng để mô phỏng ổ D.
Ngoài cách tạo máy ảo bằng virt-install, thì cũng có thể chạy virt-manager (cần giao diện GUI, gtk) để đạt mục đích ấy.
Một cách khác là ta tự soạn file /etc/xen/WindowsXP. Thông thường, thì ta nhờ virt-install để tạo file này, sau đó soạn lại các thông số bằng cách edit trực tiêp /etc/xen/WindowsXP. Ví dụ như sau:
name = "WindowXP" uuid = "fb60ddac-f640-8834-b8ca-7e68142e665e" maxmem = 600 memory = 600 vcpus = 2 builder = "hvm" kernel = "/usr/lib/xen/boot/hvmloader" boot = "d" pae = 1 acpi = 1 apic = 1 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" device_model = "/usr/lib64/xen/bin/qemu-dm" sdl = 0 vnc = 1 vncunused = 1 dhcp = "off" disk = [ "file:/VM/WindowsXP.img,hda,w", "file:/ISO/WindowsXP-SP2.iso,hdc:cdrom,r" ] vif = [ "mac=00:16:3e:39:26:5e,bridge=mybr8,type=ioemu" ] serial = "pty" localtime = 1 usb = 1 usbdevice = "tablet" vncpasswd = "xen"
- name = "WindowXP": tên của domU máy ảo là “WindowsXP”
- uuid = "fb60ddac-f640-8834-b8ca-7e68142e665e": UUID của máy ảo, có thể dùng chương trình uuidgen để sinh ra cón số này
- maxmem = 600, memory = 600: kích thước RAM (MB) cho máy ảo
- vcpus = 2: số CPU cho máy ảo
- builder = "hvm", kernel = "/usr/lib/xen/boot/hvmloader": HVM tức là trường hợp full-virtualizaion
- boot = "d": khởi động từ ổ đĩa D: (trường hợp này là đĩa ảo CDROM). Khi máy ảo đã chạy, có thể bỏ CDROM và khởi động từ ổ C. Dùng virt-manager để “plug in|out” ổ đĩa khi máy ảo đang chạy.
- disk = [ "file:/VM/WindowsXP.img,hda,w", "file:/ISO/WindowsXP-SP2.iso,hdc:cdrom,r" ]: đĩa hda (đĩa primary IDE kênh 0, tức là ổ C:) là đĩa ảo, chạy trên file /VM/WindowsXP.img. Đĩa hdc (primary IDE 1, tức là ỏ D:) là đĩa ảo từ file ISO của CDROM. Sử dụng file /VM/WindowsXP.img để mô phỏng ổ đĩa thì tiện, nhưng chịu tổn thất khá lớn về tốc độ. Ngoài ra Linux (máy cái) có giới hạn số các thiết bị loopback, do vậy nếu có nhiều máy ảo cùng chạy thì phải tăng số này lên, hoặc không dùng file để mô phỏng ổ đĩa nữa. Nói chung, trong môi trường cần chạy tốt, thì máy cái nên dùng LVM, rồi tạo riêng LV (logical volume) trên mấy cái, và khai báo là máy ảo sẽ dùng volume đó. Khi đó khai báo sẽ kiểu như: disk = [ "phy:/dev/mapper/vg-windowsxp,hda,w" ]. Nếu máy ảo dùng ext3 (hoặc filesystem có khả năng co dãn online như ext3) thì dùng phối hợp giữa LVM ở máy cái và ext3 ở máy ảo rất tiện dụng.
- vif = [ "mac=00:16:3e:39:26:5e,bridge=mybr8,type=ioemu" ]: vỉ mạng nối vào bridge mybr8. Lưu ý địa chỉ MAC cần nămg trong dải mà Xen được đăng ký với IEEE (OUI, Organization Unit ID).
- vnc = 1, vncunused = 1: nội dung console của máy ảo được chuyển qua VNC chạy trên máy cái. Vậy để xem nội dung thì cần VNC vào máy cái. vncunused = 1 nghĩa là cổng (port TCP) của VNC này là lấy từ 5900, 5901, 5902… đến chừng cổng nào còn rỗi. Như vậy nếu đây là máy ảo đầu tiên thì có thể chính là cổng 192.168.0.1:5900.
- localtime = 1: thông thường, Windows hiểu rằng giờ (time) của phần cứng là giờ địa phương (ITC), còn Linux, Unix hiểu rằng giờ phần cứng là giờ quốc tế GMT (UTC). Đó là theo mặc định (default). Để giả lập (virtualization) thì ta nên đặt localtime = 1 nếu máy ảo (guest) là Windows, đặt localtime = 0 với Linux.
- usb = 1, usbdevice = "tablet": khai báo thiết bị tablet cho máy ảo. Khi dùng VNC để vào cónole, thi nhiều khi chuột của máy bàn (desktop, client) và máy ảo (guest) không đồng bộ. Chọn thêm cái tablet, thì nó sẽ đồng bộ vị trí.
Có thể yêu cầu Xen tự động chạy một số máy ảo domU khi máy cái bật lên. Những cấu hình nào nằm trong thư mục /etc/xen/auto là được xếp vào loại này. Ví dụ, nếu muốn Xen tự động chạy máy ảo WindowsXP khi Xen khởi động, ta có thể làm như sau:
# cd /etc/xen/auto # ln -s ../WindowsXP .
Ban đầu (default) máy cái chạy VNC server nhưng chỉ “nghe” (listen) ở giao diện lo (127.0.0.1). Để cho phép VNC clients ở máy khác có thể truy cập vào được, thì chỉnh lại (vnc-listen '127.0.0.1') (default, mặc đinh) thành (vnc-listen '0.0.0.0'), trong file cấu hính /etc/xen/xend-config.sxp.
Không có nhận xét nào:
Đăng nhận xét