실용적인 Rsync 백업 도구 및 구성 rsync + inotify Linux 환경에서 실시간 동기화

실용적인 Rsync 백업 도구 및 구성 rsync + inotify Linux 환경에서 실시간 동기화

작성자 : JackTian
마이크로 채널 공개 번호 : IT의 Jiege 여행 (ID : Jake_Internet)

1. Rsync 란 무엇입니까?
Rsync는 오픈 소스 고속 백업 도구입니다. Linux 및 UNIX 운영 체제에 기본적으로 설치되는 구성 요소 중 하나입니다. 서로 다른 호스트간에 전체 디렉터리를 미러링 및 동기화 할 수 있으며 증분 백업 파일 전송을 지원하며 링크 및 권한을 유지하고 최적화 된 사용을 사용합니다. 동기화 알고리즘., 전송 전에 압축을 실행하여 원격 백업, 미러 서버 및 기타 응용 프로그램에 적합합니다.

Rsync 공식 웹 사이트 주소 : https://rsync.samba.org/

실용적인 Rsync 백업 도구 및 구성 rsync + inotify Linux 환경에서 실시간 동기화

2. rsync 소스 서버 구성
원격 동기화 작업에서 rsync 동기화 작업을 시작하는 클라이언트를 개시 자라고하고 클라이언트의 rsync 동기화 작업에 응답하는 서버를 동기화 소스라고합니다.

동기화 프로세스 동안 동기화 소스는 문서의 원래 위치를 제공해야하며 개시자는이 위치에 대한 읽기 권한이 있어야합니다.

실용적인 Rsync 백업 도구 및 구성 rsync + inotify Linux 환경에서 실시간 동기화

iptables 방화벽과 selinux를 끕니다.

# service iptables stop
# setenforce 0

rsync 소스 서버와 rsync 클라이언트의 / etc / hosts 구성 파일이 동일하도록 분석하고 다음과 같이 구성합니다.


# tail -2 /etc/hosts
192.168.31.108  linuxserver.com
192.168.31.226  linuxclient.com

/etc/rsyncd.conf 파일 구성

# vi /etc/rsyncd.conf 

### This is rsyncd.conf 
### By 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
uid = rsync                                      // 使用的用户
gid = rsync                                      // 使用的用户
use chroot = no                                  // 是否使用根目录锁   如果"use chroot"指定为true,那么 rsync 在传输文件以前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以 roots 权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 chroot 值为 true。
max connections = 2000                           // 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试,默认值是 0,也就是没有限制。
timeout = 600                                    // 通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
pid file = /var/run/rsyncd.pid                   // 存放进程 ID 的文件位置
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log                   // 日志文件位置
ignore errors
read only = false                                // 是否为只读
list = false
hosts allow = 192.168.31.0/24                    // 允许访问的客户端 IP 地址范围
hosts deny = 0.0.0.0/32                          // 拒绝访问的客户端 IP 地址范围
auth users = rsync_backup                        // 授权账户
secrets file = /etc/rsync.password               // 存放账户信息的数据文件
#################################
[backup]
path = /backup

rsync 서비스 시작

이때 rsync 서비스를 시작하면 위와 같은 오류가 발생합니다.

# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists

해결 방법 : /var/run/rsyncd.pid 파일을 삭제하고 rsync 서비스를 다시 시작합니다.

# rm -rf /var/run/rsyncd.pid                     // 删除 rsyncd.pid 文件
# rsync --daemon                                 // 再重新启动 Rsync 服务

/etc/rsync.password 파일 생성

# echo “rsync_backup:123456”  >/etc/rsync.password 

/etc/rsync.password 파일이 성공했는지 확인하고 파일 권한을 조정하십시오.

고양이 /etc/rsync.password

rsync_backup : 123.com

chmod 600 /etc/rsync.password

청취 서비스 포트.

