Я студент ИТ-отдела, и меня попросили создать кластер веб-серверов для нескольких веб-сайтов. После 2 недель поиска, чтения и тестирования я пришел сюда, чтобы попросить о помощи.
Нам нужен кластер веб-серверов, работающих вместе для балансировки нагрузки и аварийного переключения.
То, что у меня сейчас работает как тестовая установка:
2 сервера Piranha в режиме аварийного переключения и балансировки нагрузки по 3 веб-сервера каждый (nginx / php5).
Проблемы, с которыми я столкнулся:
Что я пробовал раньше:
Пытался:
Проблемы:
2 основных сервера получают высокую нагрузку при высокой активности
Сеансы не синхронизируются, каждый коммутатор сервера требует нового входа в систему
Если один из 3 серверов не отвечает, переключение на следующий сервер прекращается.
Пытался:
Проблемы:
Чтобы объяснить мои настоящие вопросы, мы хотим построить высокодоступный и быстрый веб-кластер. Все данные в веб-кластере должны быть синхронизированы в реальном времени. Понятия не имею, как этого добиться! В этом веб-кластере будет работать множество веб-сайтов, это означает, что все должно быть автоматическим, и пользователи (веб-сайты) не будут знать, что это находится на более чем одном сервере, но будут думать, что это один действительно большой мощный сервер.
Как это делают в Google или Facebook?
Я действительно думал о том, чтобы иметь отдельный сервер, на котором клиент может редактировать веб-сервер в реальном времени, реальный сервер не будет редактироваться, пока они не отправят свой веб-сайт в веб-кластер. Это можно сделать с помощью rsync, но это не кажется хорошим решением .. я думаю, сеансы могут быть в общем хранилище?
Приветствуются любые идеи и решения!
Требуются годы обучения, практики и опыта, чтобы знать, как создать что-то подобное. И есть МНОГО-МНОГО решений.
Несколько советов:
Забудьте о DRBD. Если вы хотите синхронизировать файловые системы в реальном времени, используйте реплицирующую файловую систему, такую как HDFS или AFS.
2 основных сервера получают высокую нагрузку при высокой активности
Какого черта? Вы подключили 2 сервера nginx, выступающих в качестве прокси, к 3 серверам nginx ???? Вы делаете что-то очень неправильно на самом базовом уровне или не совсем правильно объяснили свою настройку.
Если вам нужны общие сеансы, то это должно быть в верхней части вашего списка для работы.
Это можно сделать с помощью rsync, но это не кажется хорошим решением.
Если (помимо хранилища сеансов, если вы выберете этот корень - но я бы сказал, что придерживайтесь репликационной базы данных), ваше единственное требование для обмена данными между серверами - это сайты публикации, тогда на самом деле это очень хорошее решение. У него минимальные зависимости, он может восстанавливаться после длительных отключений, он очень надежен. В самом деле, не нужно прилагать много усилий, чтобы настроить его, так что вам даже не понадобится явно назначенный сервер для применения изменений.
Вместо синхронизации файловых систем вы можете использовать NFS для экспорта тома, используемого для хранения всех корней веб-сайтов, и монтировать его на всех веб-серверах, поэтому каждый веб-сайт легко будет иметь одинаковое содержимое.
Что касается управления сеансами через кластер, я предлагаю другой подход: сделать сеанс одного пользователя таким, чтобы он оставался на одном веб-сервере, другими словами, закрепленными сеансами.
У меня возникла эта проблема с IBM Tivoli Access Manager, используемым в качестве обратного прокси, в этом продукте есть несколько вариантов соединения для обработки сохраняемости сеанса. Если вы используете LVS, вы можете найти решение Вот