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


16

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

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

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


Здесь полезны такие вещи, как Cassandra (базы данных NoSQL).
Алексис Уилке

Рассматривается ли использование Varnish для повышения производительности при интенсивном движении? en.wikipedia.org/wiki/Varnish_%28software%29
Торбьерн Равн Андерсен

Ответы:


12

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

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

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

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


Большая проблема с rsync заключается в том, что вы, скорее всего, получите 404, если загрузите новые данные, и rsync не произойдет очень быстро ... Также система, подобная Cassandra (пункт 4), бесплатна, хотя, конечно, наличие 10 серверов не бесплатно ... так что, может быть, я должен сказать, без дополнительной оплаты (хотя для того, чтобы все это заработало, нужно немного программирования)
Алексис Уилк

@AlexisWilke - Вы правы насчет rsync, и я тоже как-то упомянул это в ответе. Я уточнил это сейчас в ответе.
Фредерик Нильсен

В отношении # 3, «мертвое время» между новым развернутым ресурсом и синхронизированным новым ресурсом может быть минимизировано, если вы используете наблюдателя файловой системы (например, сторожа Facebook ) и инструмент быстрой синхронизации (например, csync2 ). Нет, задержка никогда не упадет до нуля, но она очень минимальна и может быть легче развернута, чем другие альтернативы.
pepoluan

2

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


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

1
Ваш ответ верен в отношении потенциального снижения нагрузки, но не отвечает на вопрос о совместном использовании файлов ресурсов между несколькими серверами.

@AlexisWilke это делает (не удается), если у вас не правильно настроен Squid. Отрегулируйте, как он кэширует (или кэширует) в настройках, но вы можете обнаружить, что ни одна страница не является полностью динамичной. Всегда есть что-то, что вы можете кэшировать. Кроме того, Андре, это очень помогает в обмене активами, как описано в заголовке, но не столько в обмене файлами. Вопрос состоял в том, как предотвратить падение сайтов под большой нагрузкой. Squid отлично справляется с этим.
Aihngel Tech

1

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

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

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


1

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

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

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

расквитаться:

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

Недостатки:

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

0

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

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

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


4
Как этот ответ помогает в проблеме синхронизации файлов?
Тит

@titus В NoSQL, когда есть запись на одном из узлов, она будет реплицирована на другие узлы в кластере. Уровни согласованности записи Кассандры могут помочь прояснить
ситуацию

Итак, способ сохранить все файлы в NoSQL DB?
Тит

@titus вы можете, но базы данных NoSQL могут делать гораздо больше, чем хранить файлы. Все зависит от ваших потребностей.
Аззи

2
ОП попросил решить конкретную проблему: « Несколько веб-серверов Linux, подключенных к балансировщику нагрузки ... совместно используют ресурсы (такие как изображения, видео и другие материалы) между этими серверами». Ваш ответ очень общий, можете ли вы предложить и объяснить конкретные инструменты (и желательно их конфигурации) для решения проблемы?
kdbanman

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.