Назад | Перейти на главную страницу

Как разделить ресурсы между несколькими веб-серверами?

У меня есть несколько веб-серверов Linux, подключенных к балансировщику нагрузки, и мне нравится делиться ресурсами (такими как изображения, видео и другие материалы) между этими серверами. Как лучше всего это сделать?

В настоящее время я подключил файловый сервер ко всем веб-серверам, но меня беспокоит, что он выйдет из строя из-за большого трафика. Как я могу этого избежать?

Заранее спасибо.

Есть несколько способов сделать это в зависимости от ваших потребностей.

  • Используйте центральный файловый сервер, смонтированный с fx NFS на веб-серверах
  • То же, что и выше, но с избыточностью, поэтому, если один выходит из строя, другой берет на себя
  • Используйте какой-нибудь инструмент синхронизации (например, rsync) и разместите файлы локально на веб-серверах. Затем настройте cronjob для синхронизации файлов между серверами с определенным интервалом.
  • Используйте CDN, например Amazon S3, Akamai и т. Д.

Первые два подходят лучше всего, если у вас будет много новых файлов. Третий вариант был бы идеальным решением, если вы не добавляете или не меняете файлы так часто, поскольку пользователи будут получать 404-е сообщение для статического контента, который еще не синхронизирован.

Последний вариант может быть идеальным во многих отношениях, но также может оказаться самым дорогим из четырех. Вам также придется переписать свои веб-сайты, чтобы поддерживать это.

Еще один отличный способ уменьшить нагрузку на веб-серверы и выполнить балансировку нагрузки - использовать squid (а именно, squid3). Настройте его как обратный прокси с кешированием. Он будет кэшировать статический контент, такой как изображения и т. Д., Либо на жесткий диск (по умолчанию), либо в ОЗУ (быстрее и лучше всего), если вы установите его таким образом. Он также может выполнять циклический перебор с другими серверами Squid, если какой-либо конкретный узел перегружен.

Поскольку обычно потребность в большем количестве серверов возникает из-за ресурсов, необходимых для запуска динамических веб-сайтов / приложений, рассмотрите возможность размещения статических ресурсов в другом поддомене / домене. (например, static.yourdomain.com)

Затем вы можете использовать другой сервер / серверы для их размещения. Хостинг статических файлов не использует много ресурсов, поэтому вам потребуется значительно меньше серверов для статического контента. Вы также освободите некоторые ресурсы на серверах для динамического контента.

В зависимости от вашего балансировщика нагрузки вы также можете сделать это в том же домене, где балансировщик нагрузки решает, какой сервер использовать для какого запроса, но если вы используете отдельный домен, вы можете довольно легко разместить свои статические активы в CDN, если необходимость должна возникнуть!

Одно из решений этой проблемы, которое я использовал, состоит в том, чтобы иметь основную копию файлов для чтения / записи на общем диске NFS, но также сохранять копию только для чтения на каждом веб-сервере, чтобы сбой хоста NFS приводил к доступу к файлам. в режиме только для чтения, а не терять их полностью.

  • Файлы хранятся на центральном хосте и передаются веб-хостам через монтирование NFS.
  • rsync запускается каждые 15 минут, чтобы копия, доступная только для чтения, на каждом веб-хосте оставалась свежей.
  • А check_link Сценарий bash запускается каждую минуту, чтобы убедиться, что монтирование NFS все еще существует, и, если нет, меняет символическую ссылку на копию только для чтения.

Более подробную информацию можно найти в Эта статья с того момента, когда я впервые установил эту систему.

Плюсы:

  • Чтение файлов очень доступно
  • Нет условий гонки для записи файлов
  • Новые файлы мгновенно становятся доступными для всех веб-хостов.

Минусы:

  • немного сложно.
  • количество копий, доступных только для чтения, зависит от количества веб-хостов, что может быть чрезмерным, если у вас их больше двух.
  • Запись файлов не является высокодоступной.
  • Возможен простой до 1 минуты перед переключением на копию только для чтения.

Возможно, вы захотите рассмотреть базу данных NoSQL. Они предназначены для работы с кластерами, обеспечивая конечную согласованность. Но будьте осторожны, они не КИСЛОТЫ.

Вот введение это поможет вам решить, какую базу данных NoSQL вы можете использовать для своих целей.

Вот список ресурсов связанных с доступным NoSQL.

Почему бы вам не попробовать решение DFS, оно обеспечивает высокий уровень избыточности, а том может быть разделен между сколь угодно большим количеством пользователей. Gluster - мой любимый продукт, его очень легко установить и настроить в любом известном дистрибутиве Linux.