Contents
2.10. rsync数据同步¶
2.10.1. 1. Rsync¶
1.1 Rsync介绍¶
Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由 rsync.samba.org维护。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
1.2 Rsync基本特点¶
可以镜像保存整个目录树和文件系统;
可以很容易做到保持原来文件的权限、时间、软硬链接等;
无须特殊权限即可安装;
优化的流程,文件传输效率高;
可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
支持匿名传输;
Rsync命令
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
接着通过实例详细介绍rsync的使用方法。这里假定有A、B两个Linux系统,A系统运行业务,B系统作为A的一个远程容灾备份机,那么A系统就是rsync的服务器端,B系统就是rsync的客户端。
需要在A、B两个系统上都安装rsync软件,这样,在A系统上运行rsync守护进程,而B系统可以通过系统守护进程crontab来定时备份A系统上指定的数据,从而实现了数据的远程容灾。
2.10.2. 2. 安装环境如下¶
操作系统:CentOS 7
A服务器IP地址:192.168.1.100 # 服务器端
B服务器IP地址:192.168.1.107 # 客户端
在A、B两个服务器上通过rsync实现远程容灾备份的步骤如下。 1)在A、B两个服务器上安装rsync
rysnc的主页地址为:http://rsync.samba.org/,这里下载的版本为rsync-3.0.4。接着通过以下命令进行编译安装。 ## 3. rsync服务端配置
3.1 安装rsync安装包¶
cd /usr/local/src/
wget https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz
tar zxvf rsync-3.1.3.tar.gz
cd rsync-3.1.3/
./configure
make && make install
3.2 rsync服务器端配置¶
1.编辑配置文件/etc/rsyncd.conf
2.启动服务rsync --daemon
3.格式:rsync -av test1/ test@192.168.36.130::test/
/usr/local/bin/rsync --daemon
[root@localhost /]# ps -ef| grep rsync
root 14018 1 0 15:25 ? 00:00:00 /usr/local/bin/rsync --daemon
root 14181 7765 0 15:40 pts/0 00:00:00 grep --color=auto rsync
[root@localhost /]# cat /etc/rsyncd.conf | grep -v "^#"| grep -v "^$"
uid = nobody
gid = nobody
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[ixdba]
path = /webdata
comment = webdata file
ignore errors
read only = true
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
#创建共享目录并授权rsync服务管理
[root@localhost /]# mkdir /webdata
[root@localhost /]# echo "backup:admin#123" > /etc/server.pass
[root@localhost /]# cat /etc/server.pass
backup:admin#123
[root@localhost /]# chmod 600 /etc/server.pass
3.3 启动rsync服务并检查¶
[root@localhost /]# rsync --daemon
[root@localhost /]# ps -ef | grep rsync|grep -v grep
root 14018 1 0 15:25 ? 00:00:00 /usr/local/bin/rsync --daemon
[root@localhost /]# lsof -i:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 14018 root 4u IPv4 56223 0t0 TCP *:rsync (LISTEN)
rsync 14018 root 5u IPv6 56224 0t0 TCP *:rsync (LISTEN)
# 加入开机自启动
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
tail -1 /etc/rc.local
2.10.3. 4. rsync客户端配置¶
[root@localhost webdata]# rpm -qa rsync
rsync-3.1.2-4.el7.x86_64
[root@localhost webdata]# echo "admin#123" > /etc/server.pass
[root@localhost webdata]# cat /etc/server.pass
admin#123
[root@localhost webdata]# chmod 600 /etc/server.pass
#手动执行同步
/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.1.100::ixdba /webdata --password-file=/etc/server.pass
对这条指令中每个参数的含义介绍如下。
""--vzrtopg”选项中,v表示“--verbose”,即详细模式输出;
z表示“--compress”,即对备份的文件在传输时进行压缩处理;
r表示“--recursive”,也就是对子目录以递归模式处理;
t即“--times”,用来保持文件时间信息;
o即“--owner”,用来保持文件属主信息;
p即“--perms”,用来保持文件权限;
g即“--group”用来保持文件的属组信息。
“--delete”选项指定以rsync服务器端为基准进行数据镜像同步,
也就是要保持rsync服务器端目录与客户端目录的完全一致性。
这里也就是以A服务器为基准进行同步。
“--progress”选项用于显示数据镜像同步的过程。
“backup@192.168.1.100::ixdba”表示对服务器192.168.60.253中的ixdba模块进行备份,也就是指定备份的模块,
backup表示使用“backup”这个用户对该模块进行备份。
“/webdata”用于指定备份文件在客户端机器上的存放路径,也就是将备份的文件存放在备份机的/webdata目录下。
“--password-file=/etc/server.pass”用来指定客户机上存放的密码文件位置,
这样在客户端执行同步命令时就无须输入交互密码了。
注意,这个密码文件的名称和位置可以随意指定,但是在客户机上必须存在此文件,文件的内容仅仅为备份用户的密码,这里指的是backup的密码。
2.10.4. 5.使用 rsync 备份系统快照¶
将源目录复制到目的路径:
$ rsync -av source_path destination_path
例如:
$ rsync -av /home/slynux/data slynux@192.168.0.6:/home/backups/data
其中:
-a 表示进行归档操作;
-v (verbose)表示在 stdout 上打印出细节信息或进度
将数据备份到远程服务器或主机:
$ rsync -av source_dir username@host:PATH要想保持两端的数据同步,需要定期运行同样的 rsync 命令。它只会复制更改过的文件。下面的命令可以将远程主机上的数据恢复到本地:
$ rsync -av username@host:PATH destination通过网络进行传输时,压缩数据能够明显改善传输效率。我们可以用 rsync 的选项 -z 指 定在传输时压缩数据。例如:
$ rsync -avz source destination将一个目录中的内容同步到另一个目录:
$ rsync -av /home/test/ /home/backups将包括目录本身在内的内容复制到另一个目录中:
$ rsync -av /home/test /home/backups
2.10.5. 6. 补充内容¶
1.在使用 rsync 进行归档时排除部分文件
选项 –exclude 和 –exclude-from 可以指定不需要传输的文件:–exclude PATTERN
可以使用通配符指定需要排除的文件。例如:
$ rsync -avz /home/code/app /mnt/disk/backup/code --exclude "*.o"
该命令不备份 .o 文件。
或者我们也可以通过一个列表文件指定需要排除的文件。
这需要使用 --exclude-from FILEPATH 。
2.在更新 rsync 备份时,删除不存在的文件
默认情况下, rsync 并不会在目的端删除那些在源端已不存在的文件。如果要删除这类文件,
可以使用 rsync 的 --delete 选项:
$ rsync -avz SOURCE DESTINATION --delete
3.定期备份
你可以创建一个 cron 任务来定期进行备份。 下面是一个简单的例子:
$ crontab -ev
添加上这么一行:
0 */10 * * * rsync -avz /home/code user@IP_ADDRESS:/home/backups
上面的 crontab 项将 rsync 调度为每10小时运行一次。
4. rsync备份CENTOS系统
将整个/目录备份到usb下
sudo rsync -Pa / \
/media/saisi/usb/backup_`date +%Y-%m-%d`\
--exclude=/media/* \
--exclude=/sys/* \
--exclude=/proc/* \
--exclude=/mnt/* -\
-exclude=/tmp/*
还原系统命令
sudo rsync -Pa /media/saisi/usb/backup_`date +%Y-%m-%d` /
举例¶
rsync -avzP -e "ssh -p 22" /dir user@$IP:/dir # 同步目录 # --delete 无差同步 删除目录下其它文件
#1.在本地机器上对两个目录进行同步
rsync -zvr /var/opt/installation/inventory/ /root/temp
#2 仅同步一个文件
$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
#3.从本地同步文件到远程服务器
$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/
#4同步远程文件到本地
$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
sshpass -p "$passwd" rsync -avzP -e "ssh -p 22" /dir user@$IP:/dir/ # 指定密码避免交互同步目录
触发同步指令的方式有很多种,
例如可以将同步指令放入客户端系统的crontab守护进程中,设定同步时间,然后让Linux去触发同步指令,自动完成数据备份。
这种数据备份方式可以用于数据安全性要求不是很高的业务系统上。
细心的你可能发现了,在这种方式下,服务器端和客户端的数据在两次同步的时间间隔内,可能出现不一致现象。
而对于数据安全性要求极高的业务系统,这种备份方式就不能满足要求,这些业务系统要求服务器端和客户端的数据实时同步。
不过,幸运的是,Linux 内核提供了inotify文件系统监控机制,通过inotify与rsync的组合,完全可以实现rsync服务器端和客户端数据的实时同步。
参考文献
https://yugasun.com/post/migrate-server-data-using-rsync.html