Есть ли способ отразить два сервера на Ubuntu?


8

Мне было интересно, возможно ли зеркалирование двух серверов, например, вы могли бы загружать файлы на один сервер, а они передавали их на другой сервер и т. Д. Мне более любопытно зеркалирование файлов, оно не должно отражать управление пакетами и настройка (но это было бы круто тоже!)


Зеркальное отображение файлов: Gluster или DRDB; Зеркальное отображение сайта: Лак или HAProxy; Зеркальное отображение БД: кольцевая репликация MySQL или Postgres Replication .; - Большинство серверных пакетов имеют режим работы кластера, или есть обратные прокси, которые позволяют вам это делать.
Том О'Коннор

Ответы:


6

Это очень сильно зависит от работы.

Зачем вам нужно зеркалирование файлов. Хотите ли вы обновить что-то вроде веб-сайта или хранилища контента, где обычно можно периодически обновлять. Или вам нужна синхронизация данных в реальном времени?

Для периодического асинхронного зеркалирования файлов обычно достаточно иметь промежуточную область, в которую вы загружаете все свои данные. И откуда вы распространяете его на серверах. В вашем случае - с двумя серверами - вы можете создать несколько промежуточных файловых ресурсов на srv1, куда вы будете передавать данные (через FTP, NFS, DAV, SFTP и т. Д.), А затем иметь cronjob rsync для файлов в «живых» каталогах srv1 и srv2. В этом случае проще всего использовать rsync - создать пару ключей ssh, которую вы будете использовать для передачи данных и которая авторизована на всех серверах в вашем кластере.

Пример:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

Это должно дать вам основную идею. Конечно, вы захотите обернуть вызовы rsync в некоторых скриптах и ​​реализовать правильную блокировку, чтобы она не запускалась дважды, если синхронизация занимает более 5 минут и т. Д. Кроме того, само собой разумеется, что промежуточная область не является обязательной. Вы также можете синхронизировать srv1: production с srv2: production напрямую. Просто srv2 может показывать данные, которые на 5 минут старше, чем у srv1. Что может быть проблемой, в зависимости от того, как вы балансируете между ними.

Еще один способ асинхронного распространения файлов - это упаковать их как rpm или в ваши файлы deb. Поместите их в центральный репозиторий и сделайте так, чтобы они устанавливали / обновляли с помощью чего-то вроде cfengine, monkey или другого решения на основе шины сообщений. Это имеет приятный побочный эффект от управления версиями развернутых данных, но подходит только для небольших объемов данных, которые вы производите и внедряете сами (например, версии вашего собственного программного обеспечения). Вы не захотите распространять ТБ данных с этим, а также он не подходит для зеркального отображения контента, который меняется с высокой частотой, как каждую минуту или около того.

Если вам нужно реплицировать данные практически в реальном времени, но не обязательно синхронно, вместо того, чтобы вызывать cron каждый раз, вы можете использовать некоторый метод на основе inotify, такой как уже упомянутый incron, для вызова ваших скриптов синхронизации. Другая возможность - использовать Gamin (который также использует inotify, если он присутствует в ядре) и написать свой собственный маленький демон синхронизации. И последнее, но не менее важное: если все файлы загружаются на один сервер, например, через SFTP, вы можете проверить, позволяет ли ваш SFTP-сервер определять ловушки, которые вызываются после определенных событий, таких как загрузка файла. Таким образом, вы можете указать серверу запускать ваш скрипт синхронизации при каждой загрузке новых данных.

Если вам нужно синхронное зеркальное отображение данных в реальном времени, может быть в порядке кластерная файловая система. DRDB уже был назван. Это очень удобно для репликации на уровне блоков и часто используется для высокодоступных настроек MySQL. Вы также можете взглянуть на GFS2, OCFS2, Luster и GlusterFS. Хотя Luster и GlusterFS не очень подходят для установки двух серверов.


DRBD выглядит красиво. Разве плохо использовать это с одним работающим сервером? Например, как это повлияет на живой сервер?
Кайл

Зависит от того, что делает живой Сервер? Это веб-сервер, сервер базы данных, файловый сервер и т. Д.? DRBD выполняет синхронную репликацию со всеми вытекающими отсюда последствиями. В зависимости от того, планируете ли вы использовать Single-primary или Dual-primary, будут применяться определенные ограничения кэширования ввода-вывода (и файловой системы), которые, в свою очередь, влияют на ваши приложения. Для подробностей предлагаю прочитать Руководство пользователя DRBD drbd.org/users-guide-emb, которое очень хорошо написано и объясняет все последствия в мельчайших деталях.
Лукас Лёше

5

В основном у вас есть 3 возможности:

  1. Пусть ваше приложение отправит файлы на оба сервера.
  2. Асинхронная репликация, например, rsync каждые 15 минут (или меньше) с заданием cron
  3. Синхронная репликация в файловой системе (например, GlusterFS ) или уровне блочных устройств (например, DRBD ). Если вы используете репликацию на уровне блочных устройств, вам понадобится файловая система, которая поддерживает распределенную блокировку (например, OCFS2 или GFS2 ), если вы хотите иметь прямой доступ к файлам с обоих серверов одновременно.



1

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

Унисон может хорошо работать для вас, но у меня нет личного опыта.

Запуск Rsync в обоих направлениях с флагами aproprate может работать, но у него есть довольно сложная проблема обработки удаленных файлов без особой обработки, он просто восстанавливает файлы, что хорошо, если вы никогда не удаляете что-либо вроде меня, но немного бедный в противном случае. Это также делает странные вещи, если файл перемещен.

Что бы вы ни делали, если возникнет какая-либо ситуация, когда файлы можно будет одновременно редактировать на обоих концах, у вас есть проблема. Унисон - единственное известное мне решение, которое может изменить это даже близко к удовлетворительному.


Обратите внимание, что упомянутые ниже циклы не будут проблемой для Rsync, так как он поддерживает даты изменения файлов, которые он передает, если установлен правильно.
Thingomy

0

Если это односторонний (я имею в виду, всегда с одного сервера на другой сервер, но не наоборот), вы можете использовать incron. Это как cron, но основано на событиях файловой системы.

Каждый раз, когда файл создается или изменяется, он запускает scp или rsync для другого сервера.

Двунаправленный имеет проблему петель :).


0

это зависит от ваших потребностей ..... У меня очень «дешевая и простая» настройка для кластерных веб-серверов.

у меня просто есть один «файловый сервер» (NFS), где все веб-серверы монтируют следующие каталоги:

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

очень простой и рабочий


0

Клонезилла также может посмотреть, который использует rsync


Не уверен, что клонезилла здесь применима ... хотя, это хорошая утилита.
HopelessN00b
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.