> 技术文档 > 小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)_sersync + rsync

小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)_sersync + rsync


Rsync+sersync实现数据实时同步

目录

Rsync+sersync实现数据实时同步

一、rsync概述

二、rsync运行原理

三、rsync部署

四、备份测试

五、使用非系统用户备份数据

5.1 rsync的配置文件介绍

5.2 配置备份目录

5.3 使用rsync用户备份测试

5.4 pull拉取数据

六、rsync+sersync 实现数据实时同步

6.1 数据同步原理

6.2 部署rsync+sersync

6.3 设置rsync+sersync开机自启

七、总结


一、rsync概述

Rsync(Remote Sync)是Linux系统下的数据镜像备份工具。该工具可以实现远程同步、不同主机之间的同步,也能实现全量备份增量备份,保持数据链接和权限,并采用优化的同步算法,传输前对数据进行压缩,故该工具非常适合架构集中式备份异地备份。也支持本地复制或与ssh、rsync同步。

官网地址:https://rsync.samba.org/

优点:

  • scp无法备份大量数据,而rsync备份、统计、比较一起进行。

  • 可以备份整个目录树和文件系统,并保持文件原来的权限、时间、软硬链接。

  • 安装较容易,无需特殊权限。

  • 同步快速,首次同步完全备份,再次同步增量备份。

  • 可以使用scp和ssh等方式传输备份文件

  • 支持匿名传输

  • 选择性保持:符号链接、硬链接、文件属性、权限、时间等

  • 传输速度快:压缩再传输、解压再使用,减少带宽。

# 查看版本信息[root@server ~]# rsync --versionrsync version 3.1.2 protocol version 31Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.Web site: http://rsync.samba.org/Capabilities:    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,   socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,   append, ACLs, xattrs, iconv, symtimes, prealloc​rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and youare welcome to redistribute it under certain conditions. See the GNUGeneral Public Licence for details.

备份分类:

  • 完全备份:所有文件进行备份

  • 差异备份:备份自上次完全备份以来所有的修改

  • 增量备份:备份自上次备份依赖所作的修改 (备份的量最小)

二、rsync运行原理

rsync采用C/S模式,即点到点的传输。通过xinetd服务监听873端口,再让xinetd服务下的rsync服务作出响应。

源主机:需要同步数据的服务器 (以数据为参照物)

目标主机:存放服务器同步数据的主机

数据同步方式:push 和 pull

  • 推push:主动同步,把数据发送给目标主机。服务器开销大,适合后端服务器较少的情况。【服务器备份推给rsync客户端存放,主动模式】

目标主机配置为 rsync 服务端,源主机周期性的使用 rsync 命令把要同步的目录推过去。

  • 拉pull:所有客户端主机去服务器上面拉数据,导致数据传输缓慢。【rsync客户端去服务器上拉数据,存放到客户端上,被动模式】

源主机配置为 rsync 服务端,目的主机周期性的使用 rsync 命令把要同步的目录拉过来。

[root@targetpc ~]# systemctl start rsyncd[root@targetpc ~]# systemctl status rsyncd● rsyncd.service - fast remote file copy program daemon   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled)   Active: active (running) since 六 2025-06-21 21:53:40 CST; 16min ago Main PID: 5256 (rsync)   Tasks: 1   CGroup: /system.slice/rsyncd.service           └─5256 /usr/bin/rsync --daemon --no-detach​6月 21 21:53:40 targetpc systemd[1]: Started fast remote file cop....Hint: Some lines were ellipsized, use -l to show in full.​#查看端口号, 通过xinetd服务监听端口号 /etc/xinetd.d/[root@targetpc xinetd.d]# netstat -antup | grep 873tcp        0      0 192.168.157.130:873     0.0.0.0:*               LISTEN      5256/rsync          udp        0      0 0.0.0.0:55276           0.0.0.0:*                           873/avahi-daemon: r udp        0      0 0.0.0.0:5353            0.0.0.0:*                           873/avahi-daemon: r 

三、rsync部署

