удаленная синхронизация rsync для распределенных приложений

1. Знания о rsync 
1.1 Введение
в rsync rsync (Remote Sync, удаленная синхронизация) — это инструмент быстрого резервного копирования с открытым исходным кодом, который может отражать и синхронизировать все дерево каталогов между различными хостами, поддерживает инкрементное резервное копирование, поддерживает ссылки и разрешения и принимает Оптимизированный алгоритм синхронизации выполняет сжатие перед передачей, поэтому он очень подходит для удаленного резервного копирования, зеркального сервера и других приложений.

URL-адрес официального сайта rsync: rsync.samba.org/

1.2 функции rsync

Поддержка копирования специальных файлов, таких как файлы подключения, устройства и т. д.

Может иметь функцию исключения синхронизации указанных файлов или каталогов, что эквивалентно функции исключения команды упаковки tar.

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

Можно реализовать инкрементную синхронизацию, то есть синхронизируются только измененные данные, поэтому эффективность передачи данных очень высока (tar-N).

Для передачи файлов можно использовать rcp, rsh, ssh и т. д. (сам rsync не шифрует данные).

Файлы и данные (сервер и клиент) могут передаваться через сокет (режим процесса).

Он поддерживает анонимную аутентификацию в режиме реального времени (пользователь системы не требуется) и передачу в режиме процесса, что позволяет реализовать удобное и безопасное резервное копирование и зеркалирование данных.
 

 1.3 исходный сервер синхронизации rsync

В задаче удаленной синхронизации клиент, ответственный за инициирование операции синхронизации rsync, называется инициатором, а сервер, ответственный за ответ на операцию синхронизации rsync от клиента, называется источником синхронизации.

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

1.4 Различия между scp и rsync
(1) Функциональный пробел 
Удаленная копия rsync может быть присоединена с помощью мягкой/жесткой ссылки. (параметр -l сохраняет мягкие ссылки, -H сохраняет жесткие ссылки) 

    scp не поддерживает копирование ссылок.

(2) Разница в эффективности 
Простой анализ scp и rsync, первый — копирование, а второй — синхронизация.

    Когда rsync и scp не существуют в папке, время выполнения не сильно отличается, но разница очень велика, когда папка существует. Причина в том, что scp является копией: если целевой файл не существует, он будет создан, а если существует, то будет перезаписан. А rsync это синхронизация, сравните одинаковые ли файлы с обеих сторон, если одинаковые ничего не делайте, если есть разница обновите напрямую.

    Быстрее будет использовать rsync, когда он играет роль синхронизации, и оба можно использовать, когда он играет роль копирования (в месте назначения нет файла). Выберите rsync или scp в зависимости от ситуации.
 

 2. Инструмент rsync использует
базовый формат:

  rsync [параметры] источник назначения пункт назначения

Опция Функция
-r Рекурсивный режим, включая все файлы в каталоге и подкаталогах.
-l Для файлов символических ссылок по-прежнему копируются как файлы символических ссылок.
-v Показать подробную (подробную) информацию о процессе синхронизации.
-z Сжимать при передаче файлов (сжимать).
-режим архива, сохраняющий права доступа к файлам, атрибуты и другую информацию, что эквивалентно опции комбинации "-rlptgop".
-p Сохраняет флаги разрешений для файлов.
-t Сохранять временные метки файлов.
-g Сохранить групповой флаг файла (только для суперпользователей).
-o Сохранить права собственности на файл (только суперпользователь).
-H Сохранить жесткие ссылки на файлы.
-A Сохранить информацию об атрибутах ACL.
-D Сохранить файлы устройств и другие специальные файлы.
--delete Удалить файлы, которые существуют в целевом расположении, но не в исходном.
--checksum Используйте контрольную сумму (вместо размера файла и времени модификации), чтобы решить, следует ли пропускать файлы.
3. Настройте синхронизацию rsync по нисходящему каналу.
Исходный сервер: 192.168.50.25.

