使用rsync同步目录
本文描述了linux下使用rsync单向同步两个机器目录的问题。 使用rsync同步后可以保持目录的一致性(含删除操作)。
数据同步方式
从主机拉数据
备机上启动的流程
同步命令:
rsync -avzP --delete root@{remoteHost}:{remoteDir} {localDir}
参数说明:
-a 参数,相当于-rlptgoD(-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件);
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息;
示例:
rsync -avzP --delete root@192.168.1.100:/tmp/rtest1 /tmp/
向备机推数据
主机上启动的流程
同步命令:
rsync -avzP --delete {localDir} root@{remoteHost}:{remoteDir}
示例:
rsync -avzP --delete /tmp/rtest1 root@192.168.1.101:/tmp/
自动同步配置
描述同步时不输入密码的配置的方法。
使用ssh key
该方法可以直接使用rsync命令进行同步,同步过程中无需输入密码。
在主机上产生ssh key :
ssh-keygen -t rsa
在备机上加入pubkey
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.101
或者手动添加:
在主机上执行以下命令获取pubkey:
cat ~/.ssh/id_rsa.pub
在备机上加入key内容:
vi ~/.ssh/authorized_keys
使用pexpect自动输入密码
示例代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import pexpect
import time
import traceback def doRsync(user,passwd,ip,srcDir,dstDir,timeout=3600):
cmd = "rsync -azPq --delete {srcDir} {rUser}@{rHost}:{dstDir}".format(
rUser = user,rHost=ip,srcDir=srcDir,dstDir=dstDir
)
try:
ssh = pexpect.spawn(cmd,timeout=timeout)
print cmd
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.read()
ssh.close()
except :
#print traceback.format_exc()
pass if __name__ == '__main__':
doRsync("root","","192.168.1.101","/tmp/rtest1","/tmp")
上面是使用python实现的代码,大家可根据情况用其它语言实现该功能。
其它
1、rsync在执行过程中被kill掉会怎么样;
http://unix.stackexchange.com/questions/5959/how-can-i-pause-resume-rsync
It is safe to kill an rsync process and run the whole thing again; it will continue where it left off. It may be a little inefficient, particularly if you haven't passed --partial (included in -P), because rsync will check all files again and process the file it was interrupted on from scratch.
rsync被kill掉是安全的,下次启动时还可以正常工作。
2、rsync不能指定时间段;
1)该问题可以通过kill来解决
2)或者使用pexpect的timeout参数来控制
3)可以先通过find查找过滤出文件夹的名字,然后使用rsync进行同步 这个可以根据现有业务的特征进行,比如:
find /tmp -name '*' -newermt '2016-03-08' ! -newermt '2016-03-20'
3、rsync在写文件过程中同步(比如录音过程中执行rsync操作)
经测试,rsync会同步部分文件内容,文件写入完成后再执行rsync会保持文件的一致
4、当文件数量达到百万级以上时,rsync同步时扫描改变的文件非常耗时
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2016/20160818_使用rsync同步目录.md
欢迎补充
使用rsync同步目录的更多相关文章
- rsync同步目录及同步文件
最简单的只读同步工作. 一,服务端的配置 1,安装rsync(阿里云默认已有此程序) 略 2,生成文件rsyncd.conf,内容如下: #secrets file = /etc/rsyncd.sec ...
- rsync同步目录
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) -r, --recursive recurse into directories - ...
- [CentOS] rsync同步目录进行备份文件
操作不难,网上一堆.这里列几个 CentOS7 参考地址: https://www.server-world.info/en/note?os=CentOS_7&p=rsync Copy fil ...
- 运维工作中常用到的几个rsync同步命令
作为一个运维工程师,经常可能会面对几十台.几百台甚至上千台服务器,除了批量操作外,环境同步.数据同步也是必不可少的技能.说到“同步”,不得不提的利器就是rsync. 下面结合本人近几年运维工作中对这一 ...
- rsync+inotify 实现资源服务器的同步目录下的文件变化时,备份服务器的同步目录更新,以资源服务器为准,去同步其他客户端
测试环境: 资源服务器(主服务器):192.168.200.95 备份服务器(客户端):192.168.200.89 同步目录:/etc/test 同步时使用的用户名hadoop密码12345 实验目 ...
- Linux使用rsync客户端与服务端同步目录进行备份
一.服务端设置 1. 修改 server 端配置 # vi /etc/rsyncd.conf 修改: uid = nobody # 该选项指定当该模块传输文件时守护进程应该具有的uid.默认值为&qu ...
- rsync实现目录同步
rsync rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. 外文名 rsync 全 ...
- 使用rsync, 向另外一台服务器同步目录和文件的脚本
#!/bin/bash #亚特兰蒂斯-同步目录#定时任务ini_file="/usr/local/sunlight/conf/rsync-file.ini"target_ip=&q ...
- puppet使用rsync模块同步目录和文件
puppet使用rsync模块同步目录和文件 2013-09-23 14:28:57 分类: LINUX 环境说明: OS : CentOS5.4 ...
随机推荐
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- Thinking in Unity3D:材质系统概览
关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的引擎 ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
- JavaScript随笔6
Ajax:(1) 阻止缓存?+t = new data(); eval可以把string变为数组(2) get:放入URL username = &password = ; 容量有小 安全性差 ...
- Maven在Eclipse中的实用小技巧
前言 我们在开发的工程中很多都是Maven项目,这样更加便于我们jar包的管理.而我们一般使用的IDE都是Eclipse,由于我们在日常的开发过程中会经常要用到一些Maven的操作,所以我今天 ...
- 初步认识Node 之Web框架
上一篇我们认识了Node是什么之后,这一篇我们主要了解的就是它的框架了.而它的框架又分为两大类,Web框架和全栈框架,接下来我们一个一个的来了解. Web框架 Web框架可以细分为Web应用程序 ...
- 后台管理UI的选择
最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1.美观.大方.简洁 2.兼容I ...
- [Algorithm] 使用SimHash进行海量文本去重
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...
- 读书笔记--SQL必知必会03--排序检索数据
3.1 排序数据 子句(clause) SQL语句由子句构成.一个子句通常由一个关键字加上所提供的数据组成. ORDER BY子句可以取一个或多个列的名字,将SELECT语句检索出的数据进行排序. O ...
- 学习Spring——依赖注入
前言: 又开始动笔开了“学习Spring”系列的头…… 其实一开始写“学习SpringMVC”的几篇文章是出于想系统的了解下Spring以及SpringMVC,因为平时在公司中虽然每天都在使用Spri ...