# rsync服务由xinetd服务进行管理,故也需要安装xinetd服务# 客户端和服务器都需要安装xinetd服务和rsync服务[root@server ~]# yum install xinetd rsync -y[root@client ~]# yum install xinetd rsync -y​# rsync运行在daemon模式[root@server ~]# rsync --daemon[root@client ~]# rsync --daemon​# 查看是否监听873端口号[root@server ~]# netstat -antup | grep 873tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      18927/rsync         tcp6       0      0 :::873                 :::*                   LISTEN      18927/rsync [root@client ~]# netstat -antup | grep 873tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      9367/rsync          tcp6       0      0 :::873                 :::*                   LISTEN      9367/rsync  
参数 作用 -a –archive archive mode权限保存模式【递归、保持属性】(包含以下所有属性) -r 递归处理 -p 保留文件原有属性 -t 保留文件原有时间 -g 保留属组 -o 保留档案所有者 -D 保留device咨询 -l 复制所有的连接 -z 压缩传输 -H 保留硬链接文件 -A 保留文件的ACL属性 -P –progress --version 输出rsync版本信息 -v 显示输出过程 -u 仅进行更新 --port 指定端口号,默认873 --delete 删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致。 --password-file 指定密码文件 --bwlimit 限制I/O带宽 --filter 需要过滤的文件 --exclude 需要过滤的文件 --progress 显示备份过程 –avz 常用:保留权限、显示同步过程、压缩传输

四、备份测试

# 由于rsync备份是会保持目录及其文件的权限、时间、软硬连接不变的,那要求备份在ssh传输过程中一路顺畅,不会因权限不足而备份失败。# 这里创建test用户用于测试[root@server ~]# useradd test && echo 123456 | passwd --stdin test更改用户 test 的密码 。passwd:所有的身份验证令牌已经成功更新。[root@client ~]# useradd test && echo 123456 | passwd --stdin test更改用户 test 的密码 。passwd:所有的身份验证令牌已经成功更新。
# 服务端上创建测试目录/data# g+s权限的作用在于/data目录下新增的文件的所属组都会是test# setfacl为test用户创建在/data的rwx权限[root@server ~]# mkdir /data[root@server ~]# chown -R test:test /data[root@server ~]# chmod g+s /data[root@server ~]# setfacl -m u:test:rwx /data[root@server ~]# cp -r /boot/* /data​
# 客户端上创建备份存放目录[root@client ~]# mkdir -p /data/backup/[root@client ~]# chown test:test /data/backup/[root@client ~]# ll -d /data/backup/drwxr-xr-x. 2 test test 6 8月   6 23:52 /data/backup/
# 备份/data目录下的数据到客户端上[root@server ~]# rsync -avz /data/ test@192.168.115.112:/data/backuptest@192.168.115.112\'s password: sending incremental file list./。。。省略备份信息。。。sent 138,094,794 bytes received 6,296 bytes  5,211,361.89 bytes/sectotal size is 152,364,618 speedup is 1.10

# 客户端上验证备份内容,可以看到有数据传输进去[root@client ~]# du -sh /data/backup/146M /data/backup/​# 如果同步的时候,使用的不是ssh的22号端口,而是其他端口,比如222,要加-e参数指定端口号rsync -avz /data/  -e \"ssh -p 222\" test@192.168.115.112:/data/backup 

五、使用非系统用户备份数据

5.1 rsync的配置文件介绍

rsync的配置文件:/etc/rsync.conf

# /etc/rsyncd.conf#全局参数:对rsync服务器生效,优先级较低port     # rsync占用端口号,默认是873address  # 监听地址,一般是目标主机的IP地址uid      # 运行进程的用户 gid      # 运行进程的用户组max connections  # 最大连接数lock file   # 最大连接数的锁文件motd file   # 同步登录后的提示语,填写欢迎同步信息,自行创建log file    # 日志文件pid file    # 进程PID文件,自动生成hosts allow  # 允许同步的主机​#模块参数:针对某一个目录定义的参数,优先级较高[mod_name]    # 同步目录名comment       # 描述信息path          # 同步目录read only     # 同步目录的读写权限exclude       exclude fromincludeinclude fromauth users   # 备份的用户,自动创建,与系统用户无关secrets file  # 存放rsync用户的密码文件hosts allowhosts denylisttimeout​
# 启动rsync就会生成一个对应的pid[root@server ~]# ll /var/run/rsyncd.pid-rw-r--r--. 1 root root 6 8月   8 09:46 /var/run/rsyncd.pid[root@server ~]# cat /var/run/rsyncd.pid18933

