Синхронізація мільйонів файлів між двома серверами Linux


10

У мене є сервер, який експортує каталог, що містить ~ 7 мільйонів файлів (переважно зображень) зі свого локального диска, до мережевих клієнтів через NFS .

Мені потрібно додати другий заради НА, і щоб він не синхронізувався з першим з якомога меншою кількістю дельти між двома.

Дослідження пропонують використовувати для цього рішення lsyncd або інші рішення, засновані на inotify , але враховуючи кількість файлів, які створюють годинник inotify займає вічність. Те ж саме для rsync .

Інші можливі рішення , як видається, drdb , або кластер файлових систем , такі як Ceph або GlusterFS , але у мене немає досвіду роботи з тими , і не знаю , який з них буде більш доречно і добре справляються з такою кількістю файлів і по- , як і раніше забезпечують гідну продуктивність.

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


2
DRDB працює чудово і простий у налаштуванні та розумінні під час налаштування кластеру на 2 машинах; однак це не буде масштабом найближчим часом. Можуть бути й інші підходи до цього питання. highscalability.com/blog/2012/6/20/…
Rui F Ribeiro

Ви намагалися запуститись rsyncв демон-режимі? Це прискорить початкове генерування списку файлів при виконанні rsyncкоманди, але буде інтенсивним оперативною пам’яттю залежно від кількості файлів.
Томас

скільки затримки ви можете терпіти? якщо ви можете терпіти кілька хвилин (або більше), використовуючи btrfsабо zfsможе бути варіант, поєднаний із завданням cron, щоб створити знімки та / zfs sendабо btrfs sendїх на резервному сервері. набагато швидше і набагато легше навантаження (як для відправника, так і для приймача), ніж rsync, оскільки знімок + відправка не потребує порівняння часових міток файлів або контрольних сум.
cas

BTW, з ceph ви також отримуєте можливість використовувати його як сховище об'єктів (наприклад, як s3 Amazon або швидкий Opentacks) замість файлової системи. Насправді, цефірська фіксація насправді є шаруватою поверх її магазину об'єктів.
cas

@Thomas: rsync -aвикористання демона (у вихідному коді) займає 200 хвилин для завершення, що більше, ніж прийнятно. @cas: btrfs sendможливо, варто сфотографуватись . Я не можу перейти до магазину об'єктів, оскільки я не розробник програми, яка використовує файли.
user60039

Відповіді:


1

Я схильний запропонувати реплікацію, яка є агностичною, як drbd. Велика кількість файлів призведе до того, що все, що працює на більш високому рівні, ніж "блокування сховища", витратить непотрібну кількість часу, гуляючи по дереву - як ви виявили, використовуючи rsync або створюючи інотифікувати годинник.