Клиент (инициатор): 192.168.50.26

 (  1  )  
Настройка  исходного   сервера   uid = root  gid = root  use chroot = yes # Заключен в исходный каталог  address = 192.168.50.25 # Адрес прослушивания  port = 873 # Порт прослушивания tcp/udp 873, вы можете просмотреть  файл журнала = /var/log/rsyncd через cat /etc /services | grep rsync .log #Расположение файла журнала  pid file = /var/run/rsyncd.pid #Расположение файла, в котором хранится идентификатор процесса  hosts allow = 192.168.50.0/24 #Адрес клиента, которому разрешен доступ . Несколько адресов разделены пробелами.  Dont Compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #Типы файлов, которые больше не сжимаются во время синхронизации  ​[  wwwroot] #Имя общего модуля

















 path = /var/www/html #Фактический путь к исходному каталогу
 comment = Корень документа www.yang.com #Примечание
 только для чтения = yes #Только для чтения. yes означает, что клиент может только читать содержимое каталога, но не писать.
Разрешен только нисходящий канал, восходящий канал запрещен.
 auth users = backuper # Авторизованные учетные записи, несколько учетных записей разделяются пробелами. Авторизованные пользователи, имена пользователей, которым разрешено чтение.
 secrets file = /etc/rsyncd_users.db
 #Файл данных для хранения информации авторизованной учетной записи
 #Если используется анонимный режим, просто удалите элементы конфигурации "auth users" и "secrets file".
 ​#Создайте
 файл данных для резервной учетной записи.
 vim /etc/rsyncd_users.db
 backuper:abc123 #Нет необходимости создавать системного пользователя с таким же именем. backuper — это имя пользователя, а abc123 — пароль.
 ​chmod
 600 /etc/rsyncd_users.db
 
mkdir -p /var/www/html
 ​ #Убедитесь , что все пользователи имеют доступ для чтения к исходному каталогу /var/www/html
 chmod +r /var/www/html/
 ls -ld /var/www/html/
 #Запуск сервисной программы rsync
 rsync --daemon #Запустить службу rsync, запустить
 netstat -anpt | grep rsync
 ​#Закрыть
 службу rsync
 kill $(cat /var/run/rsyncd.pid) 
 rm -rf /var/run/rsyncd.pid
 

(2) Конфигурация инициатора 
 # Загрузите указанные ресурсы в локальный каталог /opt для резервного копирования. Пароль abc123
 Формат
 1: #username@host address::имя общего модуля
 rsync -avz [email protected]::wwwroot /opt/ #wwwroot — это имя общего модуля, пароль abc123
 #backuper указывает, когда я синхронизирую личность пользователя для использования
 #wwwroot представляет модуль, путь синхронизации по умолчанию и некоторые функции будут записаны под модулем, поэтому нам нужно написать только модуль
 #/opt/ относится к каталогу, который синхронизируется в локальном
 формате
 2: # rsync :/имя пользователя@адрес хоста/имя общего модуля
 rsync -avz rsync://[email protected]/wwwroot /opt  /
 


 #Конфигурация формата без взаимодействия:
 echo "abc123" > /etc/server.pass
 chmod
 600 /etc/server.pass #Права доступа к файлу паролей должны быть 600, то есть, кроме владельца, ни у кого больше нет прав на просмотр .
 ​rsync
 -avz --password-file=/etc/server.pass [email protected]::wwwroot /opt/   
  # Синхронизация без секрета  #
   Синхронизация по времени  crontab -e  30 22 * ​​* * /usr/bin/ rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/  #Чтобы не вводить пароль при синхронизации, необходимо создать файл паролей для сохранения пароль пользователя резервного копирования, например, /etc/server.pass. Используйте параметр «--password-file=/etc/server.pass», чтобы указать при выполнении синхронизации rsync.  systemctl  перезапустить crond  systemctl включить crond








 4. Недостаточная регулярная синхронизация  rsync в режиме реального времени (синхронизация по восходящему каналу)