5.2 配置备份目录

# 查看下/etc/rsyncd.conf的默认内容# 可以使用man rsyncd.conf 命令查看更多选项信息[root@server ~]# ll /etc/rsyncd.conf-rw-r--r--. 1 root root 458 4月  11 2018 /etc/rsyncd.conf[root@server ~]# cat /etc/rsyncd.conf # /etc/rsyncd: configuration file for rsync daemon mode​# See rsyncd.conf man page for more options.​# configuration example:​# uid = nobody (运行账户)(生产环境下要注意)# gid = nobody   (运行组) # use chroot = yes (锁定当前组)# max connections = 4 (最多连接四个账户)# pid file = /var/run/rsyncd.pid  # exclude = lost+found/# transfer logging = yes (传输登录)# timeout = 900# ignore nonreadable = yes# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   (同步过程中包含这些文件)​# [ftp]#       path = /home/ftp#       comment = ftp export area
  • 服务器:serverpc 192.168.157.129 (需要进行数据备份的主机)

  • 客户端:targetpc 192.168.157.130 (备份存储的主机)

一、客户端

1、编写客户端/etc/rsyncd.conf文件,并且创建目录/data/backup

push# 在客户端上编写rsync配置文件,创建一个存放备份的同步目录[root@targetcp ~]# vim /etc/rsyncd.confport=873address = 192.168.157.130  #本机IPuid = root      gid = root use chroot = yesmax connections = 4pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.logmotd file = /etc/rsyncd.motdhosts allow = 192.168.157.0/24    #目标机的IP[data]    #(逻辑名 网络名)path = /data/backupcomment = bakcup dataread only = falselist = yes   #是否列出auth users = rsyncusersecrets file = /etc/rsync.passwd  #独立系统用户的验证~                                 mkdir -P /

2、创建文件rsync.passwd写入用户和密码,并将密码文件赋权

# 创建密码文件,格式   用户名:密码# 设置密码文件权限为600或者700[root@targetpc ~]# vim /etc/rsync.passwd[root@targetpc ~]# cat /etc/rsync.passwd rsyncuser:123456[root@targetpc ~]#chmod 600 /etc/rsync.passwd

3、写入欢迎信息

[root@targetpc ~]# echo \"Welcome to Backup Server\" > /etc/rsyncd.motd

4、创建备份目录

[root@targetpc ~]#mkdir -p /data/backup

5、启动rsync服务

systemctl start rsyncd##前提关闭防火墙和安全上下文#查看监听端口号[root@targetpc ~]# ss -anltState Recv-Q Send-Q Local Address:Port  Peer Address:Port  LISTEN 0 5 192.168.157.130:873  *:* 

二、服务器

1、回到数据源,也就是服务器serverpc手动push,创建目录/data自定义该目录的文件

[root@sourcepc data]# lsaaa ccc f2 GNU-Linux-x86bbb f1 f3 sersync2.5.4_64bit_binary_stable_final.tar.gz

2、然后开始同步文件

[root@sourcepc data]# rsync -avz /data/* rsyncuser@192.168.157.130::dataWelcome to Backup ServerPassword: sending incremental file listf1f2f3aaa/bbb/ccc/sent 439 bytes received 90 bytes 36.48 bytes/sectotal size is 2,541,385 speedup is 4,804.13

3、去客户端查看验证,并在客户机上创建一个文件file1

[root@targetpc backup]# lsaaa ccc f2 GNU-Linux-x86bbb f1 f3 sersync2.5.4_64bit_binary_stable_final.tar.gz[root@targetpc backup]# touch file1[root@targetpc backup]# lsaaa f1 file1bbb f2 GNU-Linux-x86ccc f3 sersync2.5.4_64bit_binary_stable_final.tar.gz

4、在服务机上删除file1,删除只会将服务机备份源没有的,而客户端目标位置有的文件删除,最大程度保持一致

