Что делать если не хватает диска на сервере?



На самом деле, кроме очевидных решений, вроде перехода на старший тариф на хостинге или покупки дополнительного диска, в случае с аппаратным сервером, проблему можно решить гораздо проще и удобней. А иногда даже бесплатно или за небольшую оплату.   Дело в том, что любые серверы умеют использовать в качестве файловой системы диски не только те, которые физически доступны непосредственно на сервере. Всегда есть возможность использовать в качестве хранилища внешние диски, облачные сервисы.  Операционная система способна подключить удаленные файловые системы множеством способов и протоколов.  Начиная c NFS (Network File System) и заканчивая WebDav,FTP , или даже расшаренной папкой Windows(!).

Как сайты могут работать с сетевыми дисками или облачными сервисами?

Подключение  по сети файловых систем к операционной системе называется монтирование. Впрочем, это применимо не только к сетевым дискам, любые файловые системы ОС монтирует прежде чем использовать.  Самое интересное для нас в этом случае является то, что после этого файловая система становится как бы частью системы.  А значит, софт — будь то вебсервер или даже база данных — могут работать с ними точно так же, как и с локальными файловыми системами.  То есть часть сайта будет физически находиться на другом сервере или в облаке, но сам сайт будет отдавать файлы так же, как если бы они находились на том же диске.  Вебсерверу и сайту не нужно об этом беспокоиться — с этим разберется операционная система.




Зачем нужно подключать сетевые диски?

Есть много вариантов, где это можно применять. Например — хранение резервных копий сайтов и БД.    Это не только позволит не загромождать основной диск на VPS бэкапами, но хранить их на внешней системе даже более разумно. Ведь случись чего с вашим сервером — бэкапы могут погибнуть вместе с ним, если же они физически находятся далеко от основной системы — в этом случае бэкапы останутся доступными и можно будет восстановить сайт из них.

Другой вариант — хранение и отдача статических файлов. Например, эта тема поднималась на форуме webmasters — как хранить изображения на поддомене.  Так вот, их совсем не обязательно выносить на поддомен, достаточно использовать внешний диск для них на том же домене.    Я в этом топике расписывал и показывал подробно как это делается, проводил тесты с замером скорости отдачи изображений с внешних файловых систем.  Этот способ отлично будет работать и для любого другого контента — видео, музыка, pdf, что угодно.

Кстати, этот подход используется самими хостингами и датацентрами. Только их хранилища очень быстрые и мощные — их называют СХД — системы хранения данных. Так почему бы не использовать это и рядовому вебмастеру?

Какие сервисы можно использовать для дополнительного хранилища файлов сайта?

Яндекс Диск.   Его можно легко использовать и для бэкапов, и для  хранения контента.  Более того, можно даже объединить несколько аккаунтов ЯД  и получить диск бОльшего размера, чем Яндекс  выдает бесплатно.








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

Но более удобно взять дешевый VPS на SSD с большим диском  и  подключить его по NFS  к основному серверу.  Я так и делаю. Подробней об этом очень недорогом хостере с мощными VPS на огромных SSD писал в блоге.

mount-big-disk

Дело в том, что этот хостинг дает очень мощные впс относительно дешево  ( 2 CPU, 6 GB RAM, 500 GB SSD (!) за 8 евро). Но, судя по отзывам, он не отличается стабильностью. Меж тем,  использовать в качестве хранилища  и как тестовую площадку  очень даже удобно.  Что я и делаю.  Положительным моментом является то, что этот VPS находится очень близко от основного, поэтому между  основным сервером и хранилищем хорошая связь и файлы отдаются очень быстро.  В случае с яндекс диском — все же это ощутимо медленней, ибо оба моих хостера находятся в германии. Однако,  если вы используете VPS от российских хостеров, возможно для вас это будет работать быстрее.

Еще один вариант — вы можете даже держать файлы на собственном сервере, или компьютере, располагающемся у вас дома(!). Да, можно провернуть и такое, и это будет нормально работать, если вы уверены что домашний компьютер будет работать 24/7.  Кстати, наш генератор скриптов для бэкапов использует этот метод для инкрементного резервного копирования с помощью синхронизации папок — он монтирует сетевую папку с вашего компьютера на VPS, синхронизирует туда файлы и отключает.
Все вышесказанное справедливо исключительно для VPS, очевидно, что в случае с обычным shared-хостингом все это использовать не удастся.

Как подключить внешнее хранилище?

Это зависит от используемого сервиса и протокола.

Подключение Яндекс Диска к VPS

mount -t davfs https://webdav.yandex.ru /dav
В качестве /dav можно использовать любую папку на вашем сервере. Это называется точка монтирования. Например /var/www/site.ru/images. Можно перенести все изображения предварительно из этой папки на Яндекс диск, затем смонтировать в неё ваш аккаунт по Webdav. И все изображения будут складываться напрямую в облако, хотя сайт будет все так же искать и класть их в эту же самую папку.

Но чтобы реально использовать Яндекс Диск для этого нужно сделать так, чтобы все это было доступно всегда и автоматически. Поэтому нужно сделать дополнительную конфигурацию.