# pgrep rsync
5081
5125
# netstat -lntup|grep rsync
tcp        0      0 192.168.31.108:873          0.0.0.0:*                   LISTEN      5081/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      5125/rsync    

rsync를위한 올바른 실제 사용자 생성

# useradd -s /sbin/nologin -M rsync
# id rsync
uid=500(rsync) gid=500(rsync) 组=500(rsync)

rsync 푸시에 필요한 디렉터리 만들기

# mkdir /backup
# chown -R rsync.rsync /backup/

3. Rsync 백업 도구를 사용한
rsync 명령의 기본 사용법

대부분의 백업 프로그램은 원래 위치와 대상 위치를 지정해야하며 rsync 명령은 실제로 cp 명령과 유사합니다.

예 : / etc / fstab 파일과 / boot / grub 디렉토리를 / opt 디렉토리에 동기식으로 백업합니다.

-r : 옵션은 전체 디렉토리를 반복하는 것을 의미하고, -l : 옵션은 링크 된 파일을 백업하는 것을 의미합니다.

# rsync /etc/fstab /opt
# rsync -rl /etc/fstab /boot/grub /opt

rsync 명령 형식

기본 형식 : rsync [옵션] 원래 위치 타겟 위치

rsync 명령의 일반적인 백업 옵션

-r : 디렉터리 및 하위 디렉터리의 모든 파일을 포함하는 재귀 모드.

-l : 심볼릭 링크 파일을 심볼릭 링크 파일로 복사합니다.

-v : 동기화 프로세스에 대한 자세한 정보를 표시합니다.

-a : 아카이브 모드, 파일 권한, 속성 및 기타 정보 유지, 조합 옵션은 -rlptgoD와 같습니다.

-z : 파일을 전송할 때 압축합니다.

-p : 파일의 권한 표시를 유지합니다.

-t : 파일의 타임 스탬프를 유지합니다.

-g : 파일의 그룹 표시를 유지합니다. (슈퍼 유저 전용)

-o : 파일의 소유자 표시를 유지합니다. (슈퍼 유저 전용)

-H : 하드 링크 된 파일을 유지합니다.

-A : ACL 속성 정보를 유지합니다.

-D : 장치 파일 및 기타 특수 파일을 유지합니다.

-삭제 : 원래 위치가 아닌 대상 위치에있는 파일을 삭제합니다.

--checksum : 체크섬 (파일 크기, 수정 시간이 아님)을 기준으로 파일을 건너 뛸지 여부를 결정합니다.

구성 소스 표시

원격 동기화 작업을 수행 할 때 rsync 명령은 동기화 소스 서버의 리소스 위치를 지정해야합니다.

두 가지 표현 방법

  • Username @ Host Address :: 공유 모듈 이름 (2 개의 콜론으로 구분)

  • rsync : // username @ host 주소 / 공유 모듈 이름 (URL 주소 형식)

실제 사용자를 사용하여 rsync 서비스 테스트

ssh 포트가 수정 된 경우 포트를 추가해야합니다.

명령 형식 : rsync -parameter file -e'ssh -p port number 'username @ip : directory path


# rsync -avz abc '-e ssh -p 22' [email protected]:/tmp     // 实操命令格式
[email protected]'s password:                              //输入 linuxserver 设备的 root 密码
sending incremental file list
abc

sent 64 bytes  received 31 bytes  27.14 bytes/sec
total size is 0  speedup is 0.00
# ll /tmp                                                    // 查看同步结果
总用量 52
-rw-r--r--. 1 root root    0 12月 30 07:25 abc

실제 프로덕션 환경에서의 백업 작업은 일반적으로 반복적이므로 백업 작업을 완료하기 위해 예약 된 작업을 설정할 수 있습니다. 예 : 매일 아침 04:00에 서버의 tmp 공유 모듈을 동기화하고 로컬 / mnt / jacktian 디렉토리에 다운로드하고 crond 서비스를 통해 완료합니다.

