Что делать если не хватает диска на сервере?
Содержание
- 1 Что делать если не хватает диска на сервере?
На самом деле, кроме очевидных решений, вроде перехода на старший тариф на хостинге или покупки дополнительного диска, в случае с аппаратным сервером, проблему можно решить гораздо проще и удобней. А иногда даже бесплатно или за небольшую оплату. Дело в том, что любые серверы умеют использовать в качестве файловой системы диски не только те, которые физически доступны непосредственно на сервере. Всегда есть возможность использовать в качестве хранилища внешние диски, облачные сервисы. Операционная система способна подключить удаленные файловые системы множеством способов и протоколов. Начиная c NFS (Network File System) и заканчивая WebDav,FTP , или даже расшаренной папкой Windows(!).
Как сайты могут работать с сетевыми дисками или облачными сервисами?
Подключение по сети файловых систем к операционной системе называется монтирование. Впрочем, это применимо не только к сетевым дискам, любые файловые системы ОС монтирует прежде чем использовать. Самое интересное для нас в этом случае является то, что после этого файловая система становится как бы частью системы. А значит, софт — будь то вебсервер или даже база данных — могут работать с ними точно так же, как и с локальными файловыми системами. То есть часть сайта будет физически находиться на другом сервере или в облаке, но сам сайт будет отдавать файлы так же, как если бы они находились на том же диске. Вебсерверу и сайту не нужно об этом беспокоиться — с этим разберется операционная система.
Зачем нужно подключать сетевые диски?
Есть много вариантов, где это можно применять. Например — хранение резервных копий сайтов и БД. Это не только позволит не загромождать основной диск на VPS бэкапами, но хранить их на внешней системе даже более разумно. Ведь случись чего с вашим сервером — бэкапы могут погибнуть вместе с ним, если же они физически находятся далеко от основной системы — в этом случае бэкапы останутся доступными и можно будет восстановить сайт из них.
Другой вариант — хранение и отдача статических файлов. Например, эта тема поднималась на форуме webmasters — как хранить изображения на поддомене. Так вот, их совсем не обязательно выносить на поддомен, достаточно использовать внешний диск для них на том же домене. Я в этом топике расписывал и показывал подробно как это делается, проводил тесты с замером скорости отдачи изображений с внешних файловых систем. Этот способ отлично будет работать и для любого другого контента — видео, музыка, pdf, что угодно.
Кстати, этот подход используется самими хостингами и датацентрами. Только их хранилища очень быстрые и мощные — их называют СХД — системы хранения данных. Так почему бы не использовать это и рядовому вебмастеру?
Какие сервисы можно использовать для дополнительного хранилища файлов сайта?
Яндекс Диск. Его можно легко использовать и для бэкапов, и для хранения контента. Более того, можно даже объединить несколько аккаунтов ЯД и получить диск бОльшего размера, чем Яндекс выдает бесплатно.
На этом скриншоте видно как я объединил два аккаунта яндекса и получил внешнее хранилище в два раза большего размера. Это конечно сложнее использовать и более рискованно, ибо файлы будут разбросаны по разным аккаунтам и можно не собрать потом все в кучу.
Но более удобно взять дешевый VPS на SSD с большим диском и подключить его по NFS к основному серверу. Я так и делаю. Подробней об этом очень недорогом хостере с мощными VPS на огромных SSD писал в блоге.
Дело в том, что этот хостинг дает очень мощные впс относительно дешево ( 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 нужно внести данные вашего аккаунта, чтобы не вводить их каждый раз при подключении.
На скриншоте указаны два варианта и любой из них работает.
Это позволит монтировать 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.
Как при монтировании яндекс диска учитывается трафик на ВПС?
Комментарий на отдельной страницеБудет учитываться дилингом хостера, или это чисто от яндекса будет траф?
Трафик будет проходить через VPS полностью. Все файлы будут отдаваться с него. Кроме того и входящий трафик с яндекса будет такого же объема. То есть, ваш ВПС будет как бы проксировать отдачу файлов с яндекса.
Комментарий на отдельной страницеНа серче сегодня отвечал на этот же вопрос, наверное вы тоже спрашивали, но и здесь не будет лишним :)
Что-то я не совсем понял. Не очень разбираюсь с этим, но столкнулся с проблемой. Постараюсь максимально понятно объяснить. Можно ли например смонтировать диск от хезнер, http://ru.hetzner.com/hosting/produktmatrix/storagebox-produktmatrix Вот любой тариф. К vps, на vps 20 всего лишь гигов пространства, Но как сделать так, что бы при закачивании файлов с сайта, они оставались на удаленном диске от хезнера, но на vps файлы физически не скапливались? Это какая — то односторонняя синхронизация или как? Сегодня взял у хезнеров этот Storage Box, думал там можно делать прямые ссылки на файлы, прикрутить свой домен третьего уровня img.mysite.ru Но что-то не нашел как там и что)
Комментарий на отдельной страницеМожно просто смонтировать сетевую папку каким-нибудь способом, субдомены даже не понадобятся.
Интересно. Даже не знал, что у них такое есть, хотя арендую VPS у них.
Смотрите, там написаны способы, которыми можно подключаться к хранилищу:
Итак, то, что вам нужно можно сделать с помощью NFS, Webdav, Samba и FTP(S). Способ практически одинаковый, разница только в протоколах и их работе, для сайта будет это всё абсолютно одинаково выглядеть — обычная папка в файловой системе VPS.
Это скорей всего сложно понять, если из статьи вам непонятно (там я показывал как сделать это с webdav, без выноса на субдомен и прочие бубны) Просто монтируем и складываем на удаленное хранилище всё что нужно.
Попытался найти схемку какую-нибудь, для более чёткого понимания, ну нашел вот архитектуру NFS, возможно поможет.
А ещё лучше, попробуйте на windows-компьютерах расшарить папку на одном, а на другом подключить её как сетевой диск. И затем установить какое-нибудь приложение в этот сетевой диск. Такой подход часто используется например для 1c-бухгалтерии в файловом варианте.
Для этого не понадобится делать выносы на субдомен и переписывать линки. Просто смонтировать, со стороны сайта не нужно делать ничего. А вот если вам обязательно нужен субдомен (зачем?) — это уже надо думать, тут я так не скажу сходу. Но раз есть http, вероятно можно через него и наладить такую схему взаимодействия.
Комментарий на отдельной страницеСпасибо за ответ, я примерно понял как все сделать, но не осилил тот момент, что при удалении файлов с папки где складывались картинки, они так же удалялись с сетевого диска, диск монтировал в директорию /var/www/user/data/www/test.ru/upload , с использованием davfs2. Однако, все вышло не так как мне нужно) Это как синхронизация получается. Спасибо, буду вычитывать про NFS
Комментарий на отдельной страницеЭто не синхронизация, а использование ТОЛЬКО диска на удаленной системе. Просто весь софт и сайты «видят» это как локальную файловую систему. А как же вам нужно?
Комментарий на отдельной страницеМне нужно как-то смонтировать удаленное хранилище по такому пути /var/www/user/data/www/test.ru/upload (upload) — это будет удаленный диск, при загрузки туда файлов, мне нужно что бы на локальном сервере эти файлы не учитывались, не занимали место.
Комментарий на отдельной страницеНу монтирование так и работает. Все именно так и будет, если вы смонтируете так, как описано в статье. Но если там уже есть файлы, вам нужно их удалить из этой папки или переместить, прежде чем вы будете монтировать. Потому как монтирование будет сделано и в папку с файлами, но файлы при этом физически там и останутся где были.
Поэтому нужно сначала смонтировать хранилище в какую то временную папку:
mount remote/fs /var/www/user/data/www/test.ru/tmp/
затем перенести файлы на удаленное хранилище, например так:
rsync -avh /var/www/user/data/www/test.ru/upload/ /var/www/user/data/www/test.ru/tmp/
После чего можно удалить файлы:
rm -fr /var/www/user/data/www/test.ru/upload/*
и перемонтировать хранилище уже в пустую папку
mount remote/fs /var/www/user/data/www/test.ru/upload/
Теперь, ваши файлы лежат ТОЛЬКО на удаленном хранилище, но при этом доступны для сайта.
Возможна проблема с правами на файлы, тогда нужно сделать chmod или chown на файлы:
chmod -R 755 /var/www/user/data/www/test.ru/upload/
или
chown -R www-data:www-data /var/www/user/data/www/test.ru/upload/
В конце можно отмонтировать удаленное хранилище от временной папки и удалить ее:
umount /var/www/user/data/www/test.ru/tmp/ && rmdir /var/www/user/data/www/test.ru/tmp/
Комментарий на отдельной страницеНу все, наконец-то я все вкурил и сделал, спасибо за помощь, реально, помог и навел в какую сторону смотреть, не без помощи хостера конечно, не осилил автозагрузку, ибо после перезагрузки впс, он уже не запускался) подключаюсь через webdav с помощью davfs2. В принципе, я до этого так и сделал, единственное, я это уже монтировал в папку с файлами и плюс с правами напутал) Да, можно было на поддомен не переносить, но, пусть уже будет так. Еще вопрос, взял диск опять же у хетзнера и там есть такой пункт: Одновременных подключений для учётной записи 10. Так вот, что это значит, вот к примеру, закачивал туда я значит картинки, более 10 потоков мне не удалось сделать, я так понимаю это и есть то самое ограничение для учетной записи. А если сайт будет отдавать контент пользователям, картинки допустим, на страничке по 30 картинок, davfs2 у меня работает от пользователя моего впс. Это не одно и тоже? Получается, что это будет считаться как один запрос к удаленному диску? Даже если человек откроет страницу и у него будет подгружаться по 30-50 запросов к сетевому диску который мы подключили.? И да, еще вопрос, при открытии сетевого диска с каталогом папок через впс, долго думает, оно мне как бы и не нужно так открывать, главное что бы картинки шустренько открывались при запросе) поддомен еще не рабочий, не проверял, до сих пор качаю) долго что-то, начал так scp -r /var/www/user/data/www/img.site.ru/uploads user@user.your-storagebox.de:/ но так как у меня там одни картинки, то качает в один поток и поштучно))) Хотел запаковать, но взял для теста же, распаковать уже некуда было, там картинок на 80 гигов, посему, качаю через sftp в 10 потоков))) Может упустил еще какие способы, я в этом деле новичок. Вот еще вопрос davfs2.conf, у меня там все строки закомментированны, кроме dav_user. Читал в сети, что cache_dir /var/cache/davfs2 закомментировать нельяз, может это в старой версии, не в курсе, но у меня тут все закомментированно было, в папку с кешем ничего не сохраняется, папка создается, но она пуста, если я раскомментирую, на что это повлияет, если к примеру у меня около 50 папок с общим объемом 80 гиг картинок. Я так понимаю, оно будет кэшировать эти все картинки равны размером или же, каким-то иным способом, повлияет ли это на скорость при запросе к контенту с сайта?
Комментарий на отдельной страницеУ меня от такого объема, проц грузит и долго думает, от чего даже сайт не открывается, как только днс сменил на поддомен с картинками с диска
Комментарий на отдельной страницеМожно ли тут что-то подкрутить davfs2.conf ? Вот конфиг
# davfs2 configuration file 2014-08-10
# version 12
# ————————————
# Copyright (C) 2006, 2007, 2008, 2009, 2012, 2013, 2014 Werner Baumann
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved.
# Please read the davfs2.conf (5) man page for a description of the
# configuration options and syntax rules.
# Available options and default values
# ====================================
# General Options
# —————
dav_user user # system wide config file only
dav_group user # system wide config file only
# kernel_fs fuse
# buf_size 16 # KiByte
# WebDAV Related Options
# ———————-
# use_proxy 1 # system wide config file only
# proxy # system wide config file only
# trust_ca_cert
# servercert # deprecated: use trust_ca_cert
# trust_server_cert
# clientcert
# secrets ~/.davfs2/secrets # user config file only
# ask_auth 1
# use_locks 1
# lock_owner
# lock_timeout 1800 # seconds
# lock_refresh 60 # seconds
# use_expect100 0
# if_match_bug 0
# drop_weak_etags 0
# n_cookies 0
# precheck 1
# ignore_dav_header 0
# use_compression 0
# min_propset 0
# follow_redirect 0
# server_charset
# connect_timeout 10 # seconds
# read_timeout 30 # seconds
# retry 30 # seconds
# max_retry 300 # seconds
# add_header
# Cache Related Options
# ———————
# backup_dir lost+found
# cache_dir /var/cache/davfs2 # system wide cache
# ~/.davfs2/cache # per user cache
# cache_size 50 # MiByte
# table_size 50
# dir_refresh 10 # seconds
# file_refresh 10 # second
# delay_upload 10
# gui_optimize 0
# minimize_mem 0
# Debugging Options
# ——————
# debug # possible values: config, kernel, cache, http, xml,
# httpauth, locks, ssl, httpbody, secrets, most
Железо Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 1200.000 Mhz
Комментарий на отдельной страницеОперативная память 4 гига
Этот конфиг пустой, по сути. В нем ничего подкрутить не получится. Проблема вероятно в связи сервера с яндекс.диском — если она медленная, то это так и будет работать и ничего исправить тут нельзя. Про днс и поддомены вообще ничего не понял, при чем тут они.
Комментарий на отдельной страницеУ меня впс у фаствпс, это где-то в эстонии вроде, а монтировал я диск от хетзнера. Про поддомен, я имею ввиду, что у меня контент храниться на другом впс на поддомене. Сейчас я создал поддомен на впс к которому примонтировал хранилище хетзнер и на котором находиться основной домен. После обновления ns, поднялась нагрузка на проц и основной сайт перестал открываться вообще. Отключаю поддомен в панеле isp к которому примонтирован удаленный диск, сайт открывается, без картинок естественно) В общем, нагрузку создает на процессор, оперативы немного жрет, но проц грузит под 90.
Комментарий на отдельной страницеТак ничего не определить почему и где тормозит. Это надо смотреть, разбираться. Проверять канал, насколько быстро что монтируется и монтируется ли вообще. Проц грузит — опять же — от каких процессов идет нагрузка на него?
Комментарий на отдельной страницеА, так вот я когда даже из панели захожу в папку к которой примонтирован диск удаленный по webdav, открывается очень долго, минут наверное 5 точно ждать надо.
Комментарий на отдельной страницеВот этот процесс грузит mount.davfs
Комментарий на отдельной страницеЯсно. Это да, оно так и работает. Особенно если много файлов. А по nfs в чем проблема тогда? Говорите hetzner по NFS монтировали и тоже не пошло.
Комментарий на отдельной страницеnfs я не пробовал. Как это можно сделать в случае с http://ru.hetzner.com/hosting/produktmatrix/storagebox-produktmatrix storage box У меня на впс стоит debian, как я понял, мне нужно на мой сервер установить клиент, а на сторж бокс в хетзнере, должен быть установлен nfs сервер) Не могли бы вы более детальную инструкцию написать с случаем storage box у хетзнера? Ведь туда нет возможности что либо устанавливать.
Комментарий на отдельной страницетолько что узнал, что реализовать по nfs на их vps, технически невозможно.
Комментарий на отдельной страницеДа, с этим может быть проблема в VPS, которые сделаны на технологии виртуализации OpenVZ. Дело в том, что это не совсем виртуализация, а контейнеры. Поэтому в такую систему невозможно установить драйверы, ибо нет управления ядром. Оно там общее для всех контейнеров на аппаратном сервере. Поэтому я не люблю эту виртуализацию и стараюсь не брать такие VPS. Только на технологиях полной виртуализации — Xen, KVM и подобным.
Комментарий на отдельной страницеЗдравствуйте!
Комментарий на отдельной страницеКупил VPS на zomro.com, по тарифу 40Гб места. Стоит WS 2012 R2, базы 1С умещались вполне, однако, встала необходимость хранении и работе с различными офисными документами.
Моя клиентка подключалась по RDP с использованием подключенных локальных дисков машины и её это устраивало до того момента, пока она не стала работать с нескольких рабочих мест.
Для хранения бэкапов 1с я использовал подключенный по Webdav яндекс-диск, но он себя крайне плохо зарекомендовал именно для работы. То есть открыть документ, отредактировать и закрыть — всё очень долго.
Собственно вопрос — будет ли работать быстрее если использовать диск купленный тут, например — http://ru.hetzner.com/hosting/produktmatrix/storagebox-produktmatrix
Это зависит от качества сети между zomro и hetzner. Если канал хороший, то будет работать быстро. С яндексом проблемы то что возникали — это из-за слабой сети между хостингом и яндексом. У меня сервер на hetzner есть, до zomro вот такой ping.
Комментарий на отдельной страницеТак что возможно что будет работать все отлично.
Саша, а подскажи как расширить диск на vps за счет дополнительного volume.
Комментарий на отдельной страницеНа scaleway дают volume по 50гб, дополнительный идет так же на 50гб, на одном уже всё давно настроено и работают сайты. А как подключить второй чтоб в сумме диск был 100гб а не 2х50гб?
У них тут есть мануал, но по нему получается после форматирования и подключения просто еще один дополнительный диск — https://www.scaleway.com/docs/attach-and-detach-a-volume-to-an-existing-server/
Добрый день.
Комментарий на отдельной страницеНасколько я знаю протокол NFS не безопасный, как FTP, вы не решали данный вопрос c безопасностью ?