Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
Mam 3 wirtualne serwery na XEN Server do tych wirtualnych maszyn jest podpięty dysk po NFS z fizycznej maszyny. Na tym dysku jest wspólny folder www dla dwóch serwerów Nginx.
Serwer zajmuje się dystrybucją reklam na serwery rp, gazeta onet pb więc ruch jest bardzo duży. ok godziny 12 jest największy ok 60M tak pokazuje cacti. I zaczyna kuleć NFS.
Nie mogę dojść co się dzieje dostajemy komunikaty że błąd odczytu klasy php z tego dysku permision deny. Po restarcie NFS na chwilkę pomaga potem znowu namnoży się zapytań i jest to samo.
Programiści twierdzą że klasa jest dobrze napisana , a NFS zatyka się. Na maszynie fizycznej w logach nic nie mam, żadnych błędów.
Mam do was pytanie jak uruchomić logi na nfs by pokazywał co się dzieje ?
Dysk mam udostępniony tak
/DATA 10.0.1.0/24(rw,sync,no_subtree_check,anonuid=0,anongid=0)
na masyznach jest podłączony w fstab tak
10.0.1.201:/DATA /DATA nfs rw,intr,nfsvers=4 0 0
Macie może pomysł ? Dysk dodatkowo jest podłączony do XenServer i w nocy zrzuca wirtualne maszyny na ten zasób.
Dzięki
redelek
Offline
Dyzio się prawdopodobnie nie wyrabia.
Jeśli serwujecie parę milionów reklam na sekundę, to lepiej będzie zainwestować w pamięć RAM, i walić reklamy z ram-dysków, albo przez tydzień reklamować AddBlocka. :D
Jeden dyzio po NFS do dwóch maszyn VM z Nginxami, to raczej sadyzm technologiczny.
I przy okazji, jeśli serwujecie reklamy, to nie wiem, po ch*, du* i kamieni kupa na maszynie fizycznej dwie WM na Xenie, kiedy takie maszyny zawsze solidnie katują dysk, bo każdy system musi osobno określoną ilość bibiliotek wczytać a logów zapisać.
Nie wiem, ile mają te foldery z reklamami, ale jeśli mieszczą się w 30 GB, to szoruj do sklepu po RAM, wrzuć śmietnik na ramdysk, i niech Nginxy biorą śmietnik z ramdysku, wtedy każde obciążenie wytrzymają,
bo RAMdyzio jest XX razy szybszy, niż najlepsza karta sieciowa.
Możesz też pobawić się dyziami SSD, ale przy takim obciążeniu będą zdychać co rok, a RAM spokojnie obrobi taki i większy ruch przez 10 lat bez najmniejszego problemu.
Chyba, że znasz kartę sieciową o takiej szybkości:
/dev/zram0:
[b]Timing cached reads: 5606 MB in 1.99 seconds = 2821.13 MB/sec[/b]
Timing buffered disk reads: 1150 MB in 3.00 seconds = 383.01 MB/sec[/quote]
Tutaj wynik jest zafałszowany z powodu kompresii, prawdziwa jest prędkość bufora, po prostu Hdparm nie wiedział, że służy do testowania interfejsu zramX. :D
A SDRAMy z cache na prawdziwym dyziu?/dev/sda:
[b]Timing cached reads: 5096 MB in 1.99 seconds = 2562.85 MB/sec[/b]
Timing buffered disk reads: 220 MB in 3.02 seconds = 72.95 MB/sec[/quote]
Na Twoim miejscu na fizycznych dyziach, w czasie ciągłej pracy trzymałbym tylko bazy danych z logami, bo to w przypadku takiego spamowania oznacza podstawę do wystawienia faktury.
Oczywiście Ramdyzio traci zawartość po zaniku napięcia, ale po powrocie napięcia zawsze może automatycznie odzyskać zawartość z dyzia fizycznego, np Rsynciem, albo przy pomocy Gita, Merkuriała czy choćby jakiejś kombinacji z DRBD czy choćby skryptem.
Tak samo też może działać synchronizacja reklam między dyziem a ramdyziem.
Pozdro
;-)Ostatnio edytowany przez Jacekalex (2014-07-22 09:45:26)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)Offline
Reklama jest u dostawcy czyli w dużych portalach my zliczamy czy na nią zasługuje czy nie, jeśli zasłuży to wysyłamy do producenta informację by pokazał tą reklamę.
Zapytań jest bardzo dużo ale tak naprawdę lata tylko plik o pojemności 1k , a pomimo tego zatyka się. Aplikacja która to zlicza , jest napisana w php i jv bazuje na mem cache dane są wysyłane i trzymane w couchDB.
Czyli to NFS siada przy takich byczych operacjach ?
Offline
Prawdopodobnie wąskim gardłem jest nie ilość danych, tylko ilość odwołań do dyzia.
Nawet najlepszy na świecie tenisista spuchnie, jak będzie musiał w jednej chwili odbić 200 piłek.
Gdzie to się ustawia w NFS i ile wytrzyma dyzio, pojęcia nie mam, ale przy takich małych pliczkach ramdyzio rozwiąże wszystkie problemy.
Podejrzewam, ze każde zapytanie oznacza odwołanie maszyny Xena do dyzia po NFS, i stąd masz problem.
Takie duperele w milionach sztuk robi się w ultra szybkich nośnikach.
Nic szybszego, niż pamięć RAM, nie ma, i nigdy nie będzie.
Offline
a czy można zrobić ram dysk i przewalić te dane do tego ?
Offline
Prosty ramdysk zrobisz w /etc/fstab:
tmpfs /var/tmp tmpfs noatime,size=3G,mode=1777 0 0
Po zamontowaniu:
tmpfs on /var/tmp type tmpfs (rw,noatime,size=3G,mode=1777)
Oczywiście prawdziwą szybkość osiągniesz, jeśli RAMu będzie tyle, żeby system obywał się bez SWAPA, ale już wchodzą pamięci i płyty, które pomieszczę nawet 64G, a szybkość takiego ramdyzia to będzie ponad 1-5 GB na sekundę, byle się reszta systemu wyrobiła. :D.
Jak raz namówiłem gościa, któremu się dedyk nie wyrabiał, żeby cały sklepik (3 Giga - głównie obrazki) do ramdyzia, to od tej pory wszystko fruwa, ale potrzebne był droższy serwer.
Tutaj, jak rurki są w biurze, serwery stoją w biurze, to wioo, żyć, nie umierać, w sumie bułka z masłem.
Tylko oczywiście wszystkie pliki i tak siedzą na zwykłych dyziach, do ramdyzia się je kopiuje po włączeniu serwera.
Wtedy z dyzia czytasz pliczek raz, a z ramdyzia może wyfrunąć kilkanaście milionów razy bez jednego odwołania do dyzia mechanicznego.
Wtedy zwykły dyzio magnetyczny czy SSD na pewno da sobie radę, xD
i wytrzyma długie lata. ;)
Z resztą, jak myślisz, po co w dyziach dodali Cache, ostatnio już 128 MB ram?
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-22 10:32:28)
Offline
serwery nie są moje tylko wypożyczone mają po 128GB ramu , mogę je wymienić na 64GB ramu ale za to z dyskiem SSD 512G, więc myślę czy dysk do ramu czy wymiana na SSD nieduża to różnica w cenie u dostawcy a może dać nam pole do działania
___
zastanawiam się co z ram dyskiem i danymi po restarcie serwera chyba przepadną więc odpada takie rozwiązanie
Offline
dane polecą, trzebaby to jakoś kopiować na dyzia przed restartem
Offline
No i do tego jeszcze załadować skrypta do CRON'a, żeby co jakiś czas synchronizował dane (chyba, że by jednocześnie kopiować dane na HDD i ramdysk)
Offline
Dane w ramie?
Od czego jest Git, Mercurial, DRBD, Rsync i diabli wiedzą, co jeszcze?
Zapisujesz dane na fizycznym, stałym dyziu, a program automatycznie kopiuje je do RAMdyzia, na upartego można użyć mechanizmu inotyfy, żeby reagował na każdy nowy plik, jeśli Cron odpalający git pull na ramdyziu nie starczy.
Przecież serwery, jeśli są prawidłowo do prądu, albo mają UPSy, to potrafią stać tygodniami bez przerwy.
Ja mam najzwyklejszego domowego kompa, i też mu się zdarzają Uptime na poziomie 7 dni.
Tu chodzi o to, żeby ramdyzio robił za ultra szybki bufor danych dla serwerów WWW, oryginalne dane będą na niego dostarczane tylko po uruchomieniu, i najwyżej synchronizowane z oryginałem.
Ja raz w życiu coś podobnego postawiłem, używając skrypta bazującego na dnotify, który znalazłem chyba w książce "100 sposobów na Linux"
z Helionu.
Obecnie chyba prościej użyć Inotify:
inotifywait -r -m /var/tmp Setting up watches. Beware: since -r was given, this may take a while! Watches established. /var/tmp/ CREATE dupa /var/tmp/ OPEN dupa /var/tmp/ ATTRIB dupa /var/tmp/ CLOSE_WRITE,CLOSE dupa /var/tmp/ DELETE dupa /var/tmp/ CREATE,ISDIR dupa /var/tmp/ OPEN,ISDIR dupa /var/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR dupa /var/tmp/dupa/ CREATE,ISDIR dwa /var/tmp/dupa/ OPEN,ISDIR dwa /var/tmp/dupa/ CLOSE_NOWRITE,CLOSE,ISDIR dwa /var/tmp/dupa/dwa/ CREATE,ISDIR trzy /var/tmp/dupa/dwa/ OPEN,ISDIR trzy /var/tmp/dupa/dwa/ CLOSE_NOWRITE,CLOSE,ISDIR trzy /var/tmp/dupa/dwa/trzy/ CREATE test.txt /var/tmp/dupa/dwa/trzy/ OPEN test.txt /var/tmp/dupa/dwa/trzy/ ATTRIB test.txt /var/tmp/dupa/dwa/trzy/ CLOSE_WRITE,CLOSE test.txt
Np, napiszcie, jakie komendy spowodowały takiego loga, jak powyżej. xD
Tu macie CDN:
http://search.cpan.org/~mlehmann/Linux-Inotify2-1.22/Inotify2.pm
http://www.ibm.com/developerworks/library/l-ubuntu-inotify/
http://ubuntuforums.org/showthread.php?t=663950
Ostatnio edytowany przez Jacekalex (2014-07-22 12:09:20)
Offline
Jeżeli te „reklamy” to zwykłe statyczne dane, to taka zabawa z cronami jest niepotrzebna bo te dane będą takie same po kolejnych restartach i nie ma potrzeby ich synchronizacji z oryginałem na dysku.
Wystarczy je tylko ładować przy starcie danej usługi jako kopię w Ramie.
Co innego gdy mowa o logach w ramie i innych dynamicznych danych, których zawartość należy mieć zsynchronizowaną przy restarcie maszyny.
Offline
Synchronizacja się przyda, jak podmieniasz reklamy, jedne dodajesz, drugie wywalasz, wtedy chyba najlepiej rsync z opcją delete, albo przy większych sprawach Git.
Przy czym, jeżeli tam stoją dwa potwory po 128 GB ram, a system Debian na serwerze rzadko potrzebuje więcej, niż dwa giga, to ja nie rozumiem, o czym ta cała dyskusja.
Jak mówi klasyk, "Alleluja i do roboty" tu nie ma co kombinować. xD
Offline
Dzięki wszystkim za wyczerpujące informacje, zmieniłem na serwerki 2 dyskami ssd zobaczymy jak teraz będzie :))
Offline
SSD przy naprawdę dużej liczbie zapytań długo nie pochodzi, taka już uroda SSD.
Porządny ram wytrzyma z 10 lat albo więcej, dysk SSD prawdopodobnie albo z trudem przeżyje gwarancję, albo nawet to się nie uda.
Zwłaszcza, że tam podobno nie pobierasz olbrzymich ilości danych, ale pobierasz pliczki około 1kB, miliony razy.
Ostatnio edytowany przez Jacekalex (2014-07-22 17:59:02)
Offline
Bez przesady. Obecne dyski SSD mają naprawdę sporą żywotność. Dodatkowo odczyt nie wpływa znacząco na długość życia (zaryzykowałbym stwierdzenie, że jest ona dłuższa niż w dyskach talerzowych ze względu na brak elementów mechanicznych).
Jedynie bardzo duża ilość operacji zapisu skraca żywotność (ale dzisiaj staje się to niezauważalne)
Offline
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00096 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.176.228' WHERE u.id=1 |
0.00068 | UPDATE punbb_online SET logged=1732826706 WHERE ident='3.145.176.228' |
0.00042 | SELECT * FROM punbb_online WHERE logged<1732826406 |
0.00223 | DELETE FROM punbb_online WHERE ident='3.14.249.124' |
0.00080 | SELECT topic_id FROM punbb_posts WHERE id=271919 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=26159 ORDER BY posted |
0.00028 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26159 AND t.moved_to IS NULL |
0.00022 | SELECT search_for, replace_with FROM punbb_censoring |
0.00142 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26159 ORDER BY p.id LIMIT 0,25 |
0.00073 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26159 |
Total query time: 0.00795 s |