rsync
Rsync简介
rsync英文称为remote synchronization,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及曾量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
在同步数据的时候,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可是实现快速的同步备份数据。
rsync官方地址:TP
rsync监听端口:873
rsync运行模式:C/S
安装
| 主机名称 | 角色 |
|---|---|
| 10.0.0.100 | rsyc服务端 |
| 10.0.0.200 | rsyc客户端 |
服务端
[root@backup ~]# systemctl stop firewalld
[root@backup ~]# systemctl disable firewalld
[root@backup ~]# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
[root@backup ~]# yum -y install rsync
#配置
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync # 运行进程的用户
gid = rsync # 运行进程的用户组
port = 873 # 监听端口
fake super = yes # 无需让rsync以root身份运行,允许接收文件的完整属性
use chroot = no # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
ignore errors # 忽略错误信息
read only = false # 对备份数据可读写
list = false # 不允许查看模块信息
auth users = rsync_backup # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径
[backup] # 定义模块backup信息
comment = commit # 模块注释信息
path = /backup # 定义接收备份数据目录
# 创建rsync账户,不允许登录不创建家目录
[root@backup ~]# useradd -M -s /sbin/nologin rsync
# 创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
#创建虚拟用户密码文件, 授权600安全权限(用于客户端连接时使用的用户)
[root@backup ~]# echo "rsync_backup:zls" >/etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl status rsyncd
[root@backup ~]# systemctl enable rsyncd
[root@backup ~]# netstat -lnpt
客户端 使用
客户端:
# 方式一:适合终端执行指定用户密码文件
[root@nfs01 ~]# yum install rsync -y
[root@nfs01 ~]# echo "zls" > /etc/rsync.pass
[root@nfs01 ~]# chmod 600 /etc/rsync.pass
# 方式二:脚本中使用,强烈推荐方式
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
实战
#实战1 场景-将客户端的 /backup/下的文件推到服务端
# rsync -avz /backup/ rsync_backup@10.0.0.100::backup
sending incremental file list
./
1.txt
#实战2 场景-将客户端的A推到服务端
# rsync -avz ./A rsync_backup@10.0.0.100::backup
sending incremental file list
A/
A/2.txt
sent 117 bytes received 47 bytes 328.00 bytes/sec
total size is 0 speedup is 0.00
#服务端查看:
# ls /backup/
1.txt A
#3 客户端拉去服务端模块backup的文件到本地/opt
# rsync -avz rsync_backup@10.0.0.100::backup /opt
receiving incremental file list
./
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
A/
A/2.txt
sent 176 bytes received 484 bytes 1,320.00 bytes/sec
total size is 0 speedup is 0.00
[root@10 ~]# ls /opt/
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt A
#4 Rsync实现数据无差异同步
#拉取远端数据:远端与本地保持一致,远端没有本地有会被删除, 造成客户端数据丢失
[root@10 ~]# ls /opt/
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt A
[root@10 ~]# rsync -avz rsync_backup@10.0.0.100::backup^Copt
[root@10 ~]# ls
A anaconda-ks.cfg
[root@10 ~]# touch /opt/other.txt
[root@10 ~]# ls/op
-bash: ls/op: No such file or directory
[root@10 ~]# ls /opt/
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt A other.txt
[root@10 ~]# rsync -avz --delete rsync_backup@10.0.0.100::backup /opt
receiving incremental file list
deleting other.txt
./
sent 28 bytes received 217 bytes 490.00 bytes/sec
total size is 0 speedup is 0.00
#推送数据至远端:本地与远端保持一致, 本地没有远端会被删除, 造成服务器端数据丢失
[root@10 backup]# ls #源端
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt A
[root@10 ~]# rsync -avz --delete /opt/ rsync_backup@10.0.0.100::backup
sending incremental file list
deleting 6.txt
deleting 5.txt
deleting 4.txt
deleting 3.txt
deleting 2.txt
deleting 1.txt
./
sent 105 bytes received 82 bytes 374.00 bytes/sec
total size is 0 speedup is 0.00
[root@10 backup]# ls #源端
A
#Rsync的Limit限速
#企业案例: 某DBA使用rsync拉取备份数据时,由于文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
[root@nfs01 ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/
1 服务端 未关闭selinux
[root@localhost ~]# rsync -avz /backup/ rsync_backup@10.0.0.100::backup
sending incremental file list
rsync: mkstemp ".1.txt.qqwzlE" (in backup) failed: Permission denied (13)
rsync: failed to read xattr user.rsync.%stat for "." (in backup): Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
[root@localhost ~]# getenforce
Disabled
浙公网安备 33010602011771号