[root@sourcepc data]# rsync -avz --delete /data/ rsyncuser@192.168.157.130::dataWelcome to Backup ServerPassword: sending incremental file listdeleting file1./sent 344 bytes received 32 bytes 27.85 bytes/sectotal size is 2,541,385 speedup is 6,759.00

5、在客户端验证文件是否存在

#此时发现文件file1并不存在,说明同步成功[root@targetpc backup]# lsaaa ccc f2 GNU-Linux-x86bbb f1 f3 sersync2.5.4_64bit_binary_stable_final.tar.gz

三、可以不用输密码直接同步

1、在服务器上创建与客户端密码相同的文件,并赋予相同的权限

[root@sourcepc ~]# vim /etc/rsync.passwd[root@sourcepc ~]# cat /etc/rsync.passwd123456[root@sourcepc ~]# chmod 600 /etc/reync.passwd

2、在服务器上验证免密传输

#固定格式 --password-file=密码文件[root@sourcepc data]# rsync -avz /data rsyncuser@192.168.157.130::data --password-file=/etc/rsync.passwdWelcome to Backup Serversending incremental file listdata/data/f3data/sersync2.5.4_64bit_binary_stable_final.tar.gzdata/GNU-Linux-x86/data/GNU-Linux-x86/confxml.xmldata/GNU-Linux-x86/nohup.outdata/GNU-Linux-x86/sersync2data/aaa/sent 1,454,725 bytes received 131 bytes 138,557.71 bytes/sectotal size is 2,541,385 speedup is 1.75
# 启动xinetd服务,并加入到开机自启中[root@client ~]# systemctl start xinetd[root@client ~]# systemctl enable xinetd# 如果已经启动了rsync服务,要使用非系统用户登录,则必须先把原先的rsync停下来。[root@client ~]# systemctl stop rsyncd[root@client ~]# rsync --daemon --config=/etc/rsyncd.conf# 开放873端口号,允许通过873端口号同步数据 (防火墙已关闭,可以不用做)[root@client ~]# firewall-cmd --permanent --zone=public --add-port=873/tcpsuccess[root@client ~]# firewall-cmd --reload success

5.3 使用rsync用户备份测试

#
 rsync用户一般是第一个普通用户,即UID为1001,故备份的所有者和所属组都为1001# 服务端推送数据到共享目录位置#rsync 选项 需要备份的目录 rsync用户名@存放备份的服务器IP::共享模块名 --password-file=密码文件[root@server ~]# rsync -avz --delete /data/ rsyncuser@192.168.115.112::dataWelcome to Backup ServerPassword: sending incremental file list。。。省略同步信息。。。sent 138,094,811 bytes received 6,297 bytes 6,137,827.02 bytes/sectotal size is 152,364,618 speedup is 1.10
# 如果想不输入密码,可以使用--password-file参数指定密码[root@server ~]# cat /etc/rsync.passwd123456[root@server ~]# chmod 600 /etc/rsync.passwd[root@server ~]# rsync -avz /data rsyncuser@192.168.157.130::data --password-file=/etc/rsync.passwd
# 如果想定时同步数据,可以设置定时任务。[root@server ~]# vim autobackup.sh[root@server ~]# cat autobackup.sh#!/bin/bashrsync -avz /data rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd[root@server ~]# chmod +x autobackup.sh[root@server ~]# crontab -e50 19 * * * bash /root/autobackup.sh

5.4 pull拉取数据

以上的同步过程都是服务端主动推送数据给目标主机,这里演示下目标主机主动拉取数据进行同步。