Время резервного копирования фиксированное, задержка очевидна, а производительность в реальном времени плохая.
Когда источник синхронизации не меняется в течение длительного времени, интенсивные периодические задачи
 Преимущество синхронизации в реальном времени заключается
в том, что после изменения источника синхронизации немедленно начать резервное копирование
Пока нет изменений в источнике синхронизации,
 механизм inotify для резервного копирования ядра Linux не будет выполнен
. доступен с версии 2.6.13.Может
отслеживать изменения в файловой системе и реагировать на уведомления.Вспомогательный
софт: inotify-tools

 Инициатор настраивает Inotify
на использование интерфейса уведомлений inotify, который можно использовать для отслеживания различных изменений в файловой системе, таких как доступ к файлам, удаление, перемещение и модификация. С помощью этого механизма очень удобно реализовать оповещения об изменении файлов, инкрементное резервное копирование и своевременно реагировать на изменения в каталогах или файлах.
Комбинация механизма inotify с инструментом rsync может реализовать инициированное резервное копирование (синхронизацию в реальном времени), то есть, пока документ в исходном местоположении изменяется, операция инкрементного резервного копирования будет запущена немедленно; в противном случае оно будет в режиме молчания. состояние ожидания.
Поскольку механизм уведомления inotify предоставляется ядром Linux, он в основном используется для локального мониторинга и больше подходит для восходящей синхронизации при применении в триггерном резервном копировании.
 


Конфигурация исходного сервера резервного копирования для конкретной операции 
Изменить файл конфигурации исходного сервера rsync (источник резервного копирования)

vim /etc/rsyncd.conf
......
только для чтения = нет #Close только для чтения, синхронизация восходящего канала должна быть доступна для записи

kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon    
netstat -anpt | grep rsync

Инициировать настройку сегмента
Настроить параметры ядра inotify 
В ядре Linux механизм inotify по умолчанию предоставляет три управляющих параметра:

max_queue_events (очередь событий мониторинга, значение по умолчанию — 16384),
max_user_instances (максимальное количество экземпляров мониторинга, значение по умолчанию — 128),
max_user_watches (максимальное количество файлов мониторинга на экземпляр, значение по умолчанию — 8192).
Когда количество отслеживаемых каталогов и файлов велико или часто изменяется, рекомендуется увеличить значение этих трех параметров.
 

 Инициатор, установите инструменты inotify,
чтобы использовать механизм inotify, а также необходимо установить инструменты inotify, чтобы предоставить вспомогательные программы инструментов inotifywait и inotifywatch для мониторинга и суммирования изменений.

