因为知识有些零碎所以认真看,我们还是首先介绍一下什么是rsync?
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。Rsync其实是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项。
它的特性如下:
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。
准备阶段:(客户端和服务端)
[root@1 ~]# cat /etc/redhat-release #查看系统版本
CentOS Linux release 7.2.1511 (Core)
[root@1 ~]# uname -r #查看系统内核版本
3.10.0-327.el7.x86_64
[root@1 ~]# uname -m #查看系统是否64位
x86_64
首先我们还是做服务之前先把奇葩的防火墙给关掉,因为很多规则会撞到墙,注意是服务端和客户端都要做这个操作
[root@1 ~]# iptables -F
[root@1 ~]# iptables -X
[root@1 ~]# iptables -Z
[root@1 ~]# iptables -L
[root@1 ~]# setenforce 0
[root@1 ~]#vi /etc/sysconfig/selinux #修改SELINUX
首先两个虚拟机,一个是客户端一个是服务端
[root@1 ~]# yum -y install rsync #安装rsync服务
[root@1 ~]# systemctl start rsyncd.service
[root@1 ~]# systemctl enable rsyncd.service
[root@1 ~]# netstat -lnp|grep 873 #检查是否已经成功启动
[root@1 lala]# vi /root/lala/11.txt #为了测试我创建了一个TxT记事本
[root@1 lala]# scp -r /root/lala/11.txt [email protected]:/root/ #远程被文件传输过去
然后我们切换到服务端看一下
然后我们把服务端这个txt文件给删除,我们再用一种不需要密码的方式来进行传输。
[root@02 ~]# rm -rfv 11.txt
为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。客户端和服务端都要进行接下来的步骤
[root@1 ~]# ssh-keygen #客户端生成密钥
[root@2 ~]# ssh-keygen #服务端生成密钥
[root@1 ~]# cat /root/.ssh/id_rsa.pub
[root@2 ~]# cat /root/.ssh/id_rsa.pub
两个节点都执行操作:#ssh-keygen然后全部回车,采用默认值.
[root@1 ~]# vi /root/.ssh/authorized_keys
[root@1 ~]# vi /root/.ssh/authorized_keys
[root@1 ~]# scp -r /root/lala/11.txt [email protected]:/root/ #我们再从客户端尝试一次发现没有了密码这就已经成功了
回到服务端发现文档已经传过来了
本着作死的节奏,我们删除了这个文档再来一个定时脚本尝试一下
[root@1 ~]# vi copy.sh
#!/bin/bash
scp -r /root/lala/11.txt [email protected]:/root/
[root@1 ~]# cat copy.sh #我们看一下脚本的权限
[root@1 ~]# chmod 777 copy.sh #感觉权限有点低,给它一个权限。
[root@1 ~]# ./copy.sh #首先测试一下脚本看看好用不
[root@02 ~]# ls #发现已经有txt了
定时脚本就涉及到一个目录crontab,还是先介绍一下crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
[root@1 ~]# crontab -e #编辑该用户的计时器设置;
* * * * * bash /root/copy.sh 我设置的是每分钟都会去运行一下这个脚本
[root@1 ~]# crontab -l #-l:列出该用户的计时器设置;
* * * * * bash /root/copy.sh
定时做好后我们去服务端看一下
果真做好了,大功告成