# 服务端上配置/etc/rsyncd.conf文件[root@server ~]# vim /etc/rsyncd.conf port=873address = 192.168.115.111uid = rootgid = rootuse chroot = yesmax connections = 4pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.logmotd file = /etc/rsyncd.motdhosts allow = 192.168.43.0/24[data]path = /datacomment = master dataread only = falselist = yesauth users = rsyncusersecrets file = /etc/rsync.passwd# 认证文件[root@server ~]# cat /etc/rsync.passwd rsyncuser:123456# 服务端上启动rsync[root@server ~]# rsync --daemon --config=/etc/rsyncd.conf[root@server ~]# netstat -antup | grep 873tcp 0 0 192.168.115.111:873 0.0.0.0:*  LISTEN 11040/rsync # 看到以上结果,说明服务端的rsync服务已经配置完成。# 开放873端口号,允许通过873端口号拉取数据[root@server ~]# firewall-cmd --permanent --zone=public --add-port=873/tcpsuccess[root@server ~]# firewall-cmd --reload success
# 目标主机上拉取数据[root@client ~]# rsync -avz rsyncuser@192.168.115.111::data /data/backup/Welcome to Backup ServerPassword: receiving incremental file list。。。省略拉取过程。。。sent 6,342 bytes received 138,094,913 bytes 11,048,100.40 bytes/sectotal size is 152,364,627 speedup is 1.10

六、rsync+sersync 实现数据实时同步

6.1 数据同步原理

1、为什么要是用rsync+sersync

sersync是基于inotify开发的,可以记录目录中发生变化的内容,具体到某个文件或者目录,在使用rsync同步的时候,只同步发生变化的文件或者目录。【增量同步】

2、rsync+inotify-tools 与 rsync+sersync 架构的区别?

①inotify-tools只能记录目录发生了变化,但是不能具体到某个文件或者目录。

②rsync同步不清楚哪些文件或目录发生了变化,就会整个目录都同步,效率低。

3、同步过程:

①源服务器上开启sersync记录指定路径的文件系统变化情况。

②源服务器上使用rsync命令把变化的数据同步到目标服务器上。

③源服务器上配置sersync服务,目标服务器安装rsync服务。

6.2 部署rsync+sersync

sersync服务端【同步服务器】:192.168.115.111

rsync客户端【存放备份,目标服务器】:192.168.115.112

由于sersync只能监控到差异变化,同步还是需要rsync去做,所以先确保rsync运行正常。可以测试一遍,看能否做完全同步。

[root@client ~]# rsync --daemon --config=/etc/rsyncd.conf[root@client ~]# netstat -antup | grep rsynctcp 0 0 192.168.115.112:873 0.0.0.0:*  LISTEN 9298/rsync # 添加到开机自启[root@client ~]# vim /etc/rc.d/rc.localrsync --daemon --config=/etc/rsyncd.conf###备份源上测试[root@server ~]# rsync -avz /data rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd

开始部署sersync守护进程

# 解压并重命名为sersync[root@server ~]# cd /opt[root@server opt]# ll总用量 712-rw-r--r--. 1 root root 727290 8月 9 09:52 sersync2.5.4_64bit_binary_stable_final.tar.gz[root@server opt]# tar xzf sersync2.5.4_64bit_binary_stable_final.tar.gz [root@server opt]# ll总用量 712drwxr-xr-x. 2 root root 41 10月 26 2011 GNU-Linux-x86-rw-r--r--. 1 root root 727290 8月 9 09:52 sersync2.5.4_64bit_binary_stable_final.tar.gz[root@server opt]# mv GNU-Linux-x86 sersync[root@server opt]# ll总用量 712drwxr-xr-x. 2 root root 41 10月 26 2011 sersync-rw-r--r--. 1 root root 727290 8月 9 09:52 sersync2.5.4_64bit_binary_stable_final.tar.gz
# 修改sersync的配置文件# sersync服务总共就两个文件,一个配置文件,一个启动文件[root@server ~]# cd /opt/sersync/[root@server sersync]# ll总用量 1772-rwxr-xr-x. 1 root root 2109 8月 9 09:59 confxml.xml-rwxr-xr-x. 1 root root 1810128 10月 26 2011 sersync2[root@server ~]# vim /opt/sersync/confxml.xml# 定义监控路径、同步的目标主机、共享模块23 24 25 26 # 开启用户认证,并设置账号和密码 29 
# 开启sersync守护进程同步数据,即实时同步。# -r参数,先做一次完全同步,再做差异同步。[root@server ~]# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xmlset the system paramexecute:echo 50000000 > /proc/sys/fs/inotify/max_user_watchesexecute:echo 327679 > /proc/sys/fs/inotify/max_queued_eventsparse the command paramoption: -d run as a daemonoption: -r rsync all the local files to the remote servers before the sersync workoption: -o config xml name: /opt/sersync/confxml.xmldaemon thread num: 10parse xml config filehost ip : localhosthost port: 8008daemon start,sersync run behind the console use rsync password-file :user isrsyncuserpasswordfile is /etc/rsync.passwdconfig xml parse successplease set /etc/rsyncd.conf max connections=0 Manuallysersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)please according your cpu ,use -n param to adjust the cpu rate------------------------------------------rsync the directory recursivly to the remote servers onceworking please wait...execute command: cd /data && rsync -artuz -R --delete ./ rsyncuser@192.168.115.112::data --password-file=/etc/rsync.passwd >/dev/null 2>&1 [root@server ~]# run the sersync: watch path is: /data # 可以看到监控的是/data
# 打开监控,查看实时同步情况# 当目录/data下的文件或者目录有任何的变化,都会被监控到,并同步到目标主机上。[root@server data]# watch ls -l

