Wprowadzenie
W ostatnim czasie bardzo modna stała się wirtualizacja. Polega ona z grubsza na tym, że na fizycznym komputerze uruchomione jest oprogramowanie pozwalające działać wielu wirtualnym komputerom, zwanym zwykle wirtualnymi maszynami. Modele działania są zwykle dwa (klasyfikacja za Robertem P. Golbergiem).
Głównymi graczami na rynku wirtualizacji są VMware, Parallels oraz Microsoft. W artykule przyjrzymy się rozwiązaniu o nazwie Xen, które wspiera para-wirtualizację systemów Linux.
Architektura Xen
Xen składa się z dwóch głównym elementów:
Przy starcie systemu, wirtualizator musi być uruchomiony przed włączeniem jakiekolwiek maszyny wirtualnej, które to maszyny nazywamy domenami (domains). Z jedna z domen jest wyróżniona (domain0) i to na niej jest uruchomiony xend, za pomocą którego możemy zarządzami wszystkimi maszynami. Domain0 zwany jest także uprzywilejowanym domain.
Instalacja Xen
Instalacja polega na instalacji pakietów: xen, xen-tools, kernel-xen i ewentualnie xen-doc-*. Niezbędna jest także odpowiednia modyfikacja pliku /boot/grub/menu.lst, ponieważ system trzeba niejako uruchomić w trybie Xen, jednak po instalacji systemu odpowiedni wpis jest zwykle dodany. Dodatkowo warto wyłączyć domyślnego firewalla, ponieważ złożona konfiguracja sieci w przypadku wirtualizacji może być dla niego kłopotliwa (a my będziemy mieć zablokowany dostęp do sieci):
# chkconfig SuSEfirewall2_init off # chkconfig SuSEfirewall2_setup off
W przypadku, gdyby firewall nie chciał się wyłączyć (miałem taką sytuację), wtedy możemy ręcznie ustawić domyślne polityki na ACCEPT (u mnie rozwiązało to problem):
# iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P FORWARD ACCEPT
Zarządzanie maszynami wirtualnymi
Najprościej zarządzać maszynami przez moduł YaSTj-a Virtual Machine Management (Xen). Po jego uruchomieniu pojawia nam się lista z aktualnie dostępnymi maszynami oraz szeregiem akcji do wykonania (np. dodanie nowej maszyny czy wyłączenie wybranej). Ponieważ moduł YaST jest bardzo intuicyjny, dalej krótko umówimy zarządzanie za pomocą poleceń linii komend.
Najpierw przyjrzymy sie krótko plików konfiguracyjnym. W katalogu /etc/xen/examples są przykładowe pliki konfiguracyjne. Z tych istotniejszych:
Jeśli skorzystamy z modułu YaST to utworzy on automatycznie odpowiednie pliki i zapisze je w /etc/xen/vm/. Korzystając z powyższych plików przykładowych możemy także utworzyć konfigurację samodzielnie.
Podstawowym narzędziem do zarządzania maszynami wirtualnymi jest xm. Składnia:
xm polecenie [opcje] [argumenty] [zmienne]
Najpierw kilka poleceń jak uzyskać pomoc:
# xm help # xm help --long # xm help komenda
Najpierw sprawdzimy listę maszyn:
# xm list
W wyniku dostajemy m.in. domain id, które jest potrzebne do szeregu operacji na maszynie (np. do zapisania stanu czy zatrzymania maszyny) oraz stan (możemy ustalić, że maszyna jest np. w stanie pauzy). Szybko przegląd stanów: r — uruchomiona, b — zablokowana, p — spauzowana, s — w trakcie wyłączania, c — zepsuta (crashed).
Jeśli chcemy uruchomić maszynę:
# xm create -c -f /etc/xen/vm/fileserverMożemy wykonywać zwykłe czynności konserwacyjne:
# xm pause domain_id # xm unpause domain_id # xm shutdown domain_id # xm destroy domain_id # xm save domain_id filename # xm restore filenameBardzo przydatne jest także podłączenie konsoli do wybranej maszyny:
# xm console domain_idoraz ustawienie pamięci RAM dla wybranej maszyny:
# xm mem_set domain_id rozmiar_pamieci
przy czym rozmiar pamięci podajemy w MB.
Warto też dodać, że zamiast domain_id można w powyższych poleceniach dać także nazwę domain.
Automatyczne uruchamianie maszyn
Pierwsza uwaga jest taka, że żadna maszyna nie może działać, jeśli domain0 nie działa. Natomiast w katalogu /etc/xen/auto możamy podlinkować pliki konfiguracyjna maszyn, które mają się uruchamiać automatycznie. I to wystarczy. Więcej opcji mamy w pliku /etc/sysconfig/xendomains.
Konfiguracja sieci w środowisku Xen
Ponieważ artykuł ma być tylko wprowadzeniem w świat Xen, nie będziemy się tutaj wdawać niuanse i różnorodność możliwych konfiguracji — omówimy konfigurację opartą o tzw. bridging (bridging najprościej mówiąc to mechanizm, który łączy wiele interfejsów sieciowych w jeden interfejs). Najpierw zauważmy, że w momencie uruchomienia wirtualizji Xen, w systemie pojawia się szereg różnych interfejsów sieciowych, które można pogrupować następując:
Zależności pomiędzy poszczególnymi interfejsami są na poniższym obrazku
(za wiki.xensource.com/xenwiki/XenNetworking):
Uwaga: na powyższym obrazku drugi interfejs w domain1 nazywa się eth1, w SLES byłoby to veth1.
Do zarządania mostem mamy polecenie brctl. Najprostszym użyciem jest wyświetlenie aktualnej konfiguracji mostu:
# brctl show
Krótko podsumowując: przy domyślnej instalacji najprostsza konfiguracja dostępu do sieci w danej domain polega na: