博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 的 rsync 远程同步工具
阅读量:6614 次
发布时间:2019-06-24

本文共 3846 字,大约阅读时间需要 12 分钟。

rsync 简介 :

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

它的特性如下:

  • 可以镜像保存整个目录树和文件系统。
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等等。
  • 无须特殊权限即可安装。
  • 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
  • rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
  • 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
  • 支持匿名传输,以方便进行网站镜象。

备份基本格式 :

rsync [选项] 原始位置 目标位置

rsync -参数 用户名@同步服务器的IP::共享模块名 保存位置

例如:rsync -avzP nemo@192.168.10.1::nemo /backup

参数说明:

  • -a 归档模式,相当于组合选项-rlptgoD,
  • -r 是递归 -l 是链接文件,意思是拷贝链接文件;
  • -p 表示保持文件原有权限;
  • -t 保持文件原有时间;
  • -g 保持文件原有用户组;
  • -o 保持文件原有属主;
  • -D 相当于块设备文件;
  • -z 传输时压缩;
  • -P 传输进度;
  • -v 传输时的进度等信息,和-P有点关系,自己试试。
  • -delete 删除目标位置有而原始位置没有的文件。

本案环境 :

主机名 系统 IP地址
同步源 CentOS 7.3 192.168.217.128
客户端 CentOS 7.3 192.168.217.129

配置 rsync 源服务器 :

1.默认Linux 安装 :

[root@localhost ~]# rpm -q rsyncrsync-3.0.9-18.el7.x86_64

2.配置 rsync 配置文件 :

vim /etc/rsyncd.conf  uid = nobody gid = nobody use chroot = yes                     #禁锢在家目录 address = 192.168.217.128            #监听地址 port 873                             #监听端口 log file = /var/log/rsyncd.log       #日志文件位置 pid file = /var/run/rsyncd.pid       #pid文件位置 hosts allow = 192.168.217.0/24       #允许访问的客户机地址 [wwwroot]                            #共享模块名称 path = /var/www/html                 #源目录的实际路径 comment = www.kgc.cn                 #描述信息 read only = yes                      #是否为只读   允许上传需注释 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步时不在压缩的文件类型 auth users = backuper                #授权账户                 匿名访问注释 secrets file = /etc/rsyncd_users.db  #存放账户信息的数据文件    匿名访问注释

3.创建授权账户信息 :

vim /etc/rsyncd_users.dbbackuper:abc123                 #用户名和密码chmod 600 /etc/rsyncd_users.db  #只允许root用户读写 mkdir -p /var/www/html    #没有创建 有无视

4.启动 rsync 服务 :

rsync --daemon    rsync#启动rsyncnetstat -antp | grep rsync   # 关闭服务使用 killtcp        0      0 192.168.217.128:873     0.0.0.0:*     LISTEN      17059/rsync

5.在客户端下载 :

1.在源服务器创建文本 :

echo "123" > /var/www/html/test.txt   #在源服务器写

2.在客户端下载 :

[root@localhost ~]# rsync -avz backuper@192.168.217.128::wwwroot /opt/  #下载到optPassword: receiving incremental file list./test.txtsent 83 bytes  received 158 bytes  68.86 bytes/sectotal size is 4  speedup is 0.02

3.免交互 :

vim /etc/server.passabc123                      #写入密码chmod 600 /etc/server.passrsync -az  --password-file=/etc/server.pass backuper@192.168.217.128::wwwroot /opt     #免交互

配置 rsync+inotify 实时同步 :

1.调整 inotify 内核参数 :

vim /etc/sysctl.conffs.inotify.max_queued_events = 16384   #监控事件列队fs.inotify.max_user_instances = 1024   #最多监控实例数fs.inotify.max_user_watches = 1048576  #每个实例最多监控文件数sysctl -p  #立即生效

2.安装 inotify-tools :

yum install gcc gcc-c++ make -ytar zxvf inotify-tools-3.14.tar.gz -C /opt/cd /opt/inotify-tools-3.14./configuremake && make install

3.监控目录 :

inotifywait -mrq -e modify,create,move,delete /var/www/html/  #监控 /var/www/html/ 目录# 参数说明 : -m 持续监控-r 地柜整个目录-q 简化输出信息modify 修改create 创建move   移动delete 删除
#复制会话,重新打开一个远程,链接到装有 inotify-tools [root@localhost ~]# cd /opt/[root@localhost opt]# mkdir test[root@localhost opt]# touch 1.test
#打开监视会话,显示目录下文件变动情况[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html//var/www/html/ CREATE,ISDIR test/var/www/html/ CREATE 1.test

4.编写触发式同步脚本 :

  • 1.在源服务器配置开启上传 :

vim /etc/rsyncd.confread only = no    # 改成 no netstat -antp | grep rsynctcp        0      0 192.168.217.128:873     0.0.0.0:*       LISTEN      16501/rsynckill 16501rsync --daemon
  • 2.编写脚本 :

vim /opt/inotify.sh#!/bin/bashINOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.217.128::wwwroot/"$INOTIFY_CMD | while read DIRECTORY EVENT FILEdo    if [ $(pgrep rsync | wc -l) -le 0 ] ; then        $RSYNC_CMD    fidonechmod +x /opt/inotify.sh

注意:上传到源服务器时 ,源服务器 html 的属主属组要和配置文件的 uid gid 相同,不然无法上传 。

转载于:https://blog.51cto.com/13640803/2151965

你可能感兴趣的文章
ifstream读取文件失败和乱码问题
查看>>
Android 内存泄漏分析
查看>>
Python信息采集器使用轻量级关系型数据库SQLite
查看>>
zookeeper中的exception的问题
查看>>
final+基本类型导致只编译常量类引起的错误
查看>>
分库分表的几种常见玩法及如何解决跨库查询等问题
查看>>
把GPS经纬度放入两个字符串,写入文件
查看>>
Java操作MongoDB实现CRUD
查看>>
给js文件传参数
查看>>
tomcat web.xml启动加载类
查看>>
Linux 配置SSH信任
查看>>
【九度OJ1352】|【剑指offer41】和为S的两个数字
查看>>
《android-文件大小》
查看>>
HTTPS的工作原理
查看>>
PhoneGap使用PushPlugin插件实现消息推送
查看>>
Boyer-Moore 算法介绍
查看>>
Hi~属于程序猿的专属锦鲤来了 | 转发这条锦鲤,薪水蹭蹭涨!
查看>>
关于Java中的单例模式
查看>>
Swift之GCD开线程通用模版
查看>>
datepicker
查看>>