Мне было интересно, возможно ли зеркалирование двух серверов, например, вы могли бы загружать файлы на один сервер, а они передавали их на другой сервер и т. Д. Мне более любопытно зеркалирование файлов, оно не должно отражать управление пакетами и настройка (но это было бы круто тоже!)
8
Ответы:
Это очень сильно зависит от работы.
Зачем вам нужно зеркалирование файлов. Хотите ли вы обновить что-то вроде веб-сайта или хранилища контента, где обычно можно периодически обновлять. Или вам нужна синхронизация данных в реальном времени?
Для периодического асинхронного зеркалирования файлов обычно достаточно иметь промежуточную область, в которую вы загружаете все свои данные. И откуда вы распространяете его на серверах. В вашем случае - с двумя серверами - вы можете создать несколько промежуточных файловых ресурсов на srv1, куда вы будете передавать данные (через FTP, NFS, DAV, SFTP и т. Д.), А затем иметь cronjob rsync для файлов в «живых» каталогах srv1 и srv2. В этом случае проще всего использовать rsync - создать пару ключей ssh, которую вы будете использовать для передачи данных и которая авторизована на всех серверах в вашем кластере.
Пример:
Это должно дать вам основную идею. Конечно, вы захотите обернуть вызовы 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 не очень подходят для установки двух серверов.
источник
В основном у вас есть 3 возможности:
источник
cron + rsync = зеркальные каталоги / файлы
источник
В зависимости от вашего конкретного случая использования - вы можете использовать что-то похожее на DRBD http://www.drbd.org/
источник
Если вы пытаетесь создать решение для резервного копирования здесь (что я лично сделал в почти такой же настройке), будьте осторожны. Существует множество различных типов резервных копий, против которых необходимо выполнить резервное копирование, одно из которых (возможно, самое большое) - добавочное удаление - любая система активной репликации просто скопирует удаление и не потребует никакой безопасности. Для этого ежедневная репликация работает, но это довольно слабый ответ. Попробуйте RSnapshot.
Унисон может хорошо работать для вас, но у меня нет личного опыта.
Запуск Rsync в обоих направлениях с флагами aproprate может работать, но у него есть довольно сложная проблема обработки удаленных файлов без особой обработки, он просто восстанавливает файлы, что хорошо, если вы никогда не удаляете что-либо вроде меня, но немного бедный в противном случае. Это также делает странные вещи, если файл перемещен.
Что бы вы ни делали, если возникнет какая-либо ситуация, когда файлы можно будет одновременно редактировать на обоих концах, у вас есть проблема. Унисон - единственное известное мне решение, которое может изменить это даже близко к удовлетворительному.
источник
Если это односторонний (я имею в виду, всегда с одного сервера на другой сервер, но не наоборот), вы можете использовать
incron
. Это как cron, но основано на событиях файловой системы.Каждый раз, когда файл создается или изменяется, он запускает scp или rsync для другого сервера.
Двунаправленный имеет проблему петель :).
источник
это зависит от ваших потребностей ..... У меня очень «дешевая и простая» настройка для кластерных веб-серверов.
у меня просто есть один «файловый сервер» (NFS), где все веб-серверы монтируют следующие каталоги:
очень простой и рабочий
источник
Клонезилла также может посмотреть, который использует rsync
источник