文章目录
- 一、rsync介绍
- 二、rsync的特点
- 三、本地文件同步
- 四、远程文件同步
- 五、免密文件同步和更改端口后的文件同步
- 六、rsync作为系统服务
- 七、应用举例
- 七、给rsync服务添加密码
- 八、rsync搭配inotify进行实时同步
- 九、xinetd托管rsyncd服务
一、rsync介绍
1.sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
2.async异步:将数据先放到缓冲区,再周期性的去同步到磁盘。
3.rsync远程同步。
二、rsync的特点
1.可以镜像保存整个目录树和文件系统。
2.可以保留原有的权限(permission,mode)、owner、group、时间(修改时间,modify time)、软硬链接、文件acl、文件属性(attributes)信息等。
3.传输效率高,使用同步算法,只比较变化的(增量备份)。
4.支持匿名传输,方便网站镜像;也可以做验证,加强安全。
rsync与scp的区别:支持增量备份;数据同步时保持文件的原有属性。
三、本地文件同步
[root@localhost /]# rsync -av /dir1/ /dir2/ #将目录dir1里面的文件同步到目录dir2
[root@localhost /]# rsync -av /dir1 /dir2 #将目录dir1同步到目录dir2下面
[root@localhost /]# rsync -avR /dir1/ /dir3/ #保留相对路径
[root@localhost /]# rsync -av --delete /dir1/ /dir2 #dir1里面有两个文件file1和file2,dir2里面有三个文件file1、file2和file3,同步以后dir2里面会删除掉file3
四、远程文件同步
[root@localhost ~]# rsync -av linux.txt root@192.168.68.182:/root/ #同步文件linux.txt到远程服务器的root目录下
[root@localhost ~]# rsync -avR test/ root@192.168.68.182:/root #同步目录test到远程服务器的root下
[root@localhost ~]# rsync -av root@192.168.68.182:/root/linux.txt ./ #拉取远程服务器文件linux.txt到本地当前目录
[root@localhost ~]# rsync -av root@192.168.68.182:/root/test ./ #拉取远程服务器目录test到本地当前目录
五、免密文件同步和更改端口后的文件同步
1.做ssh免密以后rsync同步时就不用输入密码。
2.修改端口后用rsync同步要加-e参数运行shell
[root@localhost ~]# rsync -e "ssh -p 2222" -av rsync.txt root@192.168.68.183:/root
六、rsync作为系统服务
1.CentOS7直接有rsync服务
2.CentOS6需要创建配置文件再启动
如果rsync作为服务单独运行,底层就不需要ssh服务了
[root@localhost ~]# touch /etc/rsyncd.conf
[root@localhost ~]# rsync --daemon
七、应用举例
有代码服务器和备份服务器各一台,实现定时将代码服务器中的代码对备份服务器进行同步。
1.(代码服务器)创建测试用的文件
[root@localhost ~]# mkdir -p /app/java_project
[root@localhost ~]# mkdir /app/java_project/abc{1..3}
[root@localhost ~]# touch /app/java_project/file{1..10}.java
2.(代码服务器)修改配置文件将rsync作为系统服务运行
[root@localhost ~]# vim /etc/rsyncd.conf
#添加文件内容
[app]
path=/app/java_project
log file=/var/log/rsync.log
3.(备份服务器)创建备份目录并测试是否可以连接到rsync服务
[root@localhost ~]# mkdir -p /backup/app1_java
[root@localhost ~]# rsync -a root@192.168.68.182::
app
4.利用定时任务和脚本文件进行定时同步
编写脚本
[root@localhost ~]# vim /root/rsync_java.sh
#!/bin/bash
rsync -av root@192.168.68.182::app /backup/app1_java &>/dev/null
[root@localhost ~]# chmod +x /root/rsync_java.sh
编写计划任务
[root@localhost ~]# crontab -e
46 4 * * * /root/rsync_java.sh
七、给rsync服务添加密码
1.(代码服务器)修改配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
[app]
path=/app/java_project
log file=/var/log/rsync.log
auth users=user1,user2
secrets file=/etc/rsyncd.secrets
2.(代码服务器)创建密码文件并修改权限
[root@localhost ~]# vim /etc/rsyncd.secrets
user1:123
user2:123
[root@localhost ~]# chmod 600 /etc/rsyncd.secrets
3.(备份服务器)同步
八、rsync搭配inotify进行实时同步
1.(代码服务器)安装inotify-tools,进入到inotify-tools解压的文件编译安装
[root@localhost inotify-tools-3.13]# ./configure && make && make install
2.(代码服务器)编写脚本来进行同步
[root@localhost java_project]# vim /root/inotify.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/java_project |while read events
do
rsync -av --delete /app/java_project root@192.168.68.183:/backup/app1_java
echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done
3.(代码服务器)添加可执行权限
[root@localhost java_project]# chmod +x /root/inotify.sh
4.(代码服务器)让脚本在后台执行
如果要结束后台运行的进程,先jobs查看,然后kill %编号
[root@localhost java_project]# nohup /root/inotify.sh &
九、xinetd托管rsyncd服务
1.安装xinetd
[root@localhost ~]# yum install -y xinetd
[root@localhost ~]# rpm -ql xinetd
2.编写xinetd的配置文件
常用参数
only_from 只允许访问
no_access 拒绝访问
access_times 控制访问服务的时间段
log_type 指定日志类型
interface 并发连接数
per_source 每个IP的最大连接数
includedir /etc/xinetd.d 子配置文件
编写子配置文件(新添加的服务一般在子配置文件下面创建相应的文件)
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
3.重启xinetd服务
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# ss -tlunp|grep 873