Remote Sync :简称rsync,是一种远程同步,高效的数据备份的工具。第一次备份完全备份,以后备份就是差异备份。
scp:secure copy 同样是用来进行远程复制的命令,但是每次备份数据都是完全备份
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。
选择性保持:符号连接,硬链接,文件属性,权限,时间等
服务器:192.168.1.63
客户端:192.168.1.64
备份文件
服务器:
[root@break html]# scp a.txt [email protected]:/tmp
[email protected]'s password:
a.txt 100% 10 4.1KB/s 00:00
[root@break html]# cat a.txt
asdfasdfs
客户端
[root@break tmp]# ls -al a.txt
-rw-r--r--. 1 root root 10 4月 12 15:49 a.txt
[root@break tmp]# cat a.txt
asdfasdfs
备份目录
服务器:
[root@break ~]# mkdir test
[root@break ~]# cd test/
[root@break test]# cp /boot/* ./
cp: 略过目录"/boot/efi"
cp: 略过目录"/boot/grub"
cp: 略过目录"/boot/grub2"
[root@break test]# ls -al
总用量 119224
drwxr-xr-x. 2 root root 4096 4月 12 15:53 .
dr-xr-x---. 8 root root 4096 4月 12 15:53 ..
-rw-r--r--. 1 root root 147819 4月 12 15:53 config-3.10.0-862.el7.x86_64
-rw-------. 1 root root 74037211 4月 12 15:53 initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img
-rw-------. 1 root root 31714827 4月 12 15:53 initramfs-3.10.0-862.el7.x86_64.img
-rw-r--r--. 1 root root 304926 4月 12 15:53 symvers-3.10.0-862.el7.x86_64.gz
-rw-------. 1 root root 3409143 4月 12 15:53 System.map-3.10.0-862.el7.x86_64
-rwxr-xr-x. 1 root root 6224704 4月 12 15:53 vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
-rwxr-xr-x. 1 root root 6224704 4月 12 15:53 vmlinuz-3.10.0-862.el7.x86_64
[root@break test]# cd
[root@break ~]# scp -r /root/test/ [email protected]:/tmp
[email protected]'s password:
config-3.10.0-862.el7.x86_64 100% 144KB 19.8MB/s 00:00
initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img 100% 71MB 35.3MB/s 00:02
initramfs-3.10.0-862.el7.x86_64.img 100% 30MB 30.2MB/s 00:01
symvers-3.10.0-862.el7.x86_64.gz 100% 298KB 21.3MB/s 00:00
System.map-3.10.0-862.el7.x86_64 100% 3329KB 31.6MB/s 00:00
vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e 100% 6079KB 30.8MB/s 00:00
vmlinuz-3.10.0-862.el7.x86_64
客户端:
[root@break ~]# cd /tmp/
[root@break tmp]# ls -al
总用量 8
drwxrwxrwt. 9 root root 138 4月 12 15:54 .
dr-xr-xr-x. 17 root root 237 4月 11 22:41 ..
drwx------. 2 du du 20 4月 12 09:07 .esd-1000
drwxrwxrwt. 2 root root 6 11月 14 06:38 .font-unix
drwxrwxrwt. 2 root root 78 4月 12 09:07 .ICE-unix
drwxr-xr-x. 2 root root 4096 4月 12 15:54 test
drwxrwxrwt. 2 root root 6 11月 14 06:38 .Test-unix
-r--r--r--. 1 root root 11 4月 12 09:06 .X0-lock
drwxrwxrwt. 2 root root 16 4月 12 09:06 .X11-unix
drwxrwxrwt. 2 root root 6 11月 14 06:38 .XIM-unix
[root@break tmp]# cd test/
[root@break test]# ls -al
总用量 119220
drwxr-xr-x. 2 root root 4096 4月 12 15:54 .
drwxrwxrwt. 9 root root 138 4月 12 15:55 ..
-rw-r--r--. 1 root root 147819 4月 12 15:54 config-3.10.0-862.el7.x86_64
-rw-------. 1 root root 74037211 4月 12 15:54 initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img
-rw-------. 1 root root 31714827 4月 12 15:54 initramfs-3.10.0-862.el7.x86_64.img
-rw-r--r--. 1 root root 304926 4月 12 15:54 symvers-3.10.0-862.el7.x86_64.gz
-rw-------. 1 root root 3409143 4月 12 15:54 System.map-3.10.0-862.el7.x86_64
-rwxr-xr-x. 1 root root 6224704 4月 12 15:54 vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
-rwxr-xr-x. 1 root root 6224704 4月 12 15:54 vmlinuz-3.10.0-862.el7.x86_64
[root@break test]#
采用C/S模式,进行点对点的传输,端口号为873,想备份数据的是客户端,另外一个就是服务端。
它通过一个大的服务进行管理,这个服务是xinetd,所以我们使用的时候需要安装这个服务。
xinetd监控许多小服务,通过查看端口来启动对应的服务。例如:rsync使用873端口,当我们xinetd监听到873端口,它就会使用rsync来进行响应。
数据的同步方式有2种:推和拉。
推和拉是相对于服务端的,因为服务器也是主机,服务器发送数据的时候是往外推送数据,服务器接受别人的备份数据,这个时候可以看做是服务器在拉取别人的数据。推拉是相对的。它只看你在其中所起的作用。
rsync常见的5个命令参数:也是我们实验所需要进行的命令。
-a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
-z, --compress 压缩模式, 当资料在传送到目的端进行档案压缩.
-v , --verbose 复杂的输出信息
--delete, 删除那些目标位置有的文件而备份源没有的文件
--password-file=FILE ,从 FILE 中得到密码
步骤,可能有点繁琐,我们会以序号来进行标记,因为我们在2台主机上进行操作,难免会进行切换,请注意
服务端:(3,5可以不设置,为了温习自己的知识和安全性考虑,可以以rput向远端的root发送备份信息)
1#安装xinetd和rsync
yum install -y xinetd rsync
3#建立测试的用户
[root@break ~]# useradd rput
[root@break ~]# echo rput:123456 | chpasswd
4#建立备份数据
[root@break ~]# cd /var/www/html/
[root@break html]# cp /boot/* ./
cp: 略过目录"/boot/efi"
cp: 略过目录"/boot/grub"
cp: 略过目录"/boot/grub2"
[root@break html]# ls
config-3.10.0-862.el7.x86_64 System.map-3.10.0-862.el7.x86_64
initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
initramfs-3.10.0-862.el7.x86_64.img vmlinuz-3.10.0-862.el7.x86_64
symvers-3.10.0-862.el7.x86_64.gz
7#进行文件的备份
[root@break ~]# rsync -avz --delete /var/www/html [email protected]:/root/rsync/
[email protected]'s password:
sending incremental file list
html/
html/System.map-3.10.0-862.el7.x86_64
html/config-3.10.0-862.el7.x86_64
html/initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img
html/initramfs-3.10.0-862.el7.x86_64.img
html/symvers-3.10.0-862.el7.x86_64.gz
html/vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
html/vmlinuz-3.10.0-862.el7.x86_64
sent 122,093,819 bytes received 153 bytes 22,198,904.00 bytes/sec
total size is 122,063,334 speedup is 1.00
客户端:
2#安装xinetd和rsync
yum install -y xinetd rsync
#6创建接受的目录为rsync
[root@break ~]# mkdir rsync
#8查看备份是否成功
[root@break ~]# cd rsync/
[root@break rsync]# ls -al
总用量 8
drwxr-xr-x. 3 rget rget 18 4月 12 16:50 .
dr-xr-x---. 7 root root 4096 4月 12 16:35 ..
drwxrwxr-x. 2 root root 4096 4月 12 16:27 html
[root@break rsync]# cd html/
[root@break html]# ls
config-3.10.0-862.el7.x86_64 System.map-3.10.0-862.el7.x86_64
initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
initramfs-3.10.0-862.el7.x86_64.img vmlinuz-3.10.0-862.el7.x86_64
symvers-3.10.0-862.el7.x86_64.gz
1客户端的目录一定要写正确,写成绝对路径
2如果服务器发送的数据,指定接受端的用户一定要有权限访问要备份到的目录。实验建议用root
使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,最后把rsync以deamon方式运行
rsync.conf配置文件
全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数生效
模块参数:定义需要通过rsync输出的目录定义的参数
全局参数
参数 | 说明 |
---|---|
port | 指定后台使用端口号,默认873 |
uid | 指定当该模块传输文件时守护进程应该具有的uid |
pid | 指定当该模块传输文件时守护进程应该具有的gid |
max connections | 该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试 |
lock file | 指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。 |
motd file | 用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户 |
log file | 指定rsync的日志文件 |
pid file | 指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”,存放进程ID的文件位置 |
hosts allow | 允许访问的客户机地址 |
模块参数
模板参数 | 说明 |
---|---|
Comment | 描述模块信息 |
Path | 备份路径 |
read only | yes为只允许下载,no为可以下载和上传文件到服务器 |
auth users | 允许连接的用户 |
secrets file | 该文件的权限一定要是600 |
list | #是否允许查看模块信息 |
服务器:
4#实现备份
[root@break ~]# rsync -avz /var/www/html/ [email protected]::wwwroot
welcome to backup server
Password:
sending incremental file list
./
System.map-3.10.0-862.el7.x86_64
config-3.10.0-862.el7.x86_64
initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img
initramfs-3.10.0-862.el7.x86_64.img
symvers-3.10.0-862.el7.x86_64.gz
vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
vmlinuz-3.10.0-862.el7.x86_64
sent 122,093,798 bytes received 152 bytes 18,783,684.62 bytes/sec
total size is 122,063,334 speedup is 1.00
客户端:
#0创建用户,也就是客户端的接受者
[root@break ~]# useradd rget
#1创建配置文件,centos7有,但是centos6没有
vim /etc/rsyncd.conf
uid = root
pid = root
address = 192.168.1.64
port = 873
hosts allow = 192.168.1.0/24
use chroot = yes
max connections = 5
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
[wwwroot]
path = /root/rsync/
comment = userd for web-data root
read only = false
list = yes
auth users = rget
secrets file = /etc/rsync.passwd
#2创建说明文件和用户密码
[root@break ~]# vim /etc/rsyncd.motd
welcome to backup server
[root@break ~]# vim /etc/rsync.passwd
rget:password123
#3启动服务
[root@break ~]# rsync --daemon --config=/etc/rsyncd.conf
[root@break ~]# ps -aux | grep rsync
root 4864 0.0 0.0 114740 572 ? Ss 15:11 0:00 rsync --daemon --config=/etc/rsyncd.conf
root 8893 0.0 0.0 112720 984 pts/3 S+ 17:28 0:00 grep --color=auto rsync
#4验证备份文件
[root@break ~]# cd rsync/
[root@break rsync]# ll
总用量 119216
-rw-rwxr--. 1 root root 147819 4月 12 16:26 config-3.10.0-862.el7.x86_64
-rw-rwx---. 1 root root 74037211 4月 12 16:27 initramfs-0-rescue-6e270ed56f724f0fac3246c166cb190e.img
-rw-rwx---. 1 root root 31714827 4月 12 16:27 initramfs-3.10.0-862.el7.x86_64.img
-rw-rwxr--. 1 root root 304926 4月 12 16:27 symvers-3.10.0-862.el7.x86_64.gz
-rw-rwx---. 1 root root 3409143 4月 12 16:27 System.map-3.10.0-862.el7.x86_64
-rwxrwxr-x. 1 root root 6224704 4月 12 16:27 vmlinuz-0-rescue-6e270ed56f724f0fac3246c166cb190e
-rwxrwxr-x. 1 root root 6224704 4月 12 16:27 vmlinuz-3.10.0-862.el7.x86_64
rput,在服务器配置的用户,主要是用来进行安全的传输,因为在我们的线上,我们使用的用户不可能是root,所以创建一个rget进行发送备份文件。
rget:在客户端配置的用户,主要是用来进行模拟在非root的用户下,想要进行文件的备份该如何进行,我们设置了密码文件,模块参数以及提示信息等等。若服务器发送的数据使用模块,则不指定模块内的用户,即便是root也不能进行传输。
服务器端创建密码文件是为了免交互进行数据的备份传输。
客户端创建密码文件是为了实现模板文件,声明允许接受的用户和密码
[root@break ~]# touch passwd
[root@break ~]# echo password123 > passwd
[root@break ~]# chmod 600 passwd
[root@break ~]# rsync -avx /var/www/html/ [email protected]::wwwroot --password-file=passwd
welcome to backup server
sending incremental file list
sent 392 bytes received 12 bytes 808.00 bytes/sec
total size is 122,063,334 speedup is 302,136.97
脚本内容
#!/bin/bash
rsync -avz --delete /var/www/html/ [email protected]::wwwroot --password-file=/root/passwd
服务器端:sh a.sh
客户端:查看rsync目录的内容:前后对比,我自己在备份前增加了几个txt文件
写入以下内容,做成自动定时备份
[root@break ~]# echo "0 12 * * * sh /root/a.sh &" >> /var/spool/cron/root