一、rsync介绍
官方链接资料:http://www.samba.org/ftp/rsync/rsync.html
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
- rsync功能
- 作为命令,实现本地-远程文件同步
- 作为服务,实现本地-远程文件同步
- rsync特点
- 可以镜像保存整个目录树和文件系统
- 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
- 传输效率高,使用同步算法,只比较变化的
- 支持匿名传输,方便网站镜像;也可以做验证,加强安全
- rsync同类服务
- sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
- async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
- rsync 远程同步:remote synchronous
二、rsync用途
工作中需要定时/实时数据备份。本地不同的机器目录、不同的机房之间的数据备份。这些都可以用rsync完成。
三、rsync工作模式
1)本地方式
rsync就是一个命令
命令操作:
- rsync命令
- 把数据从一个地方复制到另一个的的地方(仅在一台机器增量),相当于cp。
- 通过加参数实现删除的功能,相当于rm命令。
- 查看属性信息功能,相当于ls。
2)远程方式
借助类似ssh隧道传输数据,适合不同机器之间的复制。
异地拷贝,相当于scp
Pull:rsync [OPTION…] [USER@]HOST:SRC… [DEST]
说明:rsync 参数 以什么身份从相应主机拉取数据 拉取数据保存本地的路径
示例:
[root@wjq ~]## rsync -avz root@10.105.242.174:/tmp/1.txt /opt/ root@10.105.242.174's password: receiving incremental file list 1.txt sent 43 bytes received 106 bytes 33.11 bytes/sec total size is 24 speedup is 0.16
Push:rsync [OPTION…] SRC… [USER@]HOST:DEST
说明:rsync 参数 本地数据 以什么身份的本地主机数据进行推送 数据保存的位置
示例:
[root@wjq ~] rsync -avz /etc/hosts root@10.105.242.174:/opt/ The authenticity of host '10.105.242.174 (10.105.242.174)' can't be established. ECDSAkeyfingerprintisSHA256:pSmZZNpT7WLg8LxBk9gFez5RNq3gaxYgpo/Kd9sv1Do.ECDSAkeyfingerprintisMD5:ce:42:93:22:32:b3:9c:4a:71:81:b9:f6:50:e5:bb:6b.Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.105.242.174' (ECDSA) to the list of known hosts. root@10.105.242.174's password: sending incremental file list hosts sent 218 bytes received 35 bytes 38.92 bytes/sec total size is 332 speedup is 1.31
3)守护进程方式
Pull:rsync [OPTION…] [USER@]HOST::SRC… [DEST]
说明:rsync 参数 认证用户从相应主机拉取数据 拉取数据保存本地的路径
Push:rsync [OPTION…] SRC… [USER@]HOST::DEST
说明:rsync 参数 认证用户将本地主机数据进行推送 数据保存的位置
四、rsync常用选项
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
–delete 删除DEST中SRC没有的文件
–exclude 过滤指定文件,如–exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
企业常用参数组合:-avz或者-vzrtopg
五、rsync守护进程模式部署
1、实验环境
10.105.12.132 wjq 客户端
10.105.242.174 wjqbackup 服务端
2、服务端配置
(1)查看rsync版本
[root@wjqbackup ~]# rsync --version rsync version 3.1.2 protocol version 31 Copyright (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 you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details.
(2)备份rsync配置文件
[root@wjqbackup ~]# cp /etc/rsyncd.conf{,.ori} [root@wjqbackup ~]# ll /etc/rsyncd.conf* -rw-r--r--. 1 root root 458 Apr 11 2018 /etc/rsyncd.conf -rw-r--r-- 1 root root 458 Oct 27 16:59 /etc/rsyncd.conf.ori
(3)修改配置文件
[root@wjqbackup ~]# vim /etc/rsyncd.conf port = 873 #指定在哪个端口启动rsyncd服务,默认是873端口。 uid = rsync #管理备份目录的用户 gid = rsync #管理备份目录的用户组 use chroot = no #安全功能,数据是否锁定到备份目录 fake super = yes #相当于root权限 max connections = 200 #并发连接,同时多少客户端访问 timeout = 600 #超时时间,显示空闲连接存活时间 pid file = /var/run/rsyncd.pid #保存进程pid号码信息 lock file = /var/run/rsync.lock #锁文件 log file = /var/log/rsyncd.log #rsync程序日志文件 ignore errors #在备份传输数据时,一些不严重问题先进行忽略 read only = false #备份目录设置为可读可写 list = false #表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。 hosts allow = 10.105.12.132 172.16.1.0/24 #设置允许哪些主机或网段可以向备份服务器存储数据(白名单),多个ip以空格隔开 hosts deny = 0.0.0.0/32 #设置禁止哪些主机或网段可以向备份服务器存储数据(黑名单) auth users = rsync_backup #认证用户,远程虚拟连接用户 secrets file = /etc/rsync.password #认证用户密码文件,格式:用户名:密码,权限必须600 [backup] #[模块名]远程访问使用模块名访问,里面的内容自定义 comment = wjq backup #说明注释 path = /backup/ #服务端用户备份的目录,用户和组,rsync.rsync
查看更多配置信息:
man rsync 查命令的参数
man rsyncd.conf 查配置参数
(4)创建用户和备份目录
[root@wjqbackup ~]# useradd rsync [root@wjqbackup ~]# id rsync uid=1001(rsync) gid=1001(rsync) groups=1001(rsync) [root@wjqbackup ~]# mkdir -p /backup [root@wjqbackup ~]# ls -ld /backup/ drwxr-xr-x 2 root root 4096 Oct 27 17:04 /backup/ [root@wjqbackup ~]# chown -R rsync.rsync /backup/ [root@wjqbackup ~]# ls -ld /backup/ drwxr-xr-x 2 rsync rsync 4096 Oct 27 17:04 /backup/
(5)启动和检查
[root@wjqbackup ~]# systemctl status rsyncd ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled) Active: inactive (dead) [root@wjqbackup ~]# systemctl start rsyncd [root@wjqbackup ~]# systemctl enable rsyncd #设置开机自启动 Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. [root@wjqbackup ~]# systemctl status rsyncd ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2019-10-27 17:05:02 CST; 1min 6s ago Main PID: 4726 (rsync) CGroup: /system.slice/rsyncd.service └─4726 /usr/bin/rsync --daemon --no-detach Oct 27 17:05:02 wjqbackup systemd[1]: Started fast remote file copy program daemon. Oct 27 17:05:02 wjqbackup systemd[1]: Starting fast remote file copy program daemon...
查看进程和后端
[root@wjqbackup ~]# ps -ef | grep sync | grep -v grep root 4726 1 0 17:05 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [root@wjqbackup ~]# netstat -lntup | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4726/rsync tcp6 0 0 :::873 :::* LISTEN 4726/rsync [root@wjqbackup ~]# lsof -i:873 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 4726 root 3u IPv4 28037 0t0 TCP *:rsync (LISTEN) rsync 4726 root 5u IPv6 28038 0t0 TCP *:rsync (LISTEN)
(6)配置密码文件
[root@wjqbackup ~]# echo "rsync_backup:xxxxxx" > /etc/rsync.password [root@wjqbackup ~]# chmod 600 /etc/rsync.password [root@wjqbackup ~]# cat /etc/rsync.password rsync_backup:wjqbackup [root@wjqbackup ~]# ls -l /etc/rsync.password -rw------- 1 root root 23 Oct 27 17:09 /etc/rsync.password
到此,服务端配置完成!
3、客户端配置
配置认证密码文件
[root@wjq ~]# echo "xxxxxxx" > /etc/rsync.password [root@wjq ~]# chmod 600 /etc/rsync.password [root@wjq ~]# cat /etc/rsync.password
4、配置测试
(1)客户端推送数据到服务器端
[root@wjq ~]# rsync -avz /tmp/*.sql rsync_backup@10.105.242.174::backup --password-file=/etc/rsync.password sending incremental file list grants.sql user.sql user_info.sql sent 2474 bytes received 65 bytes 5078.00 bytes/sec total size is 10346 speedup is 4.07
验证服务器端
[root@wjqbackup ~]# ll /backup/ total 16 -rw-r--r-- 1 rsync rsync 1338 Oct 26 23:07 grants.sql -rw-r--r-- 1 rsync rsync 5636 Oct 26 22:44 user_info.sql -rw-r--r-- 1 rsync rsync 3372 Oct 26 23:14 user.sql
(2)从服务器端拉取数据到客户端
[root@wjq ~]# mkdir /test [root@wjq ~]# rsync -avz rsync_backup@10.105.242.174::backup/ /test --password-file=/etc/rsync.password receiving incremental file list ./ grants.sql user.sql user_info.sql sent 87 bytes received 2535 bytes 5244.00 bytes/sec total size is 10346 speedup is 3.95 [root@wjq ~]# ll /test/ total 16 -rw-r--r-- 1 root root 1338 Oct 26 23:07 grants.sql -rw-r--r-- 1 root root 5636 Oct 26 22:44 user_info.sql -rw-r--r-- 1 root root 3372 Oct 26 23:14 user.sql
(3)增量测试
[root@wjq ~]# touch /tmp/test.sql [root@wjq ~]# ll /tmp/*.sql -rw-r--r-- 1 root root 1338 Oct 26 23:07 /tmp/grants.sql -rw-r--r-- 1 root root 0 Oct 27 17:29 /tmp/test.sql -rw-r--r-- 1 root root 5636 Oct 26 22:44 /tmp/user_info.sql -rw-r--r-- 1 root root 3372 Oct 26 23:14 /tmp/user.sql [root@wjq ~]# rsync -avz /tmp/*.sql rsync_backup@10.105.242.174::backup --password-file=/etc/rsync.password sending incremental file list test.sql sent 120 bytes received 27 bytes 294.00 bytes/sec total size is 10346 speedup is 70.38
拓展:还有个问题我们我们不止一个客户需要上传文件。如何让不同用户上传到不同的模块呢?
# 只需要在/etc/rsyncd.conf配置文件中,添加如下的模板即可:
[data] comment = wjq data path = /data [root@wjqbackup ~]# mkdir -p /data [root@wjqbackup ~]# chown -R rsync.rsync /data/ [root@wjqbackup ~]# ls -ld /data/ drwxr-xr-x 2 rsync rsync 4096 Oct 27 17:04 /data/
客户端主机名:wjqtest
[root@wjqtest ~]# rsync -avz /tmp/*.sql rsync_backup@10.105.242.174::data --password-file=/etc/rsync.password
参考连接
http://www.samba.org/ftp/rsync/rsync.html
https://my.oschina.net/ccLlinux/blog/1859116
https://www.jianshu.com/p/691be0b9eda9
https://www.jianshu.com/p/0223ed4f847f