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 показывает статус передачи некоторых файлов