rsync实现数据同步
希望两台机器指定目录的数据保持一致
192.168.19.252(master) 192.168.19.251(slave)
/cache
拉复制 推复制
rsync的工作模式
C/S client/server
B/S browse/server
拉复制
从服务器定期去主服务器获取数据
crontab+rsync
工作过程
1 从服务器发起连接 ip port
2 主服务器 固定ip 开放port(开服务)
3 需要授权 user password
制作rsync服务
服务器端:
1、编辑配置文件
mkdir /etc/rsyncd
vim /etc/rsyncd/rsyncd.conf
uid=root
gid=root
port=873
max connections=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
motd file=/etc/rsyncd/rsyncd.motd
read only=yes
hosts allow=192.168.19.0/24
hosts deny=*
[www]
path=/cache
list=yes
ignore errors
auth users=danny
secrets file=/etc/rsyncd/rsyncd.secrets
##如果没有生成日志文件,加上下面几行
transfer logging=yes
log format=%t %a %m %f %b
syslog facility=local3
2、创建所需文件
1)欢迎页面
Vim /etc/rsyncd/rsyncd.motd
###########
##welcome##
###########
2)创建共享目录
Mkdir /cache
3)创建密码文件并修改其权限(否则客户端无法完成验证)
vim /etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
danny:123456
3、启动rsync服务
rsync --daemon --config=/etc/rsyncd/rsyncd.conf
4、查看服务有没有运行
lsof -i:873
客户端操作:
1、创建接收目录
Mkdir /cache
2、拉取数据:
语法:rsync –avzP –delete –password-file=/path/filename username@Server::共享资源名称 /cache
rsync -avzP --delete --password-file=/etc/rsyncd.pw danny@192.168.19.252::www /cache
-a参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件
-z,传输时压缩
-P,传输进度,782448 “63% 110.64kB/s 0:00:04”
-v,传输时显示传输的文件名及其简要信息
--delete 在目标文件中删除额外的文件。
这里需要注意别忘了去创建密码文件并修改权限(必须设为600)
Vim /etc/rsyncd.pw
123456
Chmod 600 /etc/rsyncd.pw
3、结合crontab定时拉取数据
Crontab –e
* * * * * rsync -avzP --delete --password-file=/etc/rsyncd.pw danny@192.168.19.252::www /cache
配置过程中容易发生的错误:
服务器和客户端的密码文件没有被设置为600
拉复制的特点:
服务器端定义共享什么目录、共享资源名、认证用户、认证密码等
客户端定义间隔多长时间拉取服务器指定目录的数据,如果间隔时间为毫秒级时,同步小文件没有问题,但同步大文件时可能会造成数据不一致,且两端系统资源的消耗可能会比较大。
说明rsync在毫秒级同步时传输大文件会导致数据不一致的情况:
1、客户端编辑脚本如下:
Vim pull.sh
#!/bin/bash
While :
Do
Rsync –avzP –delete –password-file=/etc/rsyncd.pw cjk@192.168.19.252::www /cache
Sleep 0.001 #太快了,可以改为0.01
Done
2、给脚本加执行权限
3、结合周期性计划任务执行脚本
4、在服务器端/cache目录中使用dd创建一个2G的大文件
5、文件传输后通过md5sum filename对比两文件的MD5值,会发现不同
推复制
监测到指定目录数据变化,即同步给远程主机。
配置:
本机安装配置监测软件;远程主机上配置rsync服务。
实验环境:rhel6.7
目的:监测到19.252上/cache目录发生变化后同步给19.251的/cache目录
操作:
192.168.19.252上:(服务器端)
1、将配置文件远程拷贝到19.251上(推复制本机不需要配置rsync服务,只需要一个密码文件即可)
Scp -r /etc/rsyncd root@192.168.19.251:/etc/
2、解压监测软件
Tar –xf sersync…..tar –C /usr/src
解压之后有两个文件,confxml.xml(配置文件)和sersync2(执行文件)
3、配置检测软件的配置文件:
<sersync>
<localpath watch="/cache">
<remote ip="192.168.19.251" name="www"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="danny" passwordfile="/etc/rsyncd.pw"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
4、创建配置文件中指定的密码文件,并将权限修改为600
vim /etc/rsyncd.pw
123456
chmod 600 /etc/rsyncd.pw
5、运行检测软件
cd /usr/src/GUN-linux-x86
./sersync2 –r & ##-r可以看到启动过程,第一次启动时将被监控目录所有数据整体同步到rsync server上
192.168.19.251上:(客户端)
1、删除原先本机上存在的密码文件:
Rm –fr /etc/rsyncd.pw
2、修改rsync配置文件(仅一行):
Read only=no 开放可写的权限
3、保证已存在/cache目录
mkdir –p /cache
4、保证密码文件权限是600
chmod 600 /etc/rsyncd/rsyncd.secrets
5、运行rsync服务
rsync –daemon –config=/etc/rsyncd/rsyncd.conf
测试:
在252上的/cache目录中创建大文件,并生成md5校验码,251上会通不过去且MD5码相同
在252上的/cache目录中创建1000个小文件,会发现251上同步的比较慢
在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
Rsync的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
rsync实现数据同步的更多相关文章
- sersync+rsync实时数据同步
sersync+rsync实时数据同步 1.相关背景介绍 前面有关文章配置实现了rsync增量同步以及配置为定时同步,但是在实际生产环境中需要实时的监控数据从而进行同步(不间断同步),可以采取inot ...
- 【linux运维】rsync+inotify与sersync+rsync实时数据同步笔记
Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份通过,但rsync自身也有缺陷,同步数据时,rsync采用核心算法对远程服务器的目标文件进行对比,只进 ...
- sersync+rsync进行数据同步
一:环境 操作系统环境:redhat6.6 内核版本:2.6.32-358.el6.x86_64 rsync server:192.168.2.3(部署rsync server) rsync clie ...
- Linux系统备份还原工具4(rsync/远程数据同步工具)
rsync即是能备份系统也是数据同步的工具. 在Jenkins上可以使用rsync结合SSH的免密登录做数据同步和分发.这样一来可以达到部署全命令化,不需要依赖任何插件去实现. 命令参考:http:/ ...
- rsync 远程数据同步工具详解
rysnc 命令用法:(OPTION-参数,USER-用户,HOST-IP地址,SRC-复制源位置,DEST-复制目标位置)Shell拉:rsync [OPTION] [USER@]HOST:SRC ...
- linux之rsync远程数据同步备份
rsync服务是一种高效的远程数据备份的工具,该服务的port号为873, 是Liunx下的一种非独立服务.由xinetd超级服务管理,取代监听873port. 长处: 1.rsync能够利用ssh和 ...
- 归档 SCP SFTP RSYNC(数据同步)
tar 选项 目标文件 源文件(1 2 3) tar cf **.tar file1 file2 file3 (默认情况下 cf选项只有归档没有压缩) tar xf 从归档中提取 创建tar的存档 ...
- Rsync+sersync 数据同步指南
(1):sersync 可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或 某一个目录的名字: (2):rsync 在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变 ...
- Rsync+inotify 数据同步应用指南
Rsync+Inotify-tools (1):Inotify-tools 只能记录下被监听的目录发生了变化(包括增加.删除.修改),并没有 把具体是哪个文件或者哪个目录发生了变化记录下来: (2): ...
随机推荐
- Java基础之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...
- leetcode 206. Reverse Linked List(剑指offer16)、
206. Reverse Linked List 之前在牛客上的写法: 错误代码: class Solution { public: ListNode* ReverseList(ListNode* p ...
- Qt中 .pro 文件和 .pri 文件简介
*.pro 这是一个典型的Qt示例程序的.pro文件(propriprfprl.pro): TEMPLATE = app CONFIG += QT QT += core gui TARGET = pr ...
- Omi框架学习之旅 - 生命周期 及原理说明
生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...
- C++11 并发指南四(<future> 详解一 std::promise 介绍)
前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...
- 一、java三大特性--封装
封装字面意思即包装.专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部 ...
- 一个JAVA程序员成长之路分享
我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉 ...
- 从Stampery到Chronicled,区块链公证业务的实践
Stampery就是这样一家利用比特币区块链技术代替公证人的创业公司,能为所有的敏感文件提供具有法律约束力的证明.可以用Stampery证明任何文件,它能很好地保护知识产权,证明遗嘱.宣誓.合同.家庭 ...
- 本地开发环境搭建(windows)
一.虚拟器安装 1.概念 ・为什么要搭建搭建模拟环境 在租借服务器前用手中的PC模拟一个服务器的环境,可以打包与团队人员分享 ・什么是Vagrant https://segmentfault.com/ ...
- python-深浅copy-18
# 赋值运算l1 = [1,2,3]l2 = l1l1.append('a')print(l1,l2) # [1, 2, 3, 'a'] [1, 2, 3, 'a'] #copyl1 = [1,2,3 ...