|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Привет друзья. Придумал следующее. Не продуктовая задача. А так. Для себя. Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс. Но надо минимизировать трафик. Особенности данной задачи: 1. Бэкап достаточно большой (100-300 Гб файлов россыпью). 2. Файлы изменяются внутри мало. Вангую 1-5%. Размер файлов обычно не меняется. 3. Предпочтителен HTTP. Он удобнее чем NFS/Cifs потому как "пробить дырку" в сетях по 80 порту всегда проще. Я мог бы использовать wget -c но он детектирует размер но не содержание. Я мог бы добавлять к каждому скачиваемому файлу контрольную сумму md5 но сделать с клиента это невоможно т.к. подсчет md5 эквивалентен скачиванию. Тоесть нужен умный сервер. Задумался об утилите rsync. Она подходит идеально когда вы синхронизируете локальные фолдеры либо фолдеры шареные по файловым протоколам. Но rsync не работает по http. Из базовых возможностей http есть опция range. Код: sql 1. 2. 3.
Но не хватает больше серверной и клиенствой логики которая делает всю работу. Думал об тегах eTag, If-Modified-Since. Но они расчитанные на полное опциональное скачиванеи небольших файлов. Мне не подходят. Задача тематически связана с брейнштормом по поводу репликаций https://www.sql.ru/forum/1322059/offlayn-tyapnichnaya-replikaciya хотя я уже от нее частично отказался. Безперспективно. Но если будете поднимать - я не против. Линки по теме которые я начал читать. http://www.webdav.org/ http://www.opennet.ru/man.shtml?category=1&russian=0&topic=rsync https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since P.S. Go-go думать. Сроков у задачи нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 18:51 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton "пробить дырку" в сетях по 80 порту всегда проще. mayton Но rsync не работает по http. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 19:17 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Это все - неважно. Давайте искать возможности а не причины. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 19:41 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Это все - неважно. Давайте искать возможности а не причины. Кроме того, в википедии по rsync упоминаются zsync и rclone, которые могут работать по http. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 19:52 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Спасибо. Пойду читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 19:57 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton, Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота. Подымаешь свой HTTP сервак, который помимо отдачи файлов умеет отдавать метаданные по ним, те же размер и дату изменения. Роутинг примерно такой получится: Код: plaintext 1. 2.
Опрашиваешь сначала эти метаданные (GET /meta), сравниваешь, с тем, что у тебя локально и заливаешь только то, что изменилось (GET /file/:fileName), опционально удаляешь файлы, по которым нет инфы м метаданных. Если хочется упороться по MD5, то его можно попробовать прямо встремить в процедуру бэкапа, алгоритм то поточны, например указав утилите бэкапа выводить результат в STDOUT и сделать сплит пайпов типа так Код: plaintext 1.
Все! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 06:58 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 mayton, ..... Подымаешь свой HTTP сервак ...... В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh. Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 12:28 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
OoCc dimonz80 mayton, ..... Подымаешь свой HTTP сервак ...... В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh. Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 13:42 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 mayton, Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота. Почему у меня односторонняя передача? У меня есть рабочая станция дома. И есть ноубук на даче. Поработал дома. Чего-то залил в git. Но в git нельзя залить базы. Базы надо лить либо через гуглдрайвы либо через AWS S3. Естественно я сразу это откинул ибо 1) Лишний траф. 2) Не спортивно. И передача не односторонняя потому что роли меняются. Сначала (1) -> (2). Потом наоборот (2) -> (1) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 13:51 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 OoCc пропущено... В таком случае лучше поднять SSH сервак ибо он намного плезнее для подобного рода задачь, а rsync работает через ssh. Вот ещё майтону на почитать http://www.ijsrp.org/research-paper-1115/ijsrp-p4786.pdf Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!))) Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно. Золото... как вы понимаете намывается из песка. Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю задачи безо всякого бизнес смысла. Так. Головоломка. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 13:54 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton dimonz80 mayton, Че ты мутишь, какой rsync? У тебя же односторонняя передача, ты на сервак с бэкапами ничего с локального компа синхронизировать не должен, должен только синхронизировать локальный комп с серваком, игра в одни ворота. Почему у меня односторонняя передача? У меня есть рабочая станция дома. И есть ноубук на даче. Поработал дома. Чего-то залил в git. Но в git нельзя залить базы. Базы надо лить либо через гуглдрайвы либо через AWS S3. Естественно я сразу это откинул ибо 1) Лишний траф. 2) Не спортивно. И передача не односторонняя потому что роли меняются. Сначала (1) -> (2). Потом наоборот (2) -> (1) Про гит в начале ничего не было Тогда берем httpd/nginx, прикручиваем webdav для gita (типа как тут https://gitirc.eu/howto/setup-git-server-over-http.html ) и подбираем модуль для работы с файлами чтобы и файлы отдавал и список файлов с атрибутами, ну или сам на PHP херак-херак и готово. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 14:26 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton dimonz80 пропущено... Топикстартер кем себя считает - программистом или админом? Если последним, то тогда да, скачал готовенькое - сконфигурил - запустил - PROFIT!!!, а если считает себя тру программером, то пусть идет и программирует свой сервак!))) Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно. Золото... как вы понимаете намывается из песка. Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю задачи безо всякого бизнес смысла. Так. Головоломка. Да я тебя еще по топику про схлопывание графов запомнил. Ты - всяко шпион, пылесосишь идеи по форумам, а мы лопухи тут перед тобой распинаемся))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 14:30 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 Подымаешь свой HTTP сервак, который помимо отдачи файлов умеет отдавать метаданные по ним, те же размер и дату изменения. Вообще-то для этого в HTTP есть запрос HEAD, который поддерживается всеми и городить уже ничего не нужно. Но проблема не в этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 14:55 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 mayton пропущено... Скорее второе. Но я ознакомлюсь с готовыми тулзами однозначно. Золото... как вы понимаете намывается из песка. Да и еще не раздражайся сильно. Ты просто мои другие топики не видел. Я периодически подкидываю задачи безо всякого бизнес смысла. Так. Головоломка. Да я тебя еще по топику про схлопывание графов запомнил. Ты - всяко шпион, пылесосишь идеи по форумам, а мы лопухи тут перед тобой распинаемся))) Вот так поворот! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:01 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Давайте искать возможности Берёшь на одном конце новый бэкап и создаёшь для него торрент-файл. На другом конце берёшь старый бэкап и новый торрент-файл. Пинаешь торрент-клиент, он проверяет контрольные суммы каждого блока в файле и несовпадающие помечает как инвалидные, после чего лезет к пиру и скачивает эти блоки. Профит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:04 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov mayton Давайте искать возможности Берёшь на одном конце новый бэкап и создаёшь для него торрент-файл. На другом конце берёшь старый бэкап и новый торрент-файл. Пинаешь торрент-клиент, он проверяет контрольные суммы каждого блока в файле и несовпадающие помечает как инвалидные, после чего лезет к пиру и скачивает эти блоки. Профит. Да. Идею с торрентом я обдумывал. Хлопотно. И несекюрно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:07 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс. Но надо минимизировать трафик. Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный. PS Еще передаваемое запаковать можно ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:15 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Dima T mayton Периодически думаю о том как сливать холодный backup от Oracle/PGSql через веб интерфейс. Но надо минимизировать трафик. Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный. PS Еще запаковать можно Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff. Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге. Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для 300 Гигабайтной БД я никогда не получу ответа по bsdiff. Мне нужно - линейное время. Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс между bsdiff которые смотрят "слишком глубоко" и анализируют вставки новых блобов в файл. Мне это не нужно т.к. в большинстве случаев (99%) изменения в БД трекают не вставками а update-s кусочков файлов (обычно 4-8К) так называемых db-blocks. Кстати для e-Mule хеш вычислялся какраз следующим образом. Для файлов меньше 16 мегабайт просто брался MD4 от тела файла. Для файлов больше - файл бился на некоторое число фрагментов которые хешировались опять-же через MD4 и потом уже их хеши еще раз хешировались через MD4 и финальный линк был таков. Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c). Эта схема дает почти 0 коллизий. Ну да бох с ним. Ослик умер и умер. Главное что такая схема подозрительно напоминает Дерево Меркла. Только не бинарное. И с 1 уровнем вложенности. Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер. Которого еще нет. И который я напишу. Или как "инфо-шпион", вытащу эти знания из димона80 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:29 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Dima T пропущено... Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный. PS Еще запаковать можно Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff. Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге. Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для 300 Гигабайтной БД я никогда не получу ответа по bsdiff. Мне нужно - линейное время. Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс между bsdiff которые смотрят "слишком глубоко" и анализируют вставки новых блобов в файл. Мне это не нужно т.к. в большинстве случаев (99%) изменения в БД трекают не вставками а update-s кусочков файлов (обычно 4-8К) так называемых db-blocks. Кстати для e-Mule хеш вычислялся какраз следующим образом. Для файлов меньше 16 мегабайт просто брался MD4 от тела файла. Для файлов больше - файл бился на некоторое число фрагментов которые хешировались опять-же через MD4 и потом уже их хеши еще раз хешировались через MD4 и финальный линк был таков. Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c). Эта схема дает почти 0 коллизий. Ну да бох с ним. Ослик умер и умер. Главное что такая схема подозрительно напоминает Дерево Меркла. Только не бинарное. И с 1 уровнем вложенности. Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер. Которого еще нет. И который я напишу. Или как "инфо-шпион", вытащу эти знания из димона80 Дык эта... Для PG ваще можно заюзать архивирование WAL. Типа сначала pg_basebackup + прописать в кофиге чего с WAL делать хоть чтоб само куда надо высылалось, хоть на почту. Там прям в доке по PG все описано. Безо всяких rsynс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:34 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Ладно. Щас пойду по делам. Потом проведу след. Эксперимент. Сделаю копию мой PGsql БД. Там сейчас лежат только 2 крупных таблицы. Ошметки одной из БД. Загружу в нее что-то и посчитаю общие цифры. Типа сколько Гигов было. Сколько Стало. И сколько 4к блочков обновилось. Эта high-level информация даст пищу для размышлений. Особенно по тому что делать дальше. Next steps... Если в топик набегут Постгресщики и будут меня бить - я не буду сопротивлятся. Я не спец в этой dbms. Я админил Оракл а не PG. Просто PG попалась под руку. А предположения о блочном изменении - просто эвристика которая не влияет на корректность моего алгоритма а может просто повлиять на степень сжатия инкрементального бэкапа. Даже если я ошибся и парсил не data-файл а какой-то другой бинарник - все равно при восстановлении он будет восстановлен корректно. Просто с избыточным количеством инкрементальной ифны например. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:35 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
dimonz80 Дык эта... Для PG ваще можно заюзать архивирование WAL. Типа сначала pg_basebackup + прописать в кофиге чего с WAL делать хоть чтоб само куда надо высылалось, хоть на почту. Там прям в доке по PG все описано. Безо всяких rsynс. Ну вот видишь как хорошо что мы с тобой тут чай пьем и беседуем. Спасибо. Но я выпью свою чашу до дна с твоего позволения. Про hot-backup я не забуду и тоже его включу в свои бенчмарки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:38 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Dima T пропущено... Может diff ? Хранить текущий и предыдущий бэкап, получать разницу и ее заливать, на той стороне накатывать. Трафик будет минимальный. PS Еще запаковать можно Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff. Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге. Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для 300 Гигабайтной БД я никогда не получу ответа по bsdiff. Мне нужно - линейное время. Я сейчас думаю что для меня - хеши для фрагментов это хороший компромисс между bsdiff которые смотрят "слишком глубоко" и анализируют вставки новых блобов в файл. Мне это не нужно т.к. в большинстве случаев (99%) изменения в БД трекают не вставками а update-s кусочков файлов (обычно 4-8К) так называемых db-blocks. Кстати для e-Mule хеш вычислялся какраз следующим образом. Для файлов меньше 16 мегабайт просто брался MD4 от тела файла. Для файлов больше - файл бился на некоторое число фрагментов которые хешировались опять-же через MD4 и потом уже их хеши еще раз хешировались через MD4 и финальный линк был таков. Конкатенация MD4(MD4(fraqment(1),MD4(fraqment(2),....e.t.c). Эта схема дает почти 0 коллизий. Ну да бох с ним. Ослик умер и умер. Главное что такая схема подозрительно напоминает Дерево Меркла. Только не бинарное. И с 1 уровнем вложенности. Вот на этот блочный режим я и хочу затачивать свой http-rsync сервер. Которого еще нет. И который я напишу. Или как "инфо-шпион", вытащу эти знания из димона80 Еще можно посмотреть в сторону всяких реплицируемых ФС типа DRDB или DFS, что умеет снапшоты и репликацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:38 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff. Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге. Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для 300 Гигабайтной БД я никогда не получу ответа по bsdiff. Мне нужно - линейное время. Потести, вроде относительно быстро работает. В принципе внутри бэкапа одни и те же страницы на одних и тех же местах. В один проход можно сравнить, а разницу писать в каком-нибудь самодельном формате. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:41 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
mayton Потом проведу след. Эксперимент. Сделаю копию мой PGsql БД. Там сейчас лежат только 2 крупных таблицы. Ошметки одной из БД. Если не путаю PGSql хранит версионные данные, т.е. выполняя update записи таблицы фактически создается новая на уровне файловой системы, а старая как-то помечается ненужной. И так он гадит при каждом update. Поэтому периодически нужно делать VACUUM , который как минимум ненужные помечает как свободное место, как максимум сдвигает данные внутри файла. При интенсивных update в первом случае придется обновлять этот мусор в копии, во втором можно словить полное изменение БД на файловом уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:48 |
|
Средовый Rsync через http
|
|||
---|---|---|---|
#18+
Dima T mayton Да. В топике пятничных графов мы обсуждали BSD-шную утилиту bsdiff. Она работает с бинарями. Я проверю ее на своем PG_DATA home каталоге. Мне просто будет интересно узнать ее complexity. Если оно квадратично - то для 300 Гигабайтной БД я никогда не получу ответа по bsdiff. Мне нужно - линейное время. Потести, вроде относительно быстро работает. В принципе внутри бэкапа одни и те же страницы на одних и тех же местах. В один проход можно сравнить, а разницу писать в каком-нибудь самодельном формате. Идея конечно здравая, только diff в общем случае строит матрицу NxM где N и M - размеры сравниваемых файлов. Если единицей сравнения будет байт, то все будет плохо, лучше бить на более крупные блоки. Ну и не накосячить при накатывании патча. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:52 |
|
|
start [/forum/topic.php?fid=16&tid=1339704]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 391ms |
0 / 0 |