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

第2章 rsync(一):基本命令和用法 - 骏马金龙 - 博客园 (cnblogs.com)

posted @ 2020-07-16 17:33  凡人半睁眼  阅读(731)  评论(0编辑  收藏  举报