Автор Гілка: як зробити веб кластер  (Прочитано 2079 раз)

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
добрий день ..
підкажіть як правильно зробити веб-кластер (чи як він там правильно називається )

зараз є 2 сервери, але в майбутньому може бути і більше (взгальному 1 потужніший і 2-ий трохи слабший)..
це є сайт (чи декілька) на php+mysql ...
зараз там php5+apache2+nginx+mysql5 ... це все поки що на одному сервері ...
Як правильніше використовувати цих 2 сервери .. які сервіси куда .. який між ними звязок має бути .. і т.д.

Praporshic

  • Гість
Re: як зробити веб кластер
« Відповідей #1 : 2007-12-04 10:40:08 »
Залежить від характеру навантаження. НМД краще за все буде на потужніший повісити MySQL та Apache з PHP (хай Бог милує...) а на слабший - nginex та статику.

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: як зробити веб кластер
« Відповідей #2 : 2007-12-04 14:53:48 »
найбільше навантаження робить саме mysql,   є ще php+gd (малювання картинок на с-ки я розумію ..)

Цитата
а на слабший - nginex та статику
а якийм чином взаємодія.. якщо наприклад php-скрипту треба доступ до статики (з двох картинок зробити одну всякими там накладаннями і т.д.), бо навіть ця сама статика (малюнки ) формується  після роботи скриптів, + також cache у вигляді html ..  ???
на слабшому всі ці картинки+кеш тримати і зробити його NFS сервером ... а з іношого (сильнішого там де apache+php) по NFS-клієнту доступатись ??

Praporshic

  • Гість
Re: як зробити веб кластер
« Відповідей #3 : 2007-12-04 15:29:02 »
Прописати у nginx ходити за динамічною частиною на інший сервер. Там є для цього підтримка TCP-сокетів.
Edit:
Спочатку не зовсім вірно прочитав. У випадку, коли потрібен доступ скриптів до статики - мабуть таки краще за все буде NFS...
« Змінено: 2007-12-04 15:30:34 від Praporshic »

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: як зробити веб кластер
« Відповідей #4 : 2007-12-04 17:14:19 »
Цитата
Прописати у nginx ходити за динамічною частиною на інший сервер
це зрозуміло ..

цікавить інше .. конкретний приклад ..
є дві картинки ...  а треба зробити з них одну методом накладання (за допом. php , шось таке ...)..
а php  стоїть на 2-ого сервері .. тому і результат свої роботи (це буде вже 3-тя картинка ) опиниться на 2-от сервері ..
а nginx тож на першому стоїть ... а картинку хотілось б видавати саме ним .. не хотілобся ше і на 2-ому розводити лишні серверсі (і той самий nginx)
Розумієте про шо я ?? питання доступу з php-скриптів до статики яка буде знаходитись на 1-ому (або просто ше іншому) ...
(якщо не правильно висловився то кажіть -- спробую по іншому )

Відсутній Вуйко з полонини

  • Кореспондент
  • ***
  • дописів: 181
  • Карма: +0/-0
Re: як зробити веб кластер
« Відповідей #5 : 2007-12-04 18:41:02 »
Може Вам це допоможе? http://www.linuxvirtualserver.org/
Для цього треба включити модуль в ядрі.
"Don't waste your time or time will waste you" Matthew Bellamy

Praporshic

  • Гість
Re: як зробити веб кластер
« Відповідей #6 : 2007-12-04 19:29:22 »
Може Вам це допоможе? http://www.linuxvirtualserver.org/
Для цього треба включити модуль в ядрі.
То вже кластерізація рівня ядра, і туди пхатись зайвий раз не треба. У подібному випадку - взагалі стрілянина по горобцям зенітними ракетами.

Відсутній PAL

  • Графоман
  • ****
  • дописів: 317
  • Карма: +0/-0
  • Just linux admin
Re: як зробити веб кластер
« Відповідей #7 : 2007-12-04 20:00:06 »
Для початку я б рекомедував розібратися, що саме треба?
Потужність чи надійність у першу чергу?

Чи взагалі треба кластер? Чи досить розіпхати сервіси по машинам?

Класичний кластер будується на багатьох машинах, а не на двох, які ще й разної потужності та ще й без SAN-storage....



Відсутній PAL

  • Графоман
  • ****
  • дописів: 317
  • Карма: +0/-0
  • Just linux admin
Re: як зробити веб кластер
« Відповідей #8 : 2007-12-04 20:02:19 »
Ще рекомендація - візміть папірця та спробуйте намалювати усе - усі сервіси, яке навантаження та якого типу від них та зв'язки поміж сервісами.

Значно полегшає ;)

Відсутній anatolijd

  • Графоман
  • ****
  • дописів: 325
  • Карма: +0/-0
Re: як зробити веб кластер
« Відповідей #9 : 2007-12-05 04:28:49 »
+1

cпочатку дійсно намалюйте собі схему де що лежить, які сервіси працюють, їхні задачі, як всі ці сервіси та дані повязані між собою, ну і розставте навантаження на кожній задачі для кожного сервіса.
Виписуєте лоад в стовпчик по зростанню і маєте перед собою наочний перелік задач які в першу чергу треба оптимізувати.
І не полінуйтесь намалювати таку схему - це реально допомагає. :)  Коли будете продумувати варіант що змінити то одразу будете бачити всі залежності.

Тут варіантів декілька, все залежить від вашої ситуації,
спорбую спрогнозувати один:

Я так розумію в вас зараз один ящик з (php5+apache2+nginx+mysql5), ви дістали ще один чистий і ви хочете розвантажити сервер.
Так виглядає шо  в вас там сайт(и) з фото-галереями (файли на сервері), для яких сторінки з thumbnails генеруються на льоту за допомогою PHP+GD, і до тих thumbs додаються ще якісь логотипи чи підписи (знову файли на сервері). Можливо скрипти генерять ще й нові файли-малюнки та файли-сторінки з існуючих і розкладують по папках, доступних для бровзання.
І ще ви кажете що саме mysql найбільше вантажить систему.

