Использование GlusterFS для простой репликации

Использование GlusterFS для простой репликации

Вопрос новичка. Мне нужно построить это:

  • /sharedпапка ~500 ГБ файлов, ~1 МБ каждый.
  • Два блока (сервер 1 и сервер 2), соединенные локальной сетью 1 Гбит/с
  • Каждому ящику необходимо получить доступ на чтение и запись к файлам, поэтому они оба являются клиентами.
  • Я хочу, чтобы файлы реплицировались на обоих серверах, чтобы каждый раз, когда файл записывается на одном сервере, тот же файл должен присутствовать на другом.

Мои вопросы по GlusterFS:

  • Он будет дублировать файлы на том же ящике? Например, файлы находятся на /sharedи монтирование в /mnt/shared. Это займет 1 ГБ места на каждом сервере?
  • Вместо этого, следует ли мне использовать файловую систему напрямую, локально записывая на /shared? Работает ли репликация таким образом без монтирования клиента?

Также, если кто-то знает другой способ выполнить эту настройку, я буду очень благодарен. Спасибо заранее.

решение1

На самом деле Gluster идеально подходит для этого сценария. Вы получаете двунаправленную репликацию и возможность монтировать файловую систему с любой машины, что дает вам (теоретически) вдвое большую эффективную емкость ввода-вывода NFS и активную отказоустойчивость в случае отказа одного из ящиков.

Проблема с активным rsync таким способом заключается в блокировке ввода-вывода из-за блокировок файлов. В зависимости от вашего приложения и изменения данных это может быть неактуально или катастрофично! Распределенные файловые системы имеют очень специфическую семантику блокировки, которая не позволяет этого делать. Даже если в настоящее время inotify имеет лучшую блокировку (когда я пробовал в последний раз, ее не было), то ваши доступы к файлам могут блокироваться в зависимости от того, может ли ваша сеть справиться с изменениями. Все это теоретические предостережения, но их стоит рассмотреть в зависимости от того, что делает ваше приложение.

решение2

Мне наконец удалось решить эту проблему с помощью GlusterFS в обоих ящиках. Некоторые вещи, которые я узнал в процессе:

  • Сначала я попробовал стандартную настройку RAID 1. Основная проблема в том, что клиент всегда использует tcp для связи с обоими серверами, даже если один из них находится на одной машине. Поэтому мне нужно изменить клиентские конфигурации, чтобы заменить tpc 'local' том на прямой доступ (storage/posix)
  • Чтобы избежать перегрузки сетевого соединения, каждый клиент считывает локальное хранилище с директивой option read-subvolume. Конечно, чтобы сохранить целостность RAID1, GlusterFS всегда проверяет и другие тома, но сам файл извлекается непосредственно с диска
  • Производительность хорошая, но клиентский процесс, похоже, перегружает память. Я думаю, это связано с объемом быстрого чтения, мне нужно исследовать дальше

Измененная конфигурация клиента:

# Server1 configuration (RAID 1)
volume server2-tcp
    type protocol/client
    option transport-type tcp
    option remote-host server2
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume posix-local
    type storage/posix
    option directory /shared
end-volume

volume locks-local
    type features/posix-locks
    subvolumes posix-local
end-volume

volume brick-local
    type performance/io-threads
    option thread-count 8
    subvolumes locks-local
end-volume

volume mirror-0
    type cluster/replicate
    option read-subvolume brick-local
    subvolumes brick-local server2-tcp
end-volume

.....

Отвечая на оба моих вопроса:

Он будет дублировать файлы на том же компьютере?

Нет, fs монтируется с помощью FUSE. Текущая строка /etc/fstab:

/etc/glusterfs/client.vol /mnt/shared glusterfs по умолчанию 0 0

Вместо этого, мне следует использовать файловую систему напрямую, локально записывая на /shared? Работает ли репликация таким образом без монтирования клиента?

Нет, всегда используйте смонтированные тома для чтения/записи, использование непосредственно файловой системы может привести к несоответствиям.

решение3

Было бы гораздо проще настроитьrsync для активного зеркалированияили просто настроить общий ресурс nfs и заставить их оба извлекать данные с одного и того же диска.

Связанный контент