Czy potrzebujemy partycji wymiany na serwerze LAMP?

14

Czy faktycznie potrzebujemy wymiany partycji na serwerze ubuntu z LAMP? Myślę, że nie potrzebuję tego, ale lepiej wiedzieć na pewno, czy nie spowoduje to nieprzewidzianych zachowań.
Właściwie moje myśli to:

  • Serwer nigdy nie hibernuje
  • W przypadku zamiany należy pomyśleć o równoważeniu obciążenia / kształtowaniu ruchu itp.

Czy mam rację, czy mogę wyłączyć wymianę serwera produkcyjnego?

Dzięki!

Arman
źródło

Odpowiedzi:

14

Czy mam rację, czy mogę wyłączyć wymianę serwera produkcyjnego?

Nie. Zawsze miej miejsce na wymianę.

Próbowałem uruchomić serwer produkcyjny bez zamiany raz i około tydzień później, po aktualizacji Wordpress PHP zaczął jeść znacznie więcej pamięci RAM, niż przewidywaliśmy. Kiedy kończy Ci się pamięć RAM i masz włączoną funkcję wymiany, rzeczy zwalniają (czasem bardzo, czasem tylko trochę, w zależności od tego, co się tam wpycha), ale możesz się zalogować, znaleźć problem i spróbować naprawić to.

Kiedy kończy Ci się pamięć RAM i nie masz wymiany, procesy giną, rzeczy się zatrzymują i przez większość czasu jedyną opcją jest restart. Ale dopóki nie zrestartujesz komputera, prawdopodobnie coś się zepsuje.

W moim świecie złamanie jest znacznie gorsze niż powolne.

Oczywiście, jeśli okaże się, że twój system ciągle używa dużych porcji wymiany (bardzo często użyje niektórych jako sposobu na wyrzucenie starych pamięci podręcznych), oczywiście masz problem („proszę włóż pamięć RAM”), ale masz to jako zdecydowanie zaleca się stosowanie siatki bezpieczeństwa.


W odpowiedzi na komentarz SpamapS:

W świecie „udanych stron internetowych” dostępne są przełączenia awaryjne, równoważenie obciążenia i inne narzędzia, które pozwalają maszynie eksplodować i mają zerowy wpływ na resztę witryny. Ale to wymaga dużo gotówki. Nadmiarowy sprzęt nie jest ekonomiczny dla większości witryn, nawet jeśli przyciągają pieniądze.

Całkowicie nie zgadzam się z twoim komentarzem dotyczącym czasu pracy. W tradycyjnej konfiguracji e-commerce, jeśli ludzie nie widzą Twojej witryny, nie mogą kupić od Ciebie. To nie jest tylko e-handel, wszystkie interesy handlowe online stają się o wiele większe, jeśli nie masz czasu. Wiem, ponieważ prowadzę witryny i usługi dla firm oraz prowadzę własne witryny. Powolny = zrzędliwy, ale w dół = furia. Nawet jeśli zejdziesz tylko na minutę na raz, jeśli użytkownik zobaczy powiadomienie o „przestoju w konserwacji” więcej niż kilka razy, zakłada, że ​​nie możesz utrzymać witryny.

Wolny serwer jest mniej niż idealny, ale nie można go ciągle uruchamiać. Jest to ostateczność, aby pozwolić, aby rzeczy działały podczas ich naprawy.

Zakładasz również, że na komputerze działa tylko jedna usługa. Znowu może to być prawdą, jeśli masz megabucks, aby wszystko rozdzielić, ale w prawdziwym świecie rzeczy się zbijają. Wiele witryn, demonów ssh, serwerów ftp, serwerów e-mail itp. Jeden proces przechodzący w zamianę może nawet nie mieć wpływu na inną usługę. Bez wymiany wszystko ma równe szanse na natychmiastowe, losowe zakończenie. Nie masz nad tym kontroli.

