rsync同步基本说明
rsync的目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下文件的同步,但不能实现远程路径1到远程路径2之间的同步(scp可以实现)。
不考虑rsync的实现细节,就文件同步而言,涉及了源文件和目标文件的概念,还涉及了以哪边文件为同步基准。例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。反之,如果想让本地主机上的文件和目标主机上的文件保持同步,则目标主机上的文件为同步基准,实现方式是将目标主机上的文件作为源文件拉取到本地。当然,要保持本地的两个文件相互同步,rsync也一样能实现,这就像Linux中cp命令一样,以本地某文件作为源,另一文件作为目标文件,但请注意,虽然rsync和cp能达到相同的目的,但它们的实现方式是不一样的。
既然是文件同步,在同步过程中必然会涉及到源和目标两文件之间版本控制的问题,例如是否要删除源主机上没有但目标上多出来的文件,目标文件比源文件更新(newer than source)时是否仍要保持同步,遇到软链接时是拷贝软链接本身还是拷贝软链接所指向的文件,目标文件已存在时是否要先对其做个备份等等。
rsync同步过程中由两部分模式组成:决定哪些文件需要同步的检查模式以及文件同步时的同步模式。
- 检查模式是指按照指定规则来检查哪些文件需要被同步,例如哪些文件是明确被排除不传输的。默认情况下,rsync使用”quick check”算法快速检查源文件和目标文件的大小、mtime(修改时间)是否一致,如果不一致则需要传输。当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式,比如”–size-only”选项表示”quick check”将仅检查文件大小不同的文件作为待传输文件。rsync支持非常多的选项,其中检查模式的自定义性是非常有弹性的。
- 同步模式是指在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外操作。rsync也提供非常多的选项使得同步模式变得更具弹性。
相对来说,为rsync手动指定同步模式的选项更常见一些,只有在有特殊需求时才指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。
安装步骤
安装nginx
1 | yum -y install nginx |
配置nginx
1 | vim /usr/local/nginx/conf/nginx.conf #编辑配置文件,在http {下面添加以下内容: |
重启nginx
1 | systemctl restart nginx |
此时可在浏览器输入服务器IP地址查看是否开启了目录浏览
同步镜像源
安装rsync同步软件
1 | yum -y install rsync xinetd |
创建目录
1 | mkdir -p /usr/local/nginx/html/centos #CentOS官方标准源 |
确定源同步地址
此处选择清华大学TUNA镜像源
创建同步源脚本
1 | mkdir -p /home/crontab #创建目录 |
给脚本添加执行权限
1 | chmod +x /home/crontab/yum_rsync.sh |
创建不需要同步的文件列表
1 | cd /usr/local/nginx/html/ #进入目录 |
把不需要同步的目录写到上面对应的文件中,每行一个目录,如:
1 | vim exclude_epel.list |
添加定时脚本任务
1 | vim /etc/crontab #在最后一行添加以下代码 |
注意:等待脚本执行完毕,首次同步,耗费的时间比较长!
创建repo配置文件
CentOS7-centos配置文件
1 | # CentOS-Base.repo |
CentOS7-epel配置文件
1 | [epel] |
测试
1 | yum clean all |