Коротка версія моєї особистої історії, що підкріплює це: я не використовував Ceph, але я впевнений, що це не в їх основній ринковій цілі на основі його подібності з Gluster. Однак я останні кілька років намагаюся реалізувати подібне рішення з Gluster. Більшу частину цього часу він працював і працює, хоча кілька основних оновлень версій, але проблем у мене не було. Якщо ваша мета - більше резервування, ніж продуктивність, Gluster може бути не гарним рішенням. Особливо якщо у вашому шаблоні використання багато дзвінків stat (), Gluster не дуже добре реплікації. Це тому, що статичні виклики на реплікувані томи йдуть до всіх реплікуваних вузлів (насправді "цегли", але ви, мабуть, просто матимете одну цеглу на хоста). Якщо у вас є двостороння репліка, наприклад, кожен stat () від клієнта чекає відповіді з обох цеглин, щоб переконатися, що він використовує поточні дані. Тоді у вас також є надмірні витрати FUSE та відсутність кешування, якщо ви використовуєте натиснуту файлову систему gluster для надмірності (а не використовувати Gluster як резервну програму з NFS як протоколу та automounter для надмірності, який все ще виходить з причини stat ()) . Однак Gluster дуже добре працює з великими файлами, де ви можете поширювати дані на декілька серверів; видалення та розповсюдження даних працює добре, оскільки це дійсно для чого. І новіша реплікація типу RAID10 виконує кращі результати, ніж старі прямі реплікації томів. Але, виходячи з того, що я гадаю, це ваша модель використання, я б радив цього. Тоді у вас також є надмірні витрати FUSE та відсутність кешування, якщо ви використовуєте натиснуту файлову систему gluster для надмірності (а не використовувати Gluster як резервну програму з NFS як протоколу та automounter для надмірності, який все ще виходить з причини stat ()) . Однак Gluster дуже добре працює з великими файлами, де ви можете поширювати дані на декілька серверів; видалення та розповсюдження даних працює добре, оскільки це дійсно для чого. І новіша реплікація типу RAID10 виконує кращі результати, ніж старі прямі реплікації томів. Але, виходячи з того, що я гадаю, це ваша модель використання, я б радив цього. Тоді у вас також є надмірні витрати FUSE та відсутність кешування, якщо ви використовуєте натиснуту файлову систему gluster для надмірності (а не використовувати Gluster як резервну програму з NFS як протоколу та automounter для надмірності, який все ще виходить з причини stat ()) . Однак Gluster дуже добре працює з великими файлами, де ви можете поширювати дані на декілька серверів; видалення та розповсюдження даних працює добре, оскільки це дійсно для чого. І новіша реплікація типу RAID10 виконує кращі результати, ніж старі прямі реплікації томів. Але, виходячи з того, що я гадаю, це ваша модель використання, я б радив цього. який все ще смокче з причини stat (). Однак Gluster дуже добре працює з великими файлами, де ви можете поширювати дані на декілька серверів; видалення та розповсюдження даних працює добре, оскільки це дійсно для чого. І новіша реплікація типу RAID10 виконує кращі результати, ніж старі прямі реплікації томів. Але, виходячи з того, що я гадаю, це ваша модель використання, я б радив цього. який все ще смокче з причини stat (). Однак Gluster дуже добре працює з великими файлами, де ви можете поширювати дані на декілька серверів; видалення та розповсюдження даних працює добре, оскільки це дійсно для чого. І новіша реплікація типу RAID10 виконує кращі результати, ніж старі прямі реплікації томів. Але, виходячи з того, що я гадаю, це ваша модель використання, я б радив цього.

Майте на увазі, що вам, мабуть, доведеться знайти спосіб провести головні вибори між машинами або здійснити розподілене блокування. Рішення пристроїв спільного блоку потребують файлової системи, яка обізнана з багатьма майстрами (як GFS) або вимагає, щоб лише один вузол монтував файлову систему зчитування-запису. Файлові системи взагалі не люблять, коли дані змінюються на рівні блоку пристроїв під ними. Це означає, що ваші клієнти повинні мати можливість сказати, хто є головним, і направити туди запити на запис. Це може виявитися великою неприємністю. Якщо GFS та вся його підтримуюча інфраструктура є варіантом, drbd в режимі мульти-мастер (вони називають це "подвійний первинний") може працювати добре. https://www.drbd.org/en/doc/users-guide-83/s-dual-primary-mode для отримання додаткової інформації про це.

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


Я перебуваю на початкових стадіях переходу з команд rsync в cron до використання розподіленої файлової системи. Якщо Gluster запускає stat () на всі цегли, мені може знадобитися переглянути його як рішення.
Єзусавр

1
Це лише випадок у реплікуванні файлової системи; він працює stat()на всіх цеглинах, які містять репліки конкретного блоку, який ви дивитесь. Наприклад, якщо у вас є смугаста репліка 2x2, statто біг би виконувався на двох цеглинах з повторюваним блоком, але не на двох інших. У моїй програмі з великою кількістю невеликих файлів (на замовлення мільйона файлів під 4K даних у кожному) ні NFS, ні FUSE не забезпечили хорошої продуктивності на тиражуваних томах. А геореплікація до ~ 20 машин була дуже ненадійною у кількох конфігураціях.
dannysauer

1
Ваш пробіг може відрізнятися, але я переміщувався з Gluster скрізь (що я використовував виключно для реплікації, а не для всіх інших дійсно крутих речей, які Gluster насправді справляється добре), щоб rsync на рідних файлових системах. :) Зараз я дивлюсь на перехід до lsyncd ( github.com/axkibe/lsyncd ) замість крона , тому я можу вблизитись до реального часу без накладок Gluster.
dannysauer

0

Я перейшов з rsync на ceph за допомогою програми Proxmox VE.

Зараз я керую 14TB в одному кластері з живою реплікацією. Майже 4 роки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.