Oczywiście zamiana nie jest jedyną odpowiedzią. Potrzebujesz monitorowania, aby ostrzec Cię, gdy nie masz pamięci RAM, ale po prostu wyciągnięcie wtyczki i ponowne uruchomienie nie jest odpowiedzią dla większości ludzi. Jestem pewien, że działa to na dowolną międzynarodową stronę internetową, za którą jesteś odpowiedzialny, ale dla nas zwykłych śmiertelników (stanowiących większość Internetu), ponieważ jest to komercyjne samobójstwo.

Oli
źródło
Te same doświadczenia tutaj, trochę ... to był błąd po mojej stronie, a nie przemyślana decyzja. Serwer bez zamiany jest piekłem do naprawy, szczególnie jeśli zdecyduje się zabić sshd.
Javier Rivera
Mam około 16 GB pamięci RAM, połowa z nich jest zapisywana w pamięci podręcznej do szybkiego we / wy, reszta dotyczy LAMP, wymiana jest zawsze bezpłatna lub kilka razy jest tam kilka megabajtów, ale myślę, że zawsze jest wyłączona ...
Arman
3
W świecie udanych witryn brak odpowiedzi jest gorszy niż zepsuty. Użytkownicy naprawdę docenią SZYBKĄ awarię (która, twój kod JavaScript powinien radzić sobie z gracją btw), ale będą cię NIENAWIDZI za powolność. Porzuć swap, to tylko opóźnia nieuniknione. -1
SpamapS,
1
@Oli: Uruchomienie N + 1 nie wymaga już megabucks, a nawet dużo dolców. W rzeczywistości prawie nie wymaga specjalnych umiejętności. Jest nieuniknione, że serwer ulegnie awarii z dowolnej liczby powodów, i nie jest to trudne, aby nie było problemu. Jeśli masz samodzielny serwer LAMP, który robi wszystko, co kosztuje więcej; Konfigurowanie jeszcze dwóch i modułu równoważenia obciążenia (na EC2 z migawkami t1.micros i EBS, może to być BARDZO tanie), czy Twoja strona jest wyjątkowo powolna w swoim największym dniu? Sprawdzić dane z google ... Myślę, że jego wyraźne bit.ly/hB1AD1
SpamapS
1
Świetna odpowiedź, obejmująca rzeczywiste przypadki serwerów. Dodawanie nadmiarowego sprzętu, LB, monitorowanie, pamięci podręczne RAM itp. Są niezwykle ważne, a będziesz miał czas na ich skonfigurowanie i debugowanie, jeśli nie będziesz bezczynnie, ponieważ taniej na przestrzeni wymiany.
ImaginaryRobots,
4

Muszę się nie zgadzać z wymianą serwerów produkcyjnych.

Z mojego doświadczenia wynika, że ​​zamiana dysków obrotowych sprawia, że ​​Twój system jest mniej przewidywalny i bardziej podatny na frustrujące awarie całego systemu. Popularny serwer o wysokim obciążeniu, który robi wszystko z lokalnym wolnym dyskiem, szybko zmieni się w coś znacznie gorszego niż stan awarii. Czasy reakcji wzrosną do 100 razy ich normalny poziom, a proste rzeczy, takie jak logowanie za pomocą konsoli lub ssh, mogą zająć kilka minut.

Zamiana SSD jest szczególnym przypadkiem i przynajmniej spowolniłaby czas wyszukiwania, który zwykle zabija system. Jednak zapisy są nadal powolne, więc nadal będziesz musiał długo i długo czekać na wyleczenie z procesu wymykania się spod kontroli.

Bez wymiany serwer LAMP po prostu zabije procesy w celu zwolnienia pamięci RAM. Właściwe monitorowanie powinno ostrzec o tym i usunąć serwery z produkcji, jeśli krytyczne procesy zostaną zabite. Najgorszym przypadkiem jest to, że wszystkie metody logowania zostały zabite i trzeba wykonać twardy reset / cykl zasilania. Ten najgorszy przypadek jest nadal tak samo prawdopodobny w przypadku maszyny sterującej, która wymyka się spod kontroli, ale jest znacznie trudniejszy do wykrycia.

