Lsyncd、rsync + sersync 数据同步
一、Lsyncd
是一种轻量级的实时镜像解决方案
其安装相对容易,且不需要新的文件系统或块设备的支持,同时,Lysncd
同步的时候还不会妨碍本地文件系统的运转。
作为 rsync
的替代方案,Lsyncd
还可以通过 rsync+ssh
方式推送文件。当文件或目录重命名或移动到本地树中的新位置时,rsync+ssh
可以更加高效的同步。相反,使用 rsync
则通过删除旧文件然后重新传输整个文件来执行移动。
可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从 shell
脚本到用 Lua
语言编写的代码。因此,简单,强大和灵活的配置是可能的。需要注意的是,在 Lsyncd2.2
的版本中要求同步双方的主机上的 rsync
版本不低于 3.1
方可正常使用。
1、安装
###yum方式 yum install epel-release -y yum install lsyncd -y ###编译方式 # 官方仓库地址 $ git clone https://github.com/axkibe/lsyncd.git # 系统需求需要 Lua >= 5.2 cmake >= 2.8 rsync >= 3.1 # 编译方式 $ cmake . $ make $ sudo make install
2、本地文件之间的同步
# 使用rsync工具同步 $ lsyncd -rsync /home/USER/src /home/USER/dst
3、本地文件同步到远程 - rsync
# 使用rsync工具同步 # 同步本地的home目录到远程主机的share目录中去 $ lsyncd -rsync /home remotehost::share/
4、本地文件同步到远程 - ssh
# 使用ssh工具同步 # 是要注意使用ssh的方式需要和rsync有区别 # REMOTEHOST => 本地源目录 # TARGETDIR => 远程主机和目标目录 $ lsyncd -rsyncssh /home REMOTEHOST TARGETDIR $ lsyncd -rsyncssh /home remotehost.org backup-home/
5、可以同时同步多个文件路径
# 多个目录同步 $ lsyncd -rsync /home/USER/src remotehost1:dst \ -rsync /home/USER/src remotehost2:dst
使用lsyncd来完成实时同步 | Escape (escapelife.site)
二、rsync+inotify与rsync+sersync架构的区别
1、rsync+inotify
a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低
2、rsync+sersync
a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
三、 rsync+sersync 数据同步
1. sersync 监控指定目录 文件事件变化;
2. sersync 调用 rsync 客户端命令将更新的目录和文件增量同步到 rsync 服务器,实现数据同步;
安装 rsync
dnf install rsync
rpm -qa rsync
rsync --version
rsync server
rsync 配置文件
cat /etc/rsyncd.conf uid=root gid=root max connections=100 use chroot=true log file=/var/log/rsyncd.log motd file=/etc/rsyncd.motd transfer logging=true hosts allow=192.168.99.0/24 [data] path=/data comment=data read only =no list=yes auth users=root secrets file=/etc/rsyncd.pwd
rsync 配置文件参数
uid=root # 服务器端传输文件时,要发哪个用户和用户组来执行 gid=root # 服务器端传输文件时,要发哪个用户和用户组来执行 max connections=100 # 客户端最多连接数 use chroot=true # 用 chroot ,在传输文件之前,服务器守护程序在将 chroot 到文件系统中的目录中,这样 #做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超 级用户权限。另外对符号链接 #文件,将会排除在外。也就是说,你在 rsync 服务器上,如果有 符号链接,你在备份服务器 #上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同 步符号链接的内容 log file=/var/log/rsyncd.log #rsync 服务器的日志 motd file=/etc/rsyncd.motd # 定义motd file 路径 rsyncd.motd 内容是定义服务器信息的,用户登录时会看到这个信息 transfer logging=true # 传输文件日志 hosts allow=192.168.99.0/24 # 允许的 ip 地址 [data] # 模块名 path=/data # 同步的目录 exclude=web # 同步目录中去除的目录,即 web 不同步 comment=data # 注释,注释内容可自己定义,起提示作用 read only=no # 只读选择,如为 yes 则不让客户端上传文件到服务器上 list=yes # 服务器上提供同步数据的目录是否显示 auth users=root # 认证用户是 root secrets file=/etc/rsyncd.pwd # 密码文件保存路径,注意此文件的密码要与 223 上的 rsyncd.pwd2 文件中密码相同,权限 #必须设置为600,用来认证客户端的秘钥文件 格式 USERNAME:PASSWD #注意:配置文件里不能有注释信息
rsync 密码文件
echo "root:123456" >/etc/rsyncd.pwd echo "123456" >/etc/rsyncd.pwd2
修改权限
chmod 600 /etc/rsyncd.pwd chmod 600 /etc/rsyncd.pwd2
systemctl 管理 rsync 服务
/etc/sysconfig/rsyncd
vim /etc/sysconfig/rsyncd OPTIONS=""
rsyncd.service
cat /lib/systemd/system/rsyncd.service [Unit] Description=fast remote file copy program daemon ConditionPathExists=/etc/rsyncd.conf [Service] EnvironmentFile=/etc/sysconfig/rsyncd ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS" [Install] WantedBy=multi-user.target
rsyncd 启动
systemctl start rsyncd systemctl enable rsyncd
rsync 端口 进程
netstat -auntlp |grep 873 ps -ef |grep rsync
firewall
firewall-cmd --add-port=873/tcp --permanent firewall-cmd --reload
rsync client
rsync 本地磁盘同步数据
rsync -vlzrtogp /mnt/data /backups rsync -vlzrtogp /mnt/data/ /backups
/mnt/data 表示将整个 /data目录复制到目标目录
/mnt/data/ 表示将 data 目录中的所以内容复制到目标目录
rsync 远程同步
rsync -vlzrtopg --progress --delete /mnt/data/ root@192.168.99.227::data --password-file=/etc/rsyncd.pwd2
rsync 数据同步限流
rsync -vlzrtogp --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s rsync -vlzrtogp --progress --delete --bwlimit=2048 本地文件 远程文件 //限制为2M/s
rsync client 参数
-v, --verbose 详细输出模式 -l, --links 保持符号链接文件 -z, --compress 在传输文件时进行压缩处理 -r, --recursive 对子目录以递归模式处理 -t, --times 保持文件时间信息 -o, --owner 保持文件属主信息 (super-user only) -g, --group 保持文件属组信息 -p, --perms 保持文件权限 -P(大写),--progress 在传输时显示传输过程 --delete 删除目标端比本地端多余得文件目录保持数据一致性 --exclude=web 指定排除一个不需要传输的文件匹配模式 --exclude-from=FILE 从 FILE 中读取排除规则 --include=PATTERN 指定需要传输的文件匹配模式 --include-from=FILE 从 FILE 中读取包含规则 --password-file=FILE 从 FILE 中读取口令,以避免在终端上输入口令 --bwlimit=RATE 限制传输 I/O 带宽
rsync + sersync
安装 rsync
dnf install rsync
rsync 密码文件
echo "123456" >/etc/rsyncd.pwd2
修改权限
chmod 600 /etc/rsyncd.pwd2
下载 sersync
cd /opt wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
解压 sersync
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz mv GNU-Linux-x86 /usr/local/sersync
sersync 配置文件
vim /usr/local/sersync/confxml.xml
启动 sersync
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
ps -ef |grep sersync2
sersync 变量
echo "export PATH=$PATH:/usr/local/sersync" >>/etc/profile source /etc/profile
数据同步测试
源服务器创建文件
目的服务器查看
rsync 数据同步日志
sersync 多实例
监控多个目录进行数据同步时,分别配置不同的 sersync 配置文件即可
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/nginx_confxml.xml /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/zabbix_confxml.xml
四、rsync工具常见用法
-v:显示rsync过程中详细信息。 -P:显示文件传输的进度信息。 -n :模拟复制过程。 -a :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -t :保持mtime属性。建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新 :检查出mtime不同从而导致增量传输无效。 -o :保持owner属性(属主)。 -g --group:保持group属性(属组)。 -p --perms:保持perms属性(权限,不包括特殊权限)。 -D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。 -l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。 -z :传输时进行压缩提高效率。 -R :使用相对路径。 -u :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。 -d :以不递归的方式拷贝目录本身。 -e :指定所要使用的远程shell程序,默认为ssh,-e 'ssh -p 2222' -W :rsync将不再使用增量传输,而是全量传输。
rsync做远程传输时比scp更高效,rsync基于增量传输,更快,效率更高。
1、-r 参数
-r
表示递归,即包含子目录。注意,-r
是必须的,否则 rsync 运行不会成功。source
目录表示源目录,destination
表示目标目录。如果有多个文件或目录需要同步,可以写成下面这样。
rsync -r source1 source2 destination
2、-a参数
-a
参数可以替代-r
,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a
比-r
更有用。下面的用法才是常见的写法。
$ rsync -a source destination
标目录destination
如果不存在,rsync 会自动创建。执行上面的命令后,源目录source
被完整地复制到了目标目录destination
下面,即形成了destination/source
的目录结构。
如果只想同步源目录source
里面的内容到目标目录destination
,则需要在源目录后面加上斜杠。
$ rsync -a source/ destination
3、-n
参数
-n
参数模拟命令执行的结果,如果不确定 rsync 执行后会产生什么结果,可以先用-n
或--dry-run
参数模拟执行的结果。
$ rsync -anv source/ destination
4、--delete
参数
rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。
--delete
参数会删除目标目录中比源目录多出的文件使得目的目录和源目录完全一样。
rsync -r zjz@192.1.10.70:/home/op_admin/package/ --delete test
5、--exclude
参数
有时,我们希望同步时排除某些文件或目录,这时可以用--exclude
参数指定排除模式。
$ rsync -av --exclude='*.txt' source/ destination
多个排除模式,可以用多个--exclude
参数。
$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination $ rsync -av --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
如果要排除的文件和/或目录的数量很多,则—exclude可以使用要在文件中排除的文件和目录,而不是使用多个选项。只需将文件传递给该—exclude-from选项。
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
在 exclude-file.txt 内存储这些内容
file1.txt dir1/* dir2
6、--include
参数
--include
参数用来指定必须同步的文件模式,往往与--exclude
结合使用。
$ rsync -av --include="*.txt" --exclude='*' source/ destination
7、远程同步
$ rsync -av source/ username@remote_host:destination $ rsync -av username@remote_host:source/ destination
8、增量备份 --link-dest
rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。
除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。
具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。
--link-dest
参数用来指定同步时的基准目录。
$ rsync -a --delete --link-dest /compare/path /source/path /target/path
上面命令中,--link-dest
参数指定基准目录/compare/path
,然后源目录/source/path
跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path
。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。
9、-P 包含两个参数 (––partial ––progress)
--partial 断点续传功能
如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件。
如果想在下次拷贝时续传文件,不需要重新拷贝所有文件的话,可以使用-partial选项阻止rsync在传输中断时删除已拷贝的部分
大白话:保留那些因故没有完全传输的文件,以是加快随后的再次传输(即断点续传)
--progress 在传输中显示进度条
10、指定端口号同步传输
#rsync -avuz -e 'ssh -p 2222' user@remote-server:/path/to/remote/folder
/path/to/local/folder
11、当访问 rsync 服务器时也可以使用 rsync:// URL
如同步清华的ceph源(yum\apt源都能使用此方法)
rsync -avrt rsync://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.8/el7/x86_64/ <YOUR_LOCAL_DIR> rsync -avrt rsync://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.8/el7/noarch/ /Users/zhangjingzhi/Desktop/work/ceph2 原网址:https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.8/el7/x86_64/
跳过多个同步不了的文件
rsync -avrt --exclude="ceph-debuginfo-15.2.8-0.el7.x86_64.rpm" --exclude="ceph-radosgw-15.2.8-0.el7.x86_64.rpm" rsync://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.8/el7/x86_64/ /Users/zhangjingzhi/Desktop/work/ceph
再上传到内网服务器
<YOUR_LOCAL_DIR> 复制到 内网的主机上 /。。。/yum/ceph/rpm-15.2.8/el7/x86_64/
12、通过 rsync --list-only 可以列出可用的 文件/目录或者 module
下面两者的含义是完全不同的:
rsync --list-only root@192.168.4.140: 使用系统用户, 列出 root 根目录下面的内容
rsync --list-only root@192.168.4.140:: 使用rsync用户, 列出 rsync 所有的(可见的)模块
https://mp.weixin.qq.com/s/bivSEqoJqxguqjVU4iT32Q