В такому випадку я так розумію дану конхвігурацію:
php+apache+mysql - працюють як звичайно, тобто нічого особливого.
nginx - налаштований як проксі, який оборобляє всю статику (малюнки, .html), а всі динамічні скрипти віддає апачу для виконання.
Таке використання nginx+apache як пари frontend/backend web-сервісів є доволі поширеним явищем ну і реально помічним солюшном. Плюс не є складним в налаштуванні, а отже і в підтримці.
Оскільки найбільше навантаження створює-таки муsql а не web, то я б спочатку зосередився на mysql і залишив nginx+apache в спокої.

Стосовно mysql - тре дивитись що він робить і чому захавує багато ресурсів.

Може він просто потерпає від  високого i/o wait (висока активність роботи з дисками на сервері), а може він обробляє якийсь криво написаний sql query. 'top', 'mytop', 'mysqladmin stat proc' -  поможуть зрозуміти суть.
В my.cnf ввімкніть slow-queries-log : log-slow-queries=/var/log/mysql/slowquery.log, long_query_time=5 (думаю воно вже ввімкнуте) Подивіться в цей лог, може шо знайдете.

В любому випадку, mysql перший кандидат на міграцію на ваш новий окремий сервер.

Стосовно NFS на майбутнє - думка правильна, експортнути потрібні директорії і примонтувати їх "за місцем вимоги".
Але зовсім не факт шо експортувати треба з слабшого сервера :)
Я б спробував два варіанти і зупинився на тому де файлова система працює продуктивніше і надійніше;)


Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: як зробити веб кластер
« Відповідей #10 : 2007-12-05 09:35:51 »
спробуй попорядку описати все ..
Цитата
Класичний кластер будується на багатьох машинах, а не на двох, які ще й разної потужності та ще й без SAN-storage...
та зарз є тільки 2 різних, але в найближчому майбутньому в разі потреби буде і більше .. тому шукаю схема яка б дозволяла без проблем додавти нові сервери і їх використовувати нормально ..

Цитата
Чи взагалі треба кластер? Чи досить розіпхати сервіси по машинам?
кажучи про кластер я маю на увзаі два або більше сервери які працють разом на 1 чи декілька сайтів .. я так думаю що мова іде саме про розіпхати сервіси по машинам

Цитата
cпочатку дійсно намалюйте собі схему де що лежить, які сервіси працюють
саме це і шукаю ..

Цитата
спорбую спрогнозувати один:
саме такий варінат там і є ...
до недавного часу сайт був  на потужнішому сервері (з Лінуксом Сусе, надалі "новий"), на ньому php5+apache2+nginx+mysql5 ... і тепер зявився інший трохи слабший (надалі буду називати "старий") (FreeBSD), який раніше виконував роль цього ж самого серверу  (його колись стало вже замало так і купили новий потужній, той що першим описаний Сусе ) !!! зі всіма тимим самими сервісами(може версії чуть старіші + apache-1.3.. , але не проблема ті сервіси обновити чи переставити) .
Після появи старого його (тобто старий) потавил спереду, а новий заховали за ним ... а також на старому  поставили nginx а на новому все залишили (php5+apache2+mysql5 ) .. ну крім nginx-у ... а старий і новий вони між собою зєдані патч-кордом 1Г..
але це не розвантажили новий .. нагрузка приблизно та сама .. а на старому навантаження також зовсім не спостерігається , тому йому ще шось треба дати робити ..
От і думаю,Mysql в любому випадку буде  на новому, а  перенести на старий:
1. apche+php+статику(кеш-html,+малюнки)  http://wallpaper.com.ua/for_admin/be.jpg
2. спробувати тільки статику(кеш-html,+малюнки) і експортувати його на новий по NFS, може вистачить все-таке тої файлової с-ми.. бо mysql-у треба віддати  що краще .. http://wallpaper.com.ua/for_admin/be2.jpg
це напевно треба пробувати ..  і вибирати з 2-ох варіантів вже на практиці ..

а якщо буде ще якийсь новий сервер, то туди винести статику(кеш-html,+малюнки) , малюнки  по NFS  а  для кеш-у  спробувати  memcached

Цитата
Може він просто потерпає від  високого i/o wait (висока активність роботи з дисками на сервері)
а що тут поробиш .. якщо високе навантаження, велика кількість запитів

Цитата
а може він обробляє якийсь криво написаний sql query. В my.cnf ввімкніть slow-queries-log
вже пробували .. є дуже багато запитів які будуть туда попадати .. але програмісти кажуть що всі нормальні запити . і їх вже ніяк не оптимізуєш..
сайт дуже інтенсивно використовує mysql.. на одній головній сторінці тих запитів  ну дуже багато ...

сподіваюсь нормально описав ситуацію ?
« Змінено: 2007-12-05 10:22:23 від vova07 »

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: як зробити веб кластер
« Відповідей #11 : 2007-12-06 09:07:22 »
і ще в мене питання : як зробити mysql на 2 серверах .. найшов тільки "реплікація" ... але не знайшов наскільки швидко синхронізуються сервери.. а то постає питання , якщо обновиив головний  а вибірку робити з slave-у .. то можна і не побачити нових даних ??
може є ще варіанти ???

і наступне :  якщо робити 2 сервери, на яких буде тільки apache+php, як тоді синхронізовувати сам сайт (скрипти,картинки і т.д. все що в htdocs/ ) ?? на думці лише знов NFS, один з них NFS-сервер.а інші NFS-клієнти.. чи як правильно ?