从以上测试可以看出,rsync+sersync已经部署完成,可以正常的同步数据到目标主机上。

6.3 设置rsync+sersync开机自启

# 设置开机自启[root@server ~]# vim /etc/rc.d/rc.local/opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml
# 如sersync正常运行,通过ps命令可以看到进程已经开启。[root@server ~]# ps aux | grep sersync2 | grep -v \'grep\'| wc -l1
# 检查sersync是否正常运行[root@server ~]# vim /opt/check_sersync.sh#!/bin/shwhile truedosersync=\"/opt/sersync/sersync2\"confxml=\"/opt/sersync/confxml.xml\"status=$(ps aux |grep \'sersync2\'|grep -v \'grep\'|wc -l)if [ $status -eq 0 ] ; then echo \"sersync未开启,现在开启\" echo \"===============================\" $sersync -d -r -o $confxml echo \"===============================\" bash $0else echo \"sersync已正常开启\" exit 0;fisleep 1done[root@server ~]# chmod +x /opt/check_sersync.sh[root@server ~]# bash /opt/check_sersync.sh
# 设置两分钟检查一次sersync是否正常运行[root@server ~]# crontab -e*/2 * * * * sh /opt/check_sersync.sh &> /dev/null

一、部署rsync+sersync

  • serverpc服务端【同步服务器】:serverpc 192.168.157.129

  • targetpc客户端【存放备份,目标服务器】:targetpc:192.168.157.130

1、由于sersync只能监控到差异变化,同步还是需要rsync去做,所以先确保rsync运行正常。可以测试一遍,看能否完全同步

[root@sourcepc data]# rz #导入软件包[root@sourcepc data]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz[root@sourcepc data]# lsaaa f3 GNU-Linux-x86 sersync2.5.4_64bit_binary_stable_final.tar.gz[root@sourcepc data]# cd GNU-Linux-x86/[root@sourcepc GNU-Linux-x86]# lsconfxml.xml nohup.out sersync2##将所有的false改为true触发[root@sourcepc GNU-Linux-x86]#   #当文件或目录被删除时,触发监控事件  #当新文件夹被创建时,触发监控事件  #当新文件被创建时,触发监控事件  #当文件被写入并关闭时(即写入操作完成)  #当文件或文件夹被移动(剪切)出监控目录时,触发事件  #当文件或文件夹被移动(剪切)到监控目录时,触发事件  #当文件的属性(如权限、所有者、时间戳等)被修改时,触发事件  #当文件内容被修改(但未关闭写入)时,触发事件    #监视的目录  #监视到的内容同步到谁,同步名data <!----> <!---->     #users=改为rsyncuser #passwordfile=改为密码文件  #不自定义端口号    

2、启动服务(因为在当前目录,直接./执行)