Jeśli używasz PHP, włącz limity pamięci i monitoruj dzienniki pod kątem ich awarii. Oto sztuczka, ustaw niższy limit na serwerze deweloperskim niż w produkcji. Jeśli używasz mod_php pod Apache, ustaw MaxRequestsPerChild na kilka tysięcy, aby httpd umarł, zanim z czasem stanie się zbyt duży. Przede wszystkim monitoruj zużycie pamięci! Często pamięć przesuwa się w czasie i po prostu trzeba okresowo uruchamiać nieszczelną usługę podczas debugowania problemu.

Spamapy
źródło
1
Dziękujemy za podzielenie się swoimi doświadczeniami. Rozważyłem podobne problemy, gdy ssh brał Inf. Właśnie zmusiłem procesy do ograniczonej pamięci, co pozwoliło mi uruchomić ssh i naprawić błędne skrypty.
Arman,
Jedna z najciekawszych dyskusji na temat przestrzeni wymiany w produkcji, którą widziałem w Internecie. (cały wątek, zalety i wady)
dpb 18.12.13
3

Przestrzeń wymiany jest używana, gdy system zdecyduje, że potrzebuje pamięci fizycznej do aktywnych procesów i nie ma wystarczającej ilości nieużywanej pamięci fizycznej. Jeśli system potrzebuje więcej zasobów pamięci lub miejsca, nieaktywne strony w pamięci fizycznej są następnie przenoszone do przestrzeni wymiany, zwalniając w ten sposób tę pamięć fizyczną do innych zastosowań.

Taka sytuacja zdarzy się wiele razy na serwerze.

za). Niezoptymalizowany skrypt może zużywać dużo pamięci
b). Skrypty takie jak tworzenie kopii zapasowych zawsze zajmują ogromną pamięć
c). duży ruch

Dlatego dobrą praktyką jest posiadanie przestrzeni wymiany.

Więcej informacji: https://help.ubuntu.com/community/SwapFaq

aneeshep
źródło
Dzięki za wyjaśnienie. Jeśli ktoś ma wadliwy skrypt, to w każdym razie spowoduje to awarię serwera, limity systemowe powinny kontrolować twoje skrypty, prawda?
Arman
aneehep, jeśli zamieniasz się podczas dużego ruchu, Twój system będzie 100 razy wolniejszy niż powinien. To ogólnie nie do przyjęcia.
SpamapS,
2

Korzystanie z zamiany zapewni dodatkowe zabezpieczenie przed niestabilnością serwera. Może się zdarzyć, że skończy się pamięć RAM, a na serwerze bez zamiany może to doprowadzić do miękkiej awarii.

Prawdopodobnie jestem teraz w mniejszości, kiedy mówię, że nadal ma sens, jak zwykli to zalecać, mieć dwa razy więcej wymiany niż w głównej pamięci. Nawet w systemie z 96 GB pamięci RAM.

Nie kosztuje dużo, a jeśli będziesz go potrzebować, będziesz zadowolony, że go dostałeś. Przyczyną włączenia swap jest po prostu bardzo prosta analiza kosztów i korzyści. Zrób to! :-)

Stefano Palazzo
źródło
0

Chciałbym podziękować Oli za piękną - znam starą - odpowiedź. Uważam, że partycjonowanie to zawsze zielony temat! Całkowicie zgadzam się z linią postu Oli i chciałbym udostępnić ten - oczywiście możliwy do ulepszenia - skrypt, którego używam do monitorowania wykorzystania wymiany serwerów.

Zawsze konfiguruję serwery i usługi tak, aby działały bez żadnych zamian. Kiedy tak się stanie, upewnij się, że coś idzie nie tak, albo w najlepszym razie coś nie wychodzi z twoich początkowych planów.

Skryptuję ten skrypt co pół godziny w środowisku produkcyjnym. Wyśle mi powiadomienie, jeśli Zamiana użycia! = 0k. Będę w stanie szybko zbadać / podjąć działania w tej sprawie, przez większość czasu, zanim coś naprawdę pójdzie nie tak .

Oczekuje, że będziesz mieć: bash, top, echo, awk i działające polecenie poczty, bez wykonywania żadnych kontroli.

Mam nadzieję, że to pomaga.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="[email protected]"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
Marco
źródło