作用:
1.本地的备份 类似cp命令 意义不大
2.远程的拷贝 类似scp命令 意义不大 (增量备份)
如果第一次远程执行文件拷贝动作使用scp和rsync一样
如果第二次远程执行,有新增加的文件可以使用rsync命令
3.守护进程模式 持续不断地在后台运行,接收客户端发送的重要数据。类似于百度网盘。
scp 每次都是全量拷贝
rsync 每次都是增量拷贝
全量演示:
[root@backup ~]#scp -r oldboy/ 10.0.0.7:/root/
[root@backup ~]#touch oldboy/{10..20}.txt
[root@backup ~]#scp -r oldboy/ 10.0.0.7:/root/
在拷贝查看过程,还是将所有的文件重新拷贝
增量演示:
[root@backup ~]#touch oldboy/{1..3}.txt
[root@backup ~]#rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password:
sending incremental file list
oldboy/
oldboy/1.txt
oldboy/2.txt
oldboy/3.txt
sent 224 bytes received 77 bytes 31.68 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#touch oldboy/4.txt
[root@backup ~]#rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password:
sending incremental file list
oldboy/
oldboy/4.txt
sent 175 bytes received 39 bytes 28.53 bytes/sec
total size is 0 speedup is 0.00
然后再执行远程拷贝,发现只会拷贝4.txt文件
一、Rsync三种工作模式
本地模式: 类似cp 了解
Local: rsync [OPTION...] SRC... [DEST]
[root@backup ~]# rsync -avz backup.txt /opt/
远程模式: 类似scp (在有增量需求拷贝的时候或者有数据同步的要求才使用)
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC...[DEST]
拉取 命令 参数选项 用户@主机:源文件 路径
拉取:类似从网盘进行下载
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
推送 命令 参数选项 源文件 用户@主机:路径
rsync -avz 源文件 root@10.0.0.7:路径
推送: 类似将本地的文件上传到网盘
将web01服务器上的/root/oldboy目录拉取到backup的家目录
[root@backup ~]#rsync -avz 10.0.0.7:/root/oldboy /root/
将backup服务器上的oldboy目录推送到web01的家目录
[root@backup ~]#rsync -avz oldboy/ 10.0.0.7:/root/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password:
sending incremental file list
./
1.txt
2.txt
3.txt
4.txt
sent 265 bytes received 95 bytes 80.00 bytes/sec
total size is 0 speedup is 0.00
#注意rsync的目录后面加/表示拷贝目录下的文件 不加/表示拷
贝目录及下所有内容
[root@backup ~]# rsync -avz oldboy/ 10.0.0.7:/root/
Authorized users only. All activities may be
monitored and reported.
root@10.0.0.7's password:
sending incremental file list
./ # 不包含oldboy目录本身
1.txt
2.txt
3.txt
4.txt
[root@backup ~]# rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be
monitored and reported.
root@10.0.0.7's password:
sending incremental file list
oldboy/ # 包含了目录本身
oldboy/1.txt
oldboy/2.txt
oldboy/3.txt
oldboy/4.txt
#没有说明用户的时候 默认是使用当前登录的用户
[root@backup ~]# rsync -avz oldboy 10.0.0.7:/root/
当前命令未指明推送到10.0.0.7 那个用户 默认是当前backup 登录的root用户
推送时用户不存在 则推送失败 用户权限不足 也会推送失败
配置本地hosts 使用主机名执行rsync
[root@web01 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.41 backup
二、Rsync的参数选项
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录
都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件
#使用--exclude 排除文件传输
[root@web01 ~]#rsync -avz oldboy/ backup:/root --exclude=123.txt
Authorized users only. All activities may be monitored and reported.
root@backup's password:
sending incremental file list
./
hosts
passwd
# 排除多个文件
[root@web01 ~]#touch oldboy/{1..5}.txt
[root@web01 ~]#rsync -avz oldboy/ backup:/root --exclude={1..3}.txt
Authorized users only. All activities may be monitored and reported.
root@backup's password:
sending incremental file list
./
4.txt
5.txt
#排除包含在文件中的文件
[root@web01 ~]#rsync -avz oldboy/ backup:/root/ --exclude-from=/opt/ex.txt
Authorized users only. All activities may be monitored and reported.
root@backup's password:
sending incremental file list
./
123.txt
4.txt
5.txt
hosts
passwd
[root@web01 ~]#cat /opt/ex.txt
1.txt
2.txt
3.txt
#--bwlimit 限制带宽传输速度 1=1M/s
[root@web01 ~]#rsync -avzP oldboy/1g.txt backup:/root/ --bwlimit=1
Authorized users only. All activities may be monitored and reported.
root@backup's password:
sending incremental file list
1g.txt
92,995,584 8% 1.01MB/s 0:15:26
#--delete 可以让两端服务器的内容保持一致
[root@web01 ~]#ll oldboy/
total 8
-rw-r--r-- 1 root root 0 Dec 3 14:59 123.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 1.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 2.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 3.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 4.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 5.txt
-rw-r--r-- 1 root root 178 Dec 3 14:45 hosts
-rw-r--r-- 1 root root 1845 Dec 3 14:45 passwd
[root@backup ~]#ll oldboy/
total 8
-rw-r--r-- 1 root root 0 Dec 3 14:59 123.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 4.txt
-rw-r--r-- 1 root root 0 Dec 3 15:11 5.txt
-rw-r--r-- 1 root root 178 Dec 3 14:45 hosts
-rw-r--r-- 1 root root 1845 Dec 3 14:45 passwd
#以backup服务器为准
[root@web01 ~]#rsync -avz backup:/root/oldboy/ oldboy/ --delete
Authorized users only. All activities may be monitored and reported.
root@backup's password:
receiving incremental file list
deleting 3.txt
deleting 2.txt
deleting 1.txt
./
#以web01服务器为准
[root@web01 ~]#rsync -avz oldboy/ backup:/root/oldboy/ --delete
Authorized users only. All activities may be monitored and reported.
root@backup's password:
sending incremental file list
created directory /root/oldboy
./
123.txt
4.txt
5.txt
hosts
passwd
企业中使用方法
三、 Rsync守护进程
主机角色 | 外网IP(WAN) | 内网IP(LAN) | 主机名称 |
---|---|---|---|
Rsync服务端 | 10.0.0.41 | 172.16.1.41 | backup |
Rsync客户端 | 10.0.0.7 | 172.16.1.7 | web01 |
服务端
1.服务端安装rsync服务
[root@backup ~]#yum -y install rsync
2.服务端配置rsync
[root@backup ~]#rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
[root@backup ~]#vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup #定义匿名或用户 用于服务认证
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
path = /backup
3.根据配置文件创建必要的数据信息
1.#创建rsync用户
[root@backup ~]#id rsync
id: ‘rsync’: no such user
[root@backup ~]#useradd -M -s /sbin/nologin rsync
[root@backup ~]#id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
2.准备密码文件
[root@backup ~]#cat /etc/rsync.passwd
rsync_backup:123456
授权密码文件为600权限
[root@backup ~]#chmod 600 /etc/rsync.passwd
[root@backup ~]#ll /etc/rsync.passwd
-rw------- 1 root root 20 Dec 3 16:07 /etc/rsync.passwd
3.创建数据目录
[root@backup ~]#mkdir /backup
#rsync是以启动进程的用户身份往/backup目录中写入
[root@backup ~]#chown rsync.rsync /backup
[root@backup ~]#ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Dec 3 16:11 /backup/
4.服务端启动rsync服务
[root@backup ~]#systemctl start rsyncd
[root@backup ~]#systemctl enable rsyncd
#查看是否成功启动
[root@backup ~]#netstat -lnupt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3110/rsync
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 967/sshd: /usr/sbin
tcp6 0 0 :::873 :::* LISTEN 3110/rsync
tcp6 0 0 :::22 :::* LISTEN 967/sshd: /usr/sbin
udp 0 0 127.0.0.1:323 0.0.0.0:* 631/chronyd
udp6 0 0 ::1:323 :::*
客户端
客户端
需要使用守护进程模式的语法格式推送文件Push:rsync [OPTION...]SRC...[USER@]HOST::DEST
推送:rsync -avz /etc/passwd rsync_backup@10.0.0.41::模块的名称
将web01的passwd推送到服务端的/backup目录
[root@web01 ~]#rsync -avz /etc/passwd rsync_backup@10.0.0.41::backup
Password:
sending incremental file list
passwd
客户端参数选项: 密码文件——password-file=
创建密码文件
[root@web01 ~]#echo 123456 > /etc/pa.txt
[root@web01 ~]#chmod 600 /etc/pa.txt
[root@web01 ~]#rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup --password-file=/etc/pa.txt
sending incremental file list
hosts
rsync客户端的密码内置变量 临时生效 退出失效
[root@web01 ~]# export RSYNC_PASSWORD=123456
将目录拷贝到backup服务端
[root@web01 ~]#rsync -avz oldboy rsync_backup@backup::backup
在web01上下载hosts文件到当前的目录
[root@web01 ~]#rsync -avz rsync_backup@backup::backup/hosts .
receiving incremental file list
hosts
[root@web01 ~]#ll
total 4
-rw-r--r-- 1 root root 178 Dec 3 14:41 hosts
drwxr-xr-x 2 root root 45 Dec 3 16:49 oldboy
需求: 上传到backup服务器的目录需要多个增加模块的名称即可
[root@backup ~]#vim /etc/rsyncd.conf
#####################################
[backup]
path = /backup
[oo]
path = /data
创建/data 目录 并修改属主属组为
[root@backup ~]#chown rsync.rsync /data
[root@web01 ~]#rsync -avz hosts rsync_backup@backup::oo
sending incremental file list
hosts
案例
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/web01_172.16.1.7_2018-09-02 date +%F
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/web01_172.16.1.7_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器守护进程
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
#!/bin/bash
backup_dir=/backup/$(hostname)_$(hostname -I |awk '{print $2}')_$(date +%F)
mkdir -p $backup_dir
tar -zcf $backup_dir/backup_$(date +%F).tar.gz /etc/passwd /etc/service /etc/hosts
export RSYNC_PASSWORD=123456
rsync -avz $backup_dir/ rsync_backup@backup::backup #--password-file=/opt/passwd
find /backup/ -mtime +7 |xargs rm -rf
00 01 * * * root sh /server/scripts/bakcup.sh &> /dev/null
Comments NOTHING