inotifywait: он может отслеживать различные события, такие как изменение (модификация), создание (создание), перемещение (перемещение), удаление (удаление), атрибут (атриб (изменение атрибута) и т. д., и немедленно выводить результат при изменении .
inotifywatch: его можно использовать для сбора изменений файловой системы и вывода сводных изменений после завершения операции.
 

Необходимо установить пакеты зависимостей: yum install -y gcc gcc-c++ make

cd /opt
 
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
 cd
/opt/inotify-tools-3.14
./configure
make && make install
 #
 Вы можете сначала выполнить команду «inotifywait», а затем открыть это снова Новый терминал добавляет файлы в каталог /data, перемещает
файлы и следует выводу на экран в старом терминале.
 inotifywait -mrq -e modify,create,move,delete/data
 ​#Option
 "-e": Используется для указания, какие события отслеживать
 #Option "-m": Указывает на непрерывный мониторинг
 #Option "-r": Указывает рекурсивный весь каталог
 #Опция "-q": упростить вывод информации

На инициаторе напишите скрипт синхронизации триггера.Обратите 
внимание, что имя скрипта не может содержать строку rsync, иначе скрипт может не сработать

vim /opt/inotify.sh 
 #!/bin/bash ​#
 Определите
 переменные для inotifywait для отслеживания файловых событий в каталоге /data. attrib указывает на изменения атрибута.
 INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete/data"
 ​#Определите
 переменные для выполнения синхронизации восходящего канала rysnc. --delete гарантирует, что содержимое каталогов с обеих сторон согласовано и может быть опущено.
 RSYNC_CMD="rsynC -azH --delete --password-file=/etc/server .pass /data [email protected]::wwwroot/" ​#Используйте
 while
 и read для непрерывного получения результатов мониторинга, а дальнейшая оценка может быть сделано на основе результатов Читать ли выходную запись мониторинга
 $INOTIFY_CMD | при чтении DIRECTORY EVENT FILE 
 do
    #Если rsync не выполняется, запустить немедленно
    if[ $(pgrep rsync | wc -l) -le 0 ];then
         $RSYNC_CMD
    fi
 выполнено
 chmod
 +x
 /opt/inotify.sh
 chmod +x /etc/rc.d/rc.local #Загрузить файл сценария самозапуска
 echo '/opt/inotify.sh' >> /etc/rc.d/rc.local #Добавить автоматическое выполнение при запуске
 #
 Запустить скрипт после (Работает в фоновом режиме)
 cd /opt/
 ./inotify.sh &
 #
 ​Создаем файл на инициаторе и проверяем, есть ли новый на исходном сервере

Если файл для синхронизации относительно большой, а синхронизация относительно медленная, что приводит к сбою последующих файлов и синхронизации, необходимо добавить в скрипт очередь сообщений или буфер: 

 #!/bin/bash
 #Определите переменную
 INOTIEY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data/" для файловых событий в каталоге мониторинга inotifywait
 #Определите переменную для выполнения восходящей синхронизации rsync
 RSYNC_CMD= "rsync - azH --delete --password-file=/etc/server.pass /data/[email protected]::wwwroot/" #
 Используйте while и read, чтобы постоянно получать результаты мониторинга и дополнительно оценивать, являются ли выходные данные читать по результатам Мониторинг записи
 $INOTIEY_CMD | while read DIRECTORY EVENT FILE
 do    
       #Если меньше или равно 0, дождаться окончания его выполнения перед синхронизацией других файлов
       до [ $(pgrep rsync | wc -l) -le 0 ] 
      
       сделать
          сон 1
       выполнено
       $RSYNC_CMD
 выполнено
 

 Проверка эффекта синхронизации 
Приведенный выше сценарий используется для обнаружения изменений в каталоге /data на локальном компьютере.После обновления будет запущена операция синхронизации rsync, которая будет загружена в общий каталог wwwroot на сервере 192.168.50.26.

5. Используйте rsync для быстрого удаления большого количества файлов.Если
вы хотите удалить большое количество файлов под Linux, например, 1 миллион или 10 миллионов, например, кеш nginx /usr/local/nginx/proxy_temp и т. д. , то rm -rf * может оказаться непростым в использовании, потому что ждать приходится долго.

В этом случае мы можем использовать rsync для аккуратной обработки.

rsync фактически использует принцип замены.
 

 # Сначала создайте пустую папку:
 mkdir /home/blank
 ​#Удалите
 целевой каталог с помощью rsync:
 rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/ nginx /proxy_temp
 
 #Целевой каталог скоро будет очищен

Опция Описание

Опция Функция
--delete-до того, как приемник удалит во время передачи
-а архивный режим означает рекурсивную передачу файлов и сохранение всех атрибутов файла
-H сохранять жестко связанные файлы
-v подробный режим вывода
--прогресс отображается во время передачи ПРОЦЕСС ПЕРЕДАЧИ
- -stats показывает статус передачи некоторых файлов

рекомендация

отblog.csdn.net/zl965230/article/details/130803511