已整理-rsync+inotify文件实时同步
目录:
语法:rsync [选项...] 源目录 目标目录
功能:同步与复制的差异
复制:完全拷贝源到目标
同步:增量拷贝,只传输变化过的数据
参数详解:
-n: 测试同步过程,不做实际修改
--delete: 删除目标文件夹内多余的文档
-a: 归档模式,相当于-rlptglD
-v: 显示详细操作信息
-z: 传输过程中启用压缩/解压
-r: 递归,包括目录/子目录及所有文件
-l: 保留符号链接文件
-p/-t: 保留文件的权限、时间标记
-o/-g: 保留文件的属主/属组标记
-D: 保留设备文件及其它特殊文件
-e: 基于通道传输
示例:
# rsync -av /opt/ceph-nautilus /opt/arch/ #把ceph-nautilus这个目录同步到/opt/arch这个目录下面,且在目录目录下生成ceph-nautilus目录
# rsync -av /opt/ceph-nautilus/ /opt/arch/ #把ceph-nautilus这个目录里面的文件,同步复制到/opt/arch这个目录下面,不会生成ceph-nautilus目录
# rsync -av --delete /root/repo /opt/arch/ #保持源和目标文件一致,--delete表示删除目标文件夹内多余的文档
# rsync --delete -a -e "ssh -p 22" /null/ ./ #基于ssh安全传输通道传输
rsync user@host:远程目录/
下载: rsync [...] user@host:远程目录 本地目录
上传: rsync [...] 本地目录 user@host:远程目录
示例:
# rsync -av --delete /root/repo root@10.10.16.210:/opt/remote/ #上传至:/opt/remote/目录下
3、rsync实时同步
要求:
【1】、生成公钥与私钥,完成ssh无密码验证;
# ssh-keygen #源主机:ceph-admin,生成/root/.ssh/id_rsa
# ssh-copy-id root@ceph-01 #把公钥复制到:ceph-01:/root/.ssh/authorized_keys 的这个文件中;
源主机: ceph-admin:/root/.ssh/known_hosts 里面内容是源主机登陆目标主机的日志信息;
【2】、监控目录内容变化:
# yum install inotify-tools #安装inotify-tools工具,需要先yum install epel-release 安装epel源
inotifywait #监控程序
基本用法:
inotifywait [选项] 目标文件夹
常用命令选项:
-m: 持续监控(捕获一个事件后不退出)
-r: 递归监控、包括子目录及文件
-q: 减少屏幕输出信息
-e: 指定监视的modify,move,create,delete,attrig等事件类别;
监视文件夹的变化:
# inotifywait -rmq /root/repo/ #另开一个shell窗口,在/root/repo目录下面操作创建文件,可以看到相关的信息输出
/root/repo/ CREATE wowo.txt
/root/repo/ OPEN wowo.txt
/root/repo/ ATTRIB wowo.txt
/root/repo/ CLOSE_WRITE,CLOSE wowo.txt
书写实时同步脚本:
# vim irsync.sh
#! /bin/bash
while inotifywait -rqq /root/repo/ #qq代表屏幕输出
do
rsync -a --delete /root/repo root@ceph-01:/opt/remote/
done
# chmod +x irsync.sh
# ./irsync.sh & #后台执行
# fg #调度到前台执行, Ctrl+z 暂停并调度到后台
# bg 1 #让任务1在后台运行起来
创建配置文件:
# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 4
timeout = 900
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
fake super = yes #旧版本不需要,新版本需要,不然在centos 7上面会报:rsync: chgrp xxx (in test) failed: Operation not permitted (1)
[data]
path = /data/
ignore errors
read only = false
list = false
host allow = 10.0.0.0/8
host deny = 192.168.1.1/32
auth users = rsync_backup #不需要创建系统用户
secrets file = /etc/rsync.password #保存用户和密码的文件
# echo "rsync_backup:oldboy" > /etc/rsync.password #属主是root
# chmod 600 /etc/rsync.password
# useradd -s /bin/nologin rsync
# chown -R rsync.rsync /data以
以上服务端配置完毕。
客户端操作:
# echo "oldboy" > /etc/rsync.password #生成密码文件, 只保存密码
# chmod 600 /etc/rsync.password #属主是root客
客户端同步文件至服务器端:
# rsync -avz /opt/software/node_exporter/ rsync_backup@10.10.17.244::data --password-file=/etc/rsync.password
客户端排除同步的文件名:
--exclude=a #排除单个文件名为:a
--exclude={a,b} #排除多个文件名为:a、b
--exclude={a..z} #排除多个文件名从a到z
--exclude-from=文件名 #排除的文件名写到一个文件中
服务器端排除文件:
exclude=a b #排除a 和 b 这2个文件名