Обслуговування статичних файлів з nginx через NFS?


9

У мене є веб-сайт, який отримує близько 7k запитів за секунду на nginx-сервері. Цей сервер обробляє перезаписи на сервер Apache, а також безпосередньо подає статичні файли, зображення тощо. Статичні файли - це найбільша частина з приблизно 5 к запитами.

З оновленням архітектури я думаю про використання центрального файлового сервера, який експортує каталог, що містить ці статичні файли через NFS. До цих файлів доступу до запису не буде, тому каталог можна встановити лише для читання на машині nginx. Моя головна турбота:

Чи достатньо швидкий для цього NFS? Чи існує обмеження на кількість запитів, на які може працювати NFS? Чи є якісь "обов'язкові" варіанти, коли йти цим шляхом?

Бонус: Чи є інші альтернативи для цього налаштування, крім NFS?

Дякую!


Немає доступу читання чи "лише" доступу для читання?
pauska

Дякую! Лише доступ для читання, без запису.
j0nes

2
7k запитів в секунду становить ~ 6,048,00,000 запитів на день, якщо ви працюєте на одному сервері NGINX, ми (І компанії, які використовують кластери серверів на половину цього навантаження) хотіли б знати вашу установку.
Мазок

Відповіді:


2

Встановивши центральний сервер NFS, ви введете єдину точку відмови у свій дизайн. Один тільки повинен бути розірвачем угод. Якщо ні, NFS може бути досить швидким для такого навантаження. Найважливішими факторами буде наявність достатньої оперативної пам’яті для кешування файлів, низьких затримкових взаємозв'язків (Gig-E або краще) та налаштування (менше, ніж попередні).

Також слід настійно розглянути можливість використання rsync або подібного інструменту для збереження локальних копій статичних файлів оновлень на кожному окремому веб-сервері. Інший варіант може бути рішенням сервера SAN або надмірним сервером NFS (обидва вони будуть набагато складнішими і затратнішими, ніж ідея rsync).


2
NFS не повинен бути SPoF
gWaldo

@gWaldo Як саме ви можете налаштувати "центральний сервер NFS" і чи не він є SPoF?
Кріс S

Ви робите це, розуміючи, що, як ви вже говорили, центральним сервером NFS є SPoF, і замість цього вибираєте реалізувати кластер NFS. Я насправді з вами не згоден ....
gWaldo

Дякую - приймаю це рішення, тому що я думаю, що я пройду rsync маршрут, уникаючи єдиної точки відмови (що має бути моєю основною проблемою).
j0nes

Досить просто реалізувати високодоступний подвійний реплікуваний сервер NFS за допомогою GlusterFS та CTDB. З точки зору продуктивності мій кластер отримував близько 10 к запитів в секунду, і це добре тріскається. Єдина проблема полягає в тому, що серверам NFS потрібно буде багато оперативної пам’яті.
Альфа01

2

Я використовую cachefilesd (і недавнє ядро ​​Linux, з cachefs), щоб кешувати файли NFS в локальний HD. Таким чином, кожне прочитане в nfs буде копіювати файл у dir / var / cache / fs dir, а наступні читання будуть доставлені звідти, при цьому ядро ​​перевірятиметься в nfs, чи вміст все ще дійсний.

Таким чином ви можете мати центральний NFS, але не втрачаючи продуктивність локальних файлів

Cachefilesd подбає про очищення старих файлів, коли вільний розмір / inode досягне налаштованого рівня, тому ви можете подавати нечасті дані з NFS та загальні запити від HD

Звичайно, також використовуйте лак, щоб кешувати більш поширені запити і врятувати nginx / NFS від подачі.

Ось невеличкий хауд


1

Швидкість залежить від багатьох факторів:

  • Як ваші сервери будуть підключені до цілі NFS? Один диск з двома портами SAS може використовувати 6 гбіт / с швидкості передачі. Майте це на увазі, якщо ви плануєте використовувати 1Gig Ethernet (з якого можна відняти 20% TCP).
  • Який кеш повинен отримати сервер NFS? Ви використовуєте контролер масиву корпоративного класу з великою кількістю кешу? Кеш читання є ключовим у цій настройці
  • Скільки серверів збираються отримувати доступ до одного файлу одночасно? Блокування NFS може нашкодити - сильно

Ліміт відкритих файлів через NFS є обмеженням операційної системи хосту. Наприклад, FreeBSD має безліч різних параметрів настройки для підтримки великої кількості відкритих файлів, але це залежить від обсягу оперативної пам’яті на вашому сервері.

Альтернативою центральному файловому серверу є використання синхронізації / реплікації між вашими веб-серверами (як пропонує Кріс С). rsync або DRBD може бути чудовим та економічно вигідним вибором.


1

Я б радив проти NFS, якщо ви не покладете туди кэшинг. Кеш nginx кращий, ніж нічого, а Varnish - краще.

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

Якщо ви ставите NFS, переконайтесь, що у вас надмірність.


Для цього може знадобитися трохи змінити архітектуру. На додаток до використання шару кешування, як Varnish, також непогано використовувати налаштування CDD для виведення джерела для всіх статичних файлів, які будуть на загальному рівні NFS. Це зменшить навантаження, яке впливає на резервний сервер NFS.
Alpha01
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.