В файл /etc/davfs2/secrets нужно внести данные вашего аккаунта, чтобы не вводить их каждый раз при подключении.

webd-conf

На скриншоте указаны два варианта и любой из них работает.

Это позволит монтировать webdav яндекса без ввода логина и пароля, но необходимо ещё настроить автоматическое монтирование при загрузке сервера.  Это в любом Linux описано в файле /etc/fstab

В случае с яндексом строка будет выглядеть так:

https://webdav.yandex.ru /dav davfs gid=33,uid=33 0 0

Здесь, кстати, указаны дополнительные опции uid и gid. Они нужны для того, чтобы не было проблем с доступом к файлам. В данном случае эти данные описывают, что владельцем всех файлов на яндексе должен быть пользователь www-data, от имени которого работает вебсервер.

Подключение внешнего диска по NFS

Для этого нужно настроить не только сам VPS, но и удаленный сервер, с которого вы собираетесь монтировать хранилище. На самом деле есть множество мануалов в сети, но раз уж я начал говорить об этом, то пусть будет и здесь.

На сервере с большим диском, который планируется использовать в качестве хранилища нужно создать папку и указать ее в файле /etc/exports :

/backup/vpsadm  xx.xx.xx.xx(rw,sync,no_subtree_check,no_root_squash)

В качестве xx.xx.xx.xx здесь следует указать адрес того сервера, которому позволено использовать вашу шару.  В качестве адреса можно использовать регулярные выражения, cidr-нотацию, позволяющую разрешить доступ из целой сети или просто * , что разрешает использовать шару кому угодно. Но в таком случае, шара будет доступна для всего интернета, поэтому не рекомендуется так делать.   Что, впрочем,  бывает оправдано если серверы живут в локальной сети.

Теперь задаем настройки монтирования в /etc/fstab основного ВПС,  по аналогии с яндекс диском:

conta:/backup/vpsadm /share nfs rw,soft,intr,bg 0 0

Здесь, conta — это ip или домен хранилища. Я для удобства описал его в файле /etc/hosts, поэтому использую его здесь.

Все эти опции можно изучить в любом мануале по NFS.  Результат монтирования можно увидеть на скриншоте выше, где я показывал папку /share

Подключение на VPS внешнего диска c Windows

Это самый извращённый и нерекомендуемый вариант, который, тем не менее, имеет право на жизнь. По крайней мере,  очень даже применим для бэкапирования сайтов.

mount -t cifs -o rw,nounix,soft,intr,username=winuser,password=winpass   //windows_ip/windows_share  /win

Это способ годится только для монтирования по локальной сети. Здесь точка монтирования  папка /win на VPS. В качестве windows_ip нужно указывать адрес виндовой машины.  Предварительно на ней должна быть папка windows_share настроена как общая.    Для автоматического подключения при загрузке ОС, нужно добавить в /etc/fstab:

//windows_ip/windows_share /win cifs rw,nounix,username=winuser,password=winpass,soft,intr 0 0

После чего  можно будет смонтировать папку такой командой:

mount /win 

На практике, вам не удастся таким образом смонтировать папку с домашнего компьютера. Для этого нужно открывать порт windows-шары на роутере, делать проброс его на ваш компьютер, да еще и в случае с динамическим IP нужно будет всякий раз исправлять его на сервере.

Поэтому, в данном случае следует использовать SSH-туннель для того, чтобы локальная общая папка стала доступна на VPS.   Достаточно лишь пробросить 445 порт, и тогда можно будет монтировать папку на сервере как  //localhost/windows_share

Использование внешнего хранилища на нескольких серверах

Это ещё одни плюс такого способа.  Вы можете таким образом смонтировать хранилище на несколько своих VPS, и оно будет доступно для них всех одновременно. Это часто используется в распределенных отказоустойчивых системах  —  кластерах. 

Вот таким нехитрым способом можно сократить издержки.  Потому как в 90% случаев, переход на старший тариф хостера бывает нужен именно из-за исчерпания дискового пространства, в то время как остальных ресурсов сервера (CPU, RAM, трафик) еще может быть ещё большой запас.

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

Как  вам такой креатив?:

Кстати, этот мобильный доступен по whatsapp.

 

Комментариев

  1. OSHU :

    Ответить

  2. drmotor :

    Ответить

  3. Евгений :

    Ответить

    • drmotor :

  4. Евгений :

    Ответить

    • drmotor :

  5. Евгений :

    Ответить

    • drmotor :

  6. Евгений :

    Ответить

  7. Евгений :

    Ответить

  8. Евгений :

    Ответить

    • drmotor :

  9. Евгений :

    Ответить

    • drmotor :

  10. Евгений :

    Ответить

  11. Евгений :

    Ответить

    • drmotor :

  12. Евгений :

    Ответить

  13. Евгений :

    Ответить

    • drmotor :

  14. flex0r :

    Ответить

    • drmotor :

Сохраните для друзей или чтобы прочесть в другой раз:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *