После неудачной попытки с ceph и советов забить на это, как от гуру-школьников на реакторе, так и на хабре, я уже почти опустил руки.
В это время тестировался gfs2. Но он оказался: во-первых, плохо масштабируемым; во-вторых, достаточно медленным; в-третьих, ооочень сложным и глючным. Явно не расчитан на "commodity hardware".
Я пустился в размышления - почему же это так сложно и тормознуто. Ведь задача простая - хранить файл в нескольких копиях на разных серверах + как-нибудь сохранить где именно он хранится. При желании, это реализуется достаточно просто и быстро даже вручную.
И тут я понял основную ошибку - я искал файловую систему. А в ней не просто хранение, но ещё и система прав и лок файлов. Они мне не были нужны, поэтому я отказался от понятия файловой системы. И тут же обнаружил Openstack Swift. Это простое хранилище данных.
- Работает через REST-интерфейс (обычный http).
- В случае падения одной из нод, работает без проблем дальше.
- Используется в wikimedia для хранения всяких картинок.
В общем, проект достаточно зрелый. Хотя информации о нём достаточно мало - возможно из-за того, что для работы с ним надо менять код и вместо файловых методов использовать сетевые. Развернул, обнаружил несколько особенностей, которые не сильно повлияли на дальнейшие действия:
1) при большом количестве файлов, он может добавлять порядка 50 файлов в секунду. Для больших скоростей нужен ссд. Ну в обычное время у меня добавляется несколько файлов в минуту. Поэтому до этого предела ещё далеко.
2) полностью рабочая нода - это 15 разных демонов. Вначале немного охреневаешь от такого изобилия. Но со временем понимаешь, что всё чётко и стройно. Просто они, следуя философии unix, разделили разные функции на разные демоны. Во время первоначальной синхронизации, я отключил некоторые демоны и скорость возросла раза в два.
3) первоначальная заливка всего контента заняла порядка 2 недель неспешного копирования. Днём копирование отрубалось, чтобы не мешать реактору работать.
Итак, результаты:
1) уже 3 недели все новые картинки заливались в свифт. При чтении иногда они брались с диска, иногда - из свифта.
2) с начала этой недели картинки читались только из свифта. Они ещё писались на диск на всякий случай, но не читались
3) с сегодняшнего утра всё полностью перешло на свифт. На диск больше не пишется и не читается. В последний раз забэкаплю и на след.неделе удалю с боевых серверов.
Таким образом, я избавился от одной из трёх точек отказа. Ура!
Ну и всякие дополнительные мелочи:
1) во время переноса свифта обнаружил, что картиночный сервер упирается в канал 100Мбит в часы пик. Вовремя я начал чесаться по поводу его переноса... =)
2) следующая точка отказа, которую надо будет устранять, - mysql. Раньше думал, что придётся переходить на postgresql, ибо в мускуле всё плохо с репликацией, failover и вообще версия 5.5 (которая появилась после покупки ораклом) у них очень плохая вышла. Коммуна была расстроена и считала, что оракл убьёт мускуль. Но в феврале этого года вышла версия 5.6, которая удивительно хорошо работает - быстрее 5.5, добавлены фичи для репликации из коробки, для php выпустили плагин с load-balancing и failover. В общем, похоже мускуль воскрес из мёртвых и мне это нравится, ибо не хочется переучиваться на постгрю.
3) написал хостеру, что наблюдаю днём пакетлост 0.1%, а по вечерам наблюдаю пакет-лост 0.5%. На удивление, не послали нахрен, а начали разбираться. Хоть и достаточно вяло.
4) после того, как перешёл на swift, на серверах стало нехватать памяти (всего 16Гб). Пришлось перейти с apache на nginx+php-fpm. Из-за того, что фротэнд держал с бэкэндами keel-alive соединения, получил выигрыш в памяти в 3 раза - 300 Мб вместо 1Гб.
5) настроил себе в заббиксе красивые картинки. Теперь если что-то торимозит - я не бегаю по серверам, а запускаю один экран и всё сразу видно:
В это время тестировался gfs2. Но он оказался: во-первых, плохо масштабируемым; во-вторых, достаточно медленным; в-третьих, ооочень сложным и глючным. Явно не расчитан на "commodity hardware".
Я пустился в размышления - почему же это так сложно и тормознуто. Ведь задача простая - хранить файл в нескольких копиях на разных серверах + как-нибудь сохранить где именно он хранится. При желании, это реализуется достаточно просто и быстро даже вручную.
И тут я понял основную ошибку - я искал файловую систему. А в ней не просто хранение, но ещё и система прав и лок файлов. Они мне не были нужны, поэтому я отказался от понятия файловой системы. И тут же обнаружил Openstack Swift. Это простое хранилище данных.
- Работает через REST-интерфейс (обычный http).
- В случае падения одной из нод, работает без проблем дальше.
- Используется в wikimedia для хранения всяких картинок.
В общем, проект достаточно зрелый. Хотя информации о нём достаточно мало - возможно из-за того, что для работы с ним надо менять код и вместо файловых методов использовать сетевые. Развернул, обнаружил несколько особенностей, которые не сильно повлияли на дальнейшие действия:
1) при большом количестве файлов, он может добавлять порядка 50 файлов в секунду. Для больших скоростей нужен ссд. Ну в обычное время у меня добавляется несколько файлов в минуту. Поэтому до этого предела ещё далеко.
2) полностью рабочая нода - это 15 разных демонов. Вначале немного охреневаешь от такого изобилия. Но со временем понимаешь, что всё чётко и стройно. Просто они, следуя философии unix, разделили разные функции на разные демоны. Во время первоначальной синхронизации, я отключил некоторые демоны и скорость возросла раза в два.
3) первоначальная заливка всего контента заняла порядка 2 недель неспешного копирования. Днём копирование отрубалось, чтобы не мешать реактору работать.
Итак, результаты:
1) уже 3 недели все новые картинки заливались в свифт. При чтении иногда они брались с диска, иногда - из свифта.
2) с начала этой недели картинки читались только из свифта. Они ещё писались на диск на всякий случай, но не читались
3) с сегодняшнего утра всё полностью перешло на свифт. На диск больше не пишется и не читается. В последний раз забэкаплю и на след.неделе удалю с боевых серверов.
Таким образом, я избавился от одной из трёх точек отказа. Ура!
Ну и всякие дополнительные мелочи:
1) во время переноса свифта обнаружил, что картиночный сервер упирается в канал 100Мбит в часы пик. Вовремя я начал чесаться по поводу его переноса... =)
2) следующая точка отказа, которую надо будет устранять, - mysql. Раньше думал, что придётся переходить на postgresql, ибо в мускуле всё плохо с репликацией, failover и вообще версия 5.5 (которая появилась после покупки ораклом) у них очень плохая вышла. Коммуна была расстроена и считала, что оракл убьёт мускуль. Но в феврале этого года вышла версия 5.6, которая удивительно хорошо работает - быстрее 5.5, добавлены фичи для репликации из коробки, для php выпустили плагин с load-balancing и failover. В общем, похоже мускуль воскрес из мёртвых и мне это нравится, ибо не хочется переучиваться на постгрю.
3) написал хостеру, что наблюдаю днём пакетлост 0.1%, а по вечерам наблюдаю пакет-лост 0.5%. На удивление, не послали нахрен, а начали разбираться. Хоть и достаточно вяло.
4) после того, как перешёл на swift, на серверах стало нехватать памяти (всего 16Гб). Пришлось перейти с apache на nginx+php-fpm. Из-за того, что фротэнд держал с бэкэндами keel-alive соединения, получил выигрыш в памяти в 3 раза - 300 Мб вместо 1Гб.
5) настроил себе в заббиксе красивые картинки. Теперь если что-то торимозит - я не бегаю по серверам, а запускаю один экран и всё сразу видно:
Подробнее
3 3 3 3 lS 3 3 3 S 3 3 3 Ü3333gg 3 3 3 3 3 3 3 3 1 S 3 3 3 3 g 3 3 3 3 3 3 3 3 ¡ 3 s i S 3 g g 3 3 3 3 3 3 3 3 ! !=Ë Si I I I 1 servl2: CPU Loads (lh) 3 3 3 3 3 ^ 3 3 3 3 3 3 3-ÜÜ 3 3 3 3 3 3 3 3 3 3 3 I Sa Si I I 11 1 SS 3 3 3 1 3 3 3 S S 3 3 3 ^ i i 1 i 3 3 3 3 S 3 3 3 3 3 3 S0 I i :=113 111 I
админские истории,разное,ceph и все все все,openstack swift
Еще на тему
Давно бы так :)
А с репликацией и в постгресе тоже не всё так радужно, по слухам.
З.ы. а я же говорил пробуй на php-cgi перейти, как видишь ресурсы освободились.
Разницы между tcpip и socket по скорости почти нет. Но я уже наталкивался на багу nginx с сокетами. Правда при использовании модуля proxy, а не fastcgi. На данный момент бага не поправлена. Поэтому не хочу проверять, есть ли эта бага в модуле fastcgi ради мифических процентов скорости.
1) модуль proxy и fastcgi работают на совершенно разных протоколах. Первых - на Http. Второй - на cgi
2) Proxy замечательно работает с сокетами. См документацию http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass
Только у них тоже свои велосипеды.
Сорри за некропостинг, но вдруг ещё надо)
я просто вижу несколько вариантов, но хочу услышать рабочий непосредственно)
чем подробнее, тем лучше
По поводу структуры каталогов:
1) они её условно-поддерживают. Можно делать листинг внутри одного каталога и т.д.
2) в моём случае она совершенно не нужна =)
а ты варниш используешь?
варниш на реакторе - не использую. В другом проекте - использую.
Суть такова: есть два сервера, на одном nginx отдающий исключительно статику, на втором вещалка(icecast/airtime/liquidsoap) и апач. Оба с крохотными SSD, тот что с вещалкой помощнее т.к. liquidsoap нещадно жрет ресурсы. С первым все норм, а вот второму нужно много места, где airtime будет хранить медиатеку и вероятно записи эфиров. Хранит он её на жестком диске в 4х каталогах. Вот оно - место проблем.
Естеснно я ищу внешнее хранилище данных, а первыми в глаза лезут у нас сейчас модные облачные сервисы
S3 не может в каталоги и одна тулза охуительнее другой просто(я вчера случайно невидимый каталог, в который зайти можно было, а в листинге его не было), с cloudfuse всё совсем печально(мейнтейнер полебался кудато почти полгода назад, но сегфолт мы ночью побороли).
Я уже на все согласен, хоть ftpfs, лишь бы не масштабируемая параша, непригодная для моих нужд
airtime это такая помесь из пхп(зенд фреймвёрк), питона, ликвидсоап и чьей то матери
Облачные хранилища монтировать заипёшься имхо. У селектела вот список софта для работы со свифтом:
supload Linux (bash) Утилита для загрузки файлов в хранилище
Cyberduck Windows/Mac Комплексная система доступа к облачным хранилищам
FileZilla Windows/Linux/Mac Удобный бесплатный FTP-менеджер
Gladinet Windows Комплексная система доступа к облачным хранилищам
SMEStorage Windows/Mac/Mobile Набор программ для работы с облачным хранилищами
pycloudfuse Linux (fuse) Монтирование облачного хранилища через fuse
CloudFuse Linux (fuse) Монтирование облачного хранилища через fuse
ftp-cloudfs FTP FTP сервер для транслирования ftp запросов к облачному хранилищу
sftp-cloudfs SFTP SFTP сервер для транслирования sftp запросов к облачному хранилищу
swift client Windows/Linux/Mac (python) Утилита для работы с OpenStack Swift совместимыми хранилищами
Эх, как вам хорошо если у вас nfs не становится раком :(
А записи эфиров можно хранить в свифте и сразу отдавать оттуда.
Ночью ржали "Last updated 2 years ago" и такая ситуация почти со всем клиентским фьюз софтом. Вот еще ржака
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=703638
>CloudFuse
Аналогично, 4 месяца тишины. Сегфолт на 386й строке https://github.com/redbo/cloudfuse/blob/master/cloudfsapi.c
Я все же надеюсь найти нормальное хранилище, а не целый сервер, ведь мне нужны только ресурсы жесткого диска и узкий канал, да и за инфраструктуру будет отвечать Вован Суперлинуксадмин, а не я :3 Ну как люди до openstack то жили, неужели никто какой нибудь NAS не продает или типа того
С записями все просто, их запись и складирование - мой liq скрипт, в свифт положить смогу.
Часто хостеры предоставляют услугу бэкапа по фтп. Можешь спросить можно ли этот бэкап использовать для твоих нужд. Может разрешат =)
Подключили sshfs, полет нормальный. 500 гб за 12 баксов
а то ж при серъезном использовании оно должно работать ещё хуже чем nfs по идее.