
Minecraft należy dziś do najpopularniejszych gier sieciowych. W niecałe trzy lata (pierwsza oficjalna wersja zadebiutowała jesienią 2011 roku) zdobyła miliony fanów na całym świecie.
Twórcy gry świadomie czerpią inspiracje z najlepszych wzorców sprzed dwudziestu lat, kiedy wiele gier było w dzisiejszych standardach prymitywnych pod względem grafiki oraz nieidealnych w kwestii użyteczności, ale mimo to - naprawdę wciągających.
Jak w każdej grze typu sandbox, Minecraft oferuje użytkownikowi ogromne możliwości twórcze - w tym tkwi główny sekret jego popularności.
Organizacją serwerów do gry w trybie wieloosobowym zajmują się sami gracze i ich społeczności. Obecnie w Internecie działa dziesiątki tysięcy serwerów gier (np. pełną listę można znaleźć tutaj).
Nie brakuje fanów tej gry także wśród naszych klientów, którzy wynajmują w naszych centrach danych sprzęt pod projekty gamingowe. W tym artykule opowiemy o technicznych aspektach, na które warto zwrócić uwagę przy wyborze serwera dla
Minecraft.
Wybieramy platformę
W skład gry Minecraft wchodzą następujące elementy architektoniczne:
- serwer - program, za pomocą którego gracze wchodzą ze sobą w interakcje przez sieć;
- klient - program do łączenia z serwerem, instalowany na komputerze gracza;
- wtyczki - dodatki do serwera, które dodają nowe funkcje lub rozszerzają stare;
- mody - rozszerzenia do świata gry (nowe bloki, przedmioty, możliwości).
Dla Minecraft istnieje wiele platform serwerowych. Najbardziej rozpowszechnione i popularne to Vanilla i Bukkit.
Vanilla to oficjalna platforma od twórców gry. Jest dostępna zarówno w wersji graficznej, jak i konsolowej. Nowa wersja Vanilla zawsze wydawana jest równocześnie z nową wersją Minecraft.
Wadą Vanilla jest nadmierne zużycie pamięci (około 50 MB na jednego gracza). Inną istotną wadą jest brak wtyczek.
Bukkit został stworzony przez grupę entuzjastów, którzy podjęli próbę ulepszenia oficjalnego serwera Minecraft. Próba ta okazała się całkiem udana: pod względem funkcjonalności Bukkit jest znacznie szerszy niż Vanilla – przede wszystkim dzięki wsparciu różnorodnych modów i wtyczek. Ponadto zużywa mniej pamięci na każdego gracza – około 5-10 MB.
Minusy Bukkita polegają na tym, że przy uruchomieniu zabiera on zbyt dużo pamięci RAM. Co więcej, im dłużej serwer działa, tym więcej pamięci jest mu potrzebne (nawet jeśli graczy jest mało). Wybierając serwer Bukkit, należy pamiętać, że nowe wersje zazwyczaj zawierają błędy; stabilna wersja zwykle pojawia się około 2-3 tygodnie po wydaniu oficjalnej wersji Minecraft.
Ponadto, ostatnio zyskują popularność również inne platformy (takie jak Spout, MCPC i MCPC+), ale różnią się one ograniczoną kompatybilnością z Vanilla i Bukkit oraz niezwykle ograniczonym wsparciem dla modów (na przykład dla Spout można w ogóle pisać jedynie mody od podstaw). Jeśli już mają być używane – to tylko do eksperymentów.
Do organizacji serwera gry zalecamy korzystanie z platformy Bukkit, ponieważ wyróżnia się ona największą elastycznością; ponadto istnieje wiele różnorodnych modów i wtyczek. Stabilne działanie serwera Minecraft w dużej mierze zależy od mądrego wyboru platformy sprzętowej. Przyjrzyjmy się temu zagadnieniu bardziej szczegółowo.
Wymagania sprzętowe
Zarówno serwer, jak i klient Minecraft są bardzo wymagające jeśli chodzi o zasoby systemowe.
Przy wyborze platformy sprzętowej należy pamiętać, że wielordzeniowy procesor może nie dać dużych korzyści: rdzeń serwera Minecraft może korzystać tylko z jednego wątku obliczeniowego. Drugie rdzenie jednak będą przydatne: niektóre wtyczki są uruchamiane w oddzielnych wątkach, a Java również wykorzystuje sporo zasobów…
Dlatego dla Minecraft-serwera lepiej wybierać procesor o wyższej wydajności jednego rdzenia. Bardziej wydajny procesor dwurdzeniowy będzie bardziej preferowany niż wielordzeniowy, ale mniej wydajny. Na wyspecjalizowanych forach zaleca się korzystanie z procesorów o częstotliwości taktowania nie niższej niż 3 GHz.
Aby serwer Minecraft działał prawidłowo, potrzebna jest znaczna ilość pamięci RAM. Bukkit zajmuje około 1 GB pamięci RAM; ponadto na każdego gracza, jak już zostało wcześniej wspomniane, przypada 5 do 10 MB. Wtyczki i mody również zużywają sporo pamięci. Dla serwera obsługującego 30-50 graczy potrzebne będzie co najmniej 4 GB pamięci RAM.
W Minecraft bardzo wiele rzeczy (na przykład ładowanie tych samych wtyczek) zależy od prędkości działania systemu plików. Dlatego preferowane jest wybieranie serwera z dyskiem SSD. Dyski talerzowe raczej się nie nadają ze względu na niską prędkość losowego odczytu.
Ogromne znaczenie ma również prędkość połączenia internetowego. Dla gry 40-50 osób wystarczy łącze 10 Mb/s. Jednak dla tych, którzy planują bardziej rozbudowany projekt Minecraft, który obejmuje stronę, forum i dynamiczną mapę, zdecydowanie zaleca się większą przepustowość.
Jaką konkretną konfigurację najlepiej wybrać? Z oferowanych przez nas konfiguracji zalecamy zwrócić uwagę na następujące:
- Intel Core 2 Duo E8400 3 GHz, 6 GB RAM, 2×500 GB SATA, 3000 rub/mies.;
- Intel Core 2 Quad Q8300 2.5 GHz, 6 GB RAM, 2×500 GB SATA, 3500 rub/mies. — tę konfigurację wykorzystujemy do naszego testowego serwera MineCraft, na którym możesz grać już teraz (jak to zrobić, piszemy poniżej);
- Intel Core i3-2120 3.3 GHz, 8 GB RAM, 2×500 GB SATA, 3500 rub/mies.
Te konfiguracje są całkiem odpowiednie do stworzenia serwera Minecraft dla 30-40 graczy. Ich wadą jest brak dysków SSD, ale oferujemy inny istotny atut: gwarantowane łącze 100 Mb/s bez jakichkolwiek ograniczeń i proporcji. Przy zamówieniu wszystkich wymienionych powyżej konfiguracji opłata instalacyjna nie jest pobierana.
Mamy również bardziej wydajne, ale przy tym oczywiście droższe serwery (przy zamówieniu tych konfiguracji opłata instalacyjna również nie jest pobierana):
- 2× Intel Xeon 5130, 2 GHz, 8 GB RAM, 4×160 GB SATA, 5000 rub/mies;
- 2× Intel Xeon 5504, 2 GHz, 12 GB RAM, 3×1 TB SATA, 9000 rub/mies.
Zalecamy również zwrócenie uwagi na nowy budżetowy model z dyskiem SSD oparty na procesorze Intel Atom C2758: Intel Atom C2758 2.4 GHz, 16 GB RAM, 2×240 GB SSD, 4000 rub/mies., opłata instalacyjna — 3000 rub.
Instalacja i uruchomienie serwera Bukkit w systemie Ubuntu
Zanim zainstalujemy serwer, stwórzmy nowego użytkownika i dodajmy go do grupy sudo:
$ sudo useradd -m -s /bin/bash $ sudo adduser sudo
Następnie ustawimy hasło, pod którym nowo utworzony użytkownik będzie się łączył z serwerem:
$ sudo passwd
Zalogujemy się ponownie na serwer jako nowy użytkownik i przystąpimy do instalacji.
Minecraft jest napisany w Javie, więc na serwerze koniecznie należy zainstalować Java Runtime Environment.
Zaktualizujemy listę dostępnych pakietów:
$ sudo apt-get update
Następnie wykonamy następujące polecenie:
$ sudo apt-get install default-jdk
Aby zainstalować i uruchomić Bukkit, warto również zainstalować multiplexer terminalowy, np. screen (można użyć również innych multiplexerów terminalowych — zobacz nasz przegląd):
$ sudo apt-get install screen
Screen będzie potrzebny, jeśli będziemy łączyć się z serwerem gry przez ssh. Dzięki niemu można uruchomić serwer Minecraft w osobnym oknie terminala, a nawet po zamknięciu klienta ssh serwer będzie działał.
Stwórzmy katalog, w którym będą przechowywane pliki serwera:
$ mkdir bukkit $ cd bukkit
Następnie przejdźmy na stronę pobierania oficjalnej strony Bukkit. W prawym górnym rogu strony można zobaczyć link do ostatniej zalecanej wersji serwera (recommended build). Zalecamy pobranie właśnie jej:
$ wget
Teraz uruchomimy screen:
$ sudo screen
i wykonamy następujące polecenie:
$ java -Xmx1024M -jar craftbukkit.jar -o false
Wyjaśnimy, co oznaczają używane parametry:
- Xmx1024M — maksymalna ilość pamięci RAM na serwerze;
- jar craftbukkit.jar — klucz do serwera;
- o false — zezwala na dostęp do serwera z pirackich klientów.
Serwer zostanie uruchomiony.
Aby zatrzymać serwer, należy wpisać w konsoli polecenie stop.
Konfiguracja i ustawienie serwera
Ustawienia serwera są przechowywane w pliku konfiguracyjnym server.properties. Zawiera on następujące parametry:
- generator-settings — ustawia schemat generacji superpłaskiego świata;
- allow-nether — określa możliwość przejścia do Netheru. Domyślnie dla tego parametru ustawiono wartość true. Jeśli ustawi się wartość false, wszyscy gracze z Netheru zostaną przeniesieni do normalnego świata;
- level-name — nazwa folderu z plikami mapy, która będzie używana w trakcie gry. Folder znajduje się w tej samej katalogu, co pliki serwera. Jeśli taki katalog nie istnieje, serwer automatycznie tworzy nowy świat i umieszcza go w katalogu o tej samej nazwie;
- enable-query — przy ustawionej wartości true aktywuje protokół GameSpy4 do nasłuchiwania serwera;
- allow-flight — pozwala na latanie po świecie Minecraft. Domyślnie ma wartość false (latanie jest zabronione);
- server-port — wskazuje port, który będzie używany przez serwer gry. Standardowy port dla Minecraft to 25565. Zmiana tej wartości nie jest zalecana;
- level-type — określa typ świata (DEFAULT/FLAT/LARGEBIOMES);
- enable-rcon — otwiera zdalny dostęp do konsoli serwera. Domyślnie jest wyłączony (false);
- level-seed — dane wejściowe dla generatora poziomów. Aby móc tworzyć losowe światy, to pole musi pozostać puste;
- force-gamemode — ustawia standardowy tryb gry dla graczy podłączających się do serwera;
- server-ip — wskazuje adres IP, który będzie używany przez graczy do łączenia się z serwerem;
- max-build-height — określa maksymalną wysokość budowli na serwerze. Jego wartość powinna być liczbą podzielną przez 16 (64, 96, 256 itp.);
- spawn-npcs — zezwala (jeśli ustawiona wartość true) lub zabrania (jeśli ustawiona wartość false) pojawiania się NPC w wioskach;
- white-list — włącza i wyłącza użycie białej listy graczy na serwerze. Jeśli ustawiona wartość to true, administrator będzie mógł tworzyć białą listę, dodając do niej nicki graczy ręcznie. Jeśli jednak ustawiona wartość to false, na serwer może wejść każdy użytkownik, który zna jego adres IP i port;
- spawn-animals — zezwala na automatyczne pojawianie się przyjaznych mobów, jeśli ustawiona wartość to true;
- snooper-enabled — pozwala serwerowi na wysyłanie statystyk i danych do deweloperów;
- hardcore — włącza tryb Hardcore na serwerze;
- texture-pac — plik tekstur, który będzie używany podczas łączenia się gracza z serwerem. Jako wartość tego parametru podaje się nazwę archiwum zip z teksturami, które znajduje się w tej samej lokalizacji co serwer;
- tryb online — włącza weryfikację premium kont użytkowników łączących się z serwerem. Jeśli ten parametr jest ustawiony na true, tylko właściciele kont premium mogą uzyskać dostęp do serwera. Gdy weryfikacja kont jest wyłączona (ustawiono false), do serwera mogą dołączać wszyscy użytkownicy (w tym, na przykład, gracze z fałszywymi nickami), co stwarza dodatkowe ryzyko bezpieczeństwa. Przy wyłączonej weryfikacji możliwe jest granie w Minecraft w trybie lokalnej sieci, bez dostępu do Internetu;
- pvp — zezwala lub zabrania graczom na walkę ze sobą. Jeśli parametr ten ma wartość true, gracze mogą się wzajemnie eliminować. Jeśli wartość to false, gracze nie mogą sobie wzajemnie zadawać bezpośrednich obrażeń;
- difficulty — ustawia poziom trudności gry. Może przyjmować wartości od 0 (najłatwiejszy) do 3 (najtrudniejszy);
- gamemode — określa, jaki tryb gry będzie ustawiony dla graczy wchodzących na serwer. Może przyjmować następujące wartości: 0 — Survival, 1 — Creative, 2 — Adventure;
- player-idle-timeout — czas bezczynności (w minutach), po upływie którego gracze automatycznie rozłączają się z serwerem;
- max-players — maksymalna dozwolona liczba graczy na serwerze (od 0 do 999);
- spawn-monsters — zezwala (jeśli ustawiono true) na spawnowanie agresywnych mobów;
- generate-structures — włącza (true) / wyłącza (false) generację struktur (skarbców, fortec, wiosek);
- view-distance — reguluje promień aktualizowanych chunków do wysłania do gracza; może przyjmować wartości od 3 do 15.
Logi serwera Minecraft są zapisywane w pliku server.log. Jest on przechowywany w tej samej folderze, co pliki serwera. Log nieustannie rośnie, zajmując coraz więcej miejsca na dysku. Pracę mechanizmu logowania można uporządkować za pomocą tzw. rotacji logów. Do rotacji używa się specjalnego narzędzia — logrotate. Ogranicza ono liczbę wpisów w logu do określonego maksimum.
Można skonfigurować rotację logów w taki sposób, że wszystkie wpisy będą usuwane, gdy plik loga osiągnie określony rozmiar. Można również ustawić termin, po upływie którego wszystkie stare wpisy zostaną uznane za nieaktualne i usunięte.
Podstawowe ustawienia rotacji znajdują się w pliku /etc/logrotate.conf; ponadto dla każdej aplikacji można tworzyć indywidualne ustawienia. Pliki z indywidualnymi ustawieniami są przechowywane w katalogu /etc/logrotate.d.
Utwórzmy plik tekstowy /etc/logrotate.d/craftbukkit i wpiszmy w niego następujące parametry:
/home/craftbukkit/server.log {
rotate 2
weekly
compress
missingok
notifempty
}
Przyjrzyjmy się ich wartościom bliżej:
- Parametr rotate wskazuje liczbę rotacji przed usunięciem pliku;
- weekly wskazuje, że rotacja będzie odbywać się co tydzień (można ustawić inne parametry: monthly — co miesiąc i daily — codziennie);
- compress wskazuje, że archiwalne logi powinny być kompresowane (odwrotna opcja to nocompress);
- missingok wskazuje, że w przypadku braku pliku logu należy kontynuować pracę i nie wyświetlać komunikatów o błędzie;
- notifempty wskazuje, aby nie przesuwać pliku logu, jeśli jest pusty.
Szczegółowe informacje o ustawieniach rotacji logów można znaleźć tutaj.
Porady dotyczące optymalizacji
Od razu zaznaczamy, że w tej sekcji przedstawimy porady dotyczące tylko optymalizacji serwera gier. Problemy z drobno ustawionym i optymalizacją serwera, na którym zainstalowano Minecraft, są osobnym tematem, który wykracza poza ramy tego artykułu; zainteresowani czytelnicy z łatwością znajdą potrzebne informacje w Internecie.
Jednym z najczęstszych problemów, które występują podczas gry w Minecraft, są tak zwane lagi — sytuacje, w których program nie reaguje na czas na wejście użytkownika. Mogą one być spowodowane problemami zarówno po stronie klienta, jak i serwera. Poniżej przedstawimy zalecenia, które pomogą zmniejszyć prawdopodobieństwo wystąpienia problemów po stronie serwera.
Regularnie monitoruj zużycie pamięci przez serwer i wtyczki
Zużycie pamięci można śledzić za pomocą specjalistycznych wtyczek administracyjnych — na przykład, LagMeter.
Śledź aktualizacje wtyczek
Zazwyczaj twórcy nowych wtyczek z każdą nową wersją starają się zmniejszyć obciążenie.
Staraj się nie używać wielu wtyczek o podobnej funkcjonalności
Duże wtyczki (takie jak Essentials, AdminCMD, CommandBook) często zawierają funkcjonalność wielu małych wtyczek. Na przykład ta sama wtyczka Essentials zawiera funkcje wtyczek iConomy, uHome, OpenInv, VanishNoPacket, Kit. Małe wtyczki, których funkcjonalność jest całkowicie pokryta przez jedną dużą, w większości przypadków można usunąć, aby nie obciążać serwera.
Ogranicz mapę i ładuj ją samodzielnie.
Jeśli nie ograniczysz mapy, obciążenie serwera znacznie wzrośnie. Możesz ograniczyć mapę przy pomocy wtyczki. WorldBorder. W tym celu należy uruchomić tę wtyczkę i wykonać polecenie /wb 200, a następnie wyrenderować mapę poleceniem /wb fill.
Wyrenderowanie zajmie oczywiście sporo czasu, ale lepiej to zrobić raz, zamykając serwer na prace techniczne. Jeśli mapę będzie wyrenderowywać każdy gracz – serwer będzie działać wolno.
Zastąp ciężkie wtyczki szybszymi i mniej zasobożernymi.
Nie wszystkie wtyczki do Minecrafta można uznać za udane: często zawierają wiele niepotrzebnych i nieprzydatnych funkcji, a czasami jeszcze zużywają dużo pamięci. Niekorzystne wtyczki najlepiej zastępować alternatywami (jest ich dość dużo). Na przykład wtyczkę LWC można zastąpić Wgfix+MachineGuard, a wtyczkę DynMap – Minecraft Overviewer.
Zawsze czyść drop lub zainstaluj wtyczkę do automatycznego usuwania dropów.
Dropami w grach nazywane są przedmioty, które wypadają przy śmierci moba lub zniszczeniu niektórych bloków. Przechowywanie i przetwarzanie dropów zajmuje bardzo dużo zasobów systemowych.
Aby serwer działał szybciej, dropy najlepiej usuwać. Najlepiej robić to przy pomocy specjalnych wtyczek – na przykład NoLagg lub McClean.
Nie używaj cheatów.
Na serwerach gier często instaluje się tzw. antycheaty – programy, które blokują próby manipulacji grą w nieuczciwy sposób.
Istnieją antycheaty również dla Minecrafta. Każdy antycheat to zawsze dodatkowe obciążenie dla serwera. Lepiej instalować zabezpieczenia dla launchera (które jednak nie dają absolutnej gwarancji bezpieczeństwa i łatwo mogą zostać złamane – to jednak temat na osobną rozmowę) oraz dla klienta.
Zamiast zakończenia
Jakiekolwiek instrukcje i zalecenia są znacznie bardziej skuteczne, jeśli są poparte konkretnymi przykładami. W oparciu o powyższe instrukcje dotyczące instalacji stworzyliśmy nasz serwer MineCraft i umieściliśmy na mapie coś interesującego.
Oto, co nam się udało:
- Serwer Bukkit — stabilna, rekomendowana wersja 1.6.4;
- Wtyczka Statistics — aby zbierać statystyki o graczach;
- Wtyczka WorldBorder — aby wykreślić i ograniczyć mapę;
- Wtyczka WorldGuard (+WorldEdit jako zależność) — aby chronić niektóre obszary.
Zapraszamy wszystkich chętnych do gry na nim: aby się połączyć, dodaj nowy serwer i podaj adres mncrft.slc.tl.
Będziemy wdzięczni, jeśli w komentarzach podzielisz się swoimi doświadczeniami w instalacji, konfiguracji i optymalizacji serwerów MineCraft oraz opowiesz, jakie mody i wtyczki są dla ciebie interesujące i dlaczego.
Świetna wiadomość: Od 1 sierpnia opłata instalacyjna za dedykowane serwery o stałej konfiguracji została obniżona o 50%. Teraz jednorazowa opłata instalacyjna wynosi tylko 3000 rubli.
Czytelników, którzy nie mogą zostawiać komentarzy tutaj, zapraszamy do nas w blog.
Źródło: habr.com
