Ostatnio pisałem o konfiguracji Dom0 – dzisiaj napiszę o uruchamianiu DomU.
Po co mi to?
Wiele razy miałem do czynienia z serwerami na których działało kilka/kilkanaście usług równocześnie, np. Apache (kilka stronek, webmail, phpmyadmin, itp), Postfix/Exim (poczta i żeby było fajnie to na kontach systemowych), Samba (jakieś zasoby dla pracowników), MySQL (baza dla stronek), PostgreSQL (bo jedna stronka potrzebowała), itd…. Przy takiej konfiguracji pomijane są kwestie separacji usług zewnętrznych/wewnętrznych – no ale firma/instytucja mała nie ma sensu kasy na 3 kolejne serwery wydawać skoro działa….
Taka konfiguracja nie jest zbyt bezpieczna i ma wiele wad:
- ciężko backupować tak duży system w postaci obrazów, a odzyskiwanie z backupów całości będzie trwać wieki,
- słaba separacja usług ułatwia ataki na zasoby wewnętrzne (np. dziura w stronie może pozwolić na dostęp do plików z Samby),
- trudno rozgraniczyć zasoby sprzętowe (procesor, pamięć) konkretnym usługom,
- trudno jest migrować usługi na inne serwery.
Wirtualizacja pozwala na zminimalizowanie tych problemów:
- backupować można pojedyncze usługi (działające na różnych maszynach wirtualnych) np. z pomocą snapshotów z minimalnym czasem przerwy w działaniu,
- oddzielenie usług w osobnych maszynach wirtualnych pozwala „zamknąć” napastnika w przypadku kompromitacji którejś z usług (choć zdarzały się błędy w implementacji maszyn wirtualnych pozwalające „wyskoczyć” z wirtualki),
- możemy przydzielać pamięć i konkretne rdzenie procesora danym maszynom wirtualnym,
- live migration pozwala w locie przenieść maszynę wirtualną na inny serwer.
Xen jest szczególnie dobrym wyborem jeżeli zamierzamy wirtualizować systemy Linux’owe. Można je uruchamiać w trybie para-wirtualizacji, która w mniejszym stopniu niż pełna wirtualizacja obciąża CPU.
W trybie pełnej wirtualizacji można zainstalować praktycznie dowolny system (również Windows) choć jest to tryb mniej wydajny.
Bardzo udany przepis – gdzieś musiałem go udokumentować by nie zginął
Jakiś czas temu korzystałem z preload’a który sam uczył się jakie aplikacje odpalam i te programy ładował już podczas startu – przeważnie nieco spowalnia to start systemu ale gdy już się załaduje to programy, które uruchamiam jako pierwsze startują „z kopa”. Od jakiegoś czasu popularniejszy jest instalowany domyślnie w Ubuntu ureadahead – pełni on podobną funkcję jak preload.
Aby umożliwić odwiedzającym nasze strony cachowanie obrazków (tak by nie musieli pobierać ich każdorazowo bo przecież nie zmieniają się aż tak często) konieczne jest ustawienie nagłówków: Cache-Control, Expires dla odpowiednich typów plików. W Apachem jest do tego dedykowany moduł – mod_expires. W Debianie dostarczany jest on bez domyślnej globalnej konfiguracji – a ja lubię gdy cacheuje mi się większość statyki. Zawsze można dostosować czas cachowania pod siebie względem określonego typu pliku, np. dla Java Scriptów ustawić na 1 dzień gdy często się zmieniają. Można też w samej aplikacji zmieniać ścieżkę do pliku by wymusić odświeżenie (lub podawać ścieżkę z jakimś losowym identyfikatorem wycinanym przez mod_rewrite).