[root@sourcepc GNU-Linux-x86]# ./sersync2 -d -r -o ./confxml.xmlset the system paramexecute:echo 50000000 > /proc/sys/fs/inotify/max_user_watchesexecute:echo 327679 > /proc/sys/fs/inotify/max_queued_eventsparse the command paramoption: -d run as a daemonoption: -r rsync all the local files to the remote servers before the sersync workoption: -o config xml name: ./confxml.xmldaemon thread num: 10parse xml config filehost ip : localhost host port: 8008will ignore the inotify createFile event daemon start,sersync run behind the console use rsync password-file :user is rsyncuserpasswordfile is /etc/rsync.passwdconfig xml parse successplease set /etc/rsyncd.conf max connections=0 Manuallysersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)please according your cpu ,use -n param to adjust the cpu rate------------------------------------------rsync the directory recursivly to the remote servers onceworking please wait...execute command: cd /data && rsync -artuz -R --delete ./ rsyncuser@192.168.157.130::data --password-file=/etc/rsync.passwd >/dev/null 2>&1 

3、创建一个文件或目录观察监控

[root@sourcepc data]# mkdir abc##在客户端上传输成功[root@targetpc backup]# lsaaa f3 sersync2.5.4_64bit_binary_stable_final.tar.gzabc GNU-Linux-x86##在服务器上监测 (-d 放在后台)[root@sourcepc GNU-Linux-x86]# strace ./sersync2 -r -o ./confxml.xmlinotify_add_watch(3, \"/data/aaa\", IN_MODIFY|IN_ATTRIB|IN_CLOSE_WRITE|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE) = 3open(\"/data/aaa\", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 5getdents(5, /* 2 entries */, 32768) = 48getdents(5, /* 0 entries */, 32768) = 0close(5) = 0inotify_add_watch(3, \"/data/abc\", IN_MODIFY|IN_ATTRIB|IN_CLOSE_WRITE|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE) = 4open(\"/data/abc\", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 5getdents(5, /* 2 entries */, 32768) = 48getdents(5, /* 0 entries */, 32768) = 0close(5) = 0inotify_add_watch(3, \"/data/123\", IN_MODIFY|IN_ATTRIB|IN_CLOSE_WRITE|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE) = 5open(\"/data/123\", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 5getdents(5, /* 2 entries */, 32768) = 48getdents(5, /* 0 entries */, 32768) = 0close(5) = 0getdents(4, /* 0 entries */, 32768) = 0close(4) = 0fcntl(3, F_GETFL) = 0 (flags O_RDONLY)read(3, 
##更改名称 [root@sourcepc data]# mv abc ABC[root@targetpc backup]# ls123 ABC GNU-Linux-x86aaa f3 sersync2.5.4_64bit_binary_stable_final.tar.gz

4、脚本编写

#!/bin/bashsystemctl status rsyncd &> /dev/nullif [ $? -ne 0 ];thensystemctl start rsyncd fi read -p \"请输入ip地址:\" ipread -p \"请输入创建的文件名称:\" fileread -p \"请输入跨机使用的密码:\" passwdmask=`echo $(echo $ip | cut -d. -f1,2,3).0/24`echo \"port=873address = $ipuid = rootgid = rootuse chroot = yesmax connections = 4pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.logmotd file = /etc/rsyncd.motdhosts allow = $mask[$file]path = /$file/backupcomment = bakcup dataread only = falselist = yesauth users = rsyncusersecrets file = /etc/rsync.passwd\">/etc/rsyncd.conftouch /etc/rsync.passwdchmod 600 /etc/rsync.passwdecho \"rsyncuser:$passwd\">/etc/rsync.passwdmkdir -p /$file/backupecho \"Welcome to Backup server\">/etc/rsyncd.motd systemctl restart rsyncd

七、总结

  • rsync可以进行数据的同步,可以使用推和拉两种方式。推即源主机推数据到目标主机,拉即目标主机从源主机上拉数据。

  • push:服务器向客户端推送数据,要在目标主机上配置一个共享目录,在服务端上使用rsync命令推送数据给目标主机。

  • pull:客户端向服务器拉去数据,需要把服务器上的同步目录配置成一个共享目录,然后客户端去这个共享目录上拉去数据。

  • 仅使用rsync同步数据,不会记录数据的变化,每次同步都是同步整个目录,不适合大量数据的同步。

  • 结合使用rsync+sersync,sersync负责监控源主机上同步目录的数据变化,rsync负责同步变化的部分,极大地提高了同步的效率。

新能源知识概览