이 동기화 프로세스에서는 암호를 입력하지 않기 때문에 rsync_backup 사용자의 암호를 저장할 암호 파일을 만들어야합니다.

# cat /etc/rsync.password 
rsync_backup:123.com
# chmod 600 /etc/rsync.password 
# ll /etc/rsync.password 
-rw-------. 1 root root 21 12月 30 08:04 /etc/rsync.password

--password-file = / etc / rsync.password 옵션을 사용하여 rsync 동기화를 수행 할 때 지정합니다.

# crontab -e
00 04 * * * /usr/bin/rsync -az --delete --password-file=/etc/rsync.password@[email protected]::tmp /mnt/jacktian
# service crond restart
# chkconfig crond on

4. rsync + inotify 실시간 동기화 구성

실용적인 Rsync 백업 도구 및 구성 rsync + inotify Linux 환경에서 실시간 동기화
Linux는 커널 버전 2.6.13부터 파일 액세스, 삭제, 이동, 수정 등과 같은 파일 시스템의 다양한 변경 사항을 모니터링하기 위해 inotify 알림 인터페이스를 제공했습니다. 이 메커니즘을 사용하여 파일 변경 경고, 증분 백업 및 디렉토리 또는 파일 변경에 대한 적시 대응을 실현할 수 있습니다.

rsync + inotify는 트리거 된 백업을 수행 할 수 있습니다. 문서의 원래 위치가 변경되는 한 증분 백업이 즉시 시작됩니다. 그렇지 않으면 백업시주기의 지연 및 과잉 밀도를 방지하는 자동 대기 상태가됩니다. 고정 된 주기로 올라갑니다.

Inotify는 주로 로컬 모니터링에 사용되며 트리거 된 백업 애플리케이션의 업 링크 동기화에 더 적합합니다.

inotify 메커니즘은 세 가지 제어 매개 변수를 제공합니다.

max_queued_events : 모니터링 이벤트 큐를 나타냅니다.

max_user_instances : 모니터링되는 최대 인스턴스 수

max_user_watches : 인스턴스 당 모니터링되는 최대 파일 수

# cat /proc/sys/fs/inotify/max_queued_events
16384
# cat /proc/sys/fs/inotify/max_user_instances 
128
# cat /proc/sys/fs/inotify/max_user_watches 
8192

inotify 커널 매개 변수 조정

모니터링 할 디렉터리에 많은 수의 파일이 있거나 자주 변경되는 경우이 세 가지 매개 변수의 값을 늘리는 것이 좋습니다.

# vi /etc/sysctl.conf 
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024              
fs.inotify.max_user_watches = 1048576
# sysctl -p

inotify-tools 설치

inotify-tools를 설치하면 주로 inotifywait, inotifywatch 및 변경 사항을 모니터링하고 요약하는 기타 도구가 제공됩니다.


# tar zxf inotify-tools-3.14.tar.gz 
# cd inotify-tools-3.14
# ./configure && make && make install

모니터링 웹 사이트 디렉토리 / var / www / html을 예로 들어, inotifywait 명령을 실행 한 후 다른 터미널에서 / var / www / html 디렉토리의 내용을 변경하십시오.

-e : 모니터링 할 이벤트 지정

-m : 지속적인 모니터링을 나타냅니다.

-r : 전체 디렉토리를 재귀 적으로 나타냅니다.

-q : 단순화 된 출력 정보


# mkdir /var/www/html -p
# inotifywait -mrq -e modify,create,move,delete /var/www/html/

다른 터미널 : / var / www / html / 디렉토리에 파일을 추가하고, 파일을 이동하고, 화면 출력 결과를 추적합니다.


# mkdir /var/www/html/a
# mkdir /var/www/html/b
# mv /var/www/html/b /var/www/html/bb
# rm -rf /var/www/html/a

inotifywait는 수정 (수정), 생성 (생성), 이동 (이동), 삭제 (삭제), 속성 (속성 변경)과 같은 다양한 이벤트를 모니터링하고 변경이있을 때 즉시 결과를 출력 할 수 있습니다. 실행 후 시스템 변경 사항을 수집하고 요약 변경 사항을 출력하는 데 사용할 수 있습니다.

# inotifywait -mrq -e modify,create,move,delete /var/www/html/
fy,create,move,delete /var/www/html/
/var/www/html/ CREATE,ISDIR a
/var/www/html/ CREATE,ISDIR b
/var/www/html/ MOVED_FROM,ISDIR b
/var/www/html/ MOVED_TO,ISDIR bb
/var/www/html/ DELETE,ISDIR a

트리거 된 동기화 스크립트 작성

inotifywait가 출력하는 모니터링 결과에서 레코드의 각 줄에는 변경 사항을 식별 할 수있는 디렉터리, 이벤트 및 파일이 포함되어 있으며 변경 사항이 감지되면 rsync 업 링크 동기화 작업이 실행됩니다.

참고 : 업데이트가 빈번한 경우 rsync 백업의 동시 실행을 피하십시오. rsync 프로세스가 이미있는 경우이 동기화를 무시하거나 rsync 프로세스 수에 따라 동기화할지 여부를 결정하십시오.

스크립트는 로컬 / var / www / html 디렉토리의 변경 사항을 테스트하는 데 사용됩니다. 업데이트되면 rsync 동기화 작업을 트리거하고 서버 192.168.31.108의 / var / www / html 디렉토리에 업로드합니다.

트리거 된 업 링크 동기화 확인 프로세스

1. rsync 도구를 사용하여 업 링크 동기화 수행
2. 머신에서 bak_transfer.sh 스크립트 실행
3. 머신 의 / var / www / html 디렉토리에서 생성, 삭제, 수정 및 기타 작업
4.보기 / var / www / html 디렉토리의 서버 변경;

# vi bak_transfer.sh   
# This is bak_transfer.sh
# 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete /var/www/html/ [email protected]:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
        if [ $(pgrep rsync | wc -l) -le 0 ]
        then
                $RSYNC_CMD
        fi
done

# chmod +x bak_transfer.sh
# ./bak_transfer.sh
# echo "/bin/bash /root/bak_transfer.sh" >> /etc/rc.local 

Rsync 시작 예외 솔루션 요약
오류 : pid 파일을 만들지 못했습니다. /var/run/rsyncd.pid : 파일이
있습니다. 솔루션 : rm /var/run/rsyncd.pid
시작 서비스 : rsync --daemon --config = / etc / rsyncd. conf

오류 : rsync : IP 주소에 연결하지 못했습니다. 연결 거부 (111)
rsync 오류 : clientserver.c (124) [receiver = 3.0.5]의 소켓 IO (코드 10)에 오류가 있습니다.
솔루션 : 서비스 시작 : rsync- 데몬 --config = / etc / rsyncd.conf

오류 : rsync : IP 주소에 연결하지 못했습니다 : 연결 시간 초과 (110)
rsync 오류 : clientserver.c (124) [receiver = 3.0.5]의 소켓 IO (코드 10) 오류
해결 방법 : 원인은 다음과 같습니다. iptables 방화벽이 켜져 있음 통신 할 수 없습니다. 포트 873을 허용하도록 규칙을 설정하거나 방화벽을 직접 닫을 수 있습니다.

오류 : @ERROR : chroot 실패
rsync : 연결이 예기치 않게 닫힘 (지금까지 읽은 75 바이트)
rsync 오류 : io.c (150)의 rsync 프로토콜 데이터 스트림 (코드 12) 오류
해결 방법 : rsync.conf에 설정된 경로가 올바르지 않습니다. 존재합니다. 새 디렉토리를 만들어야합니다.

추천

출처blog.51cto.com/15067236/2605030