设为首页 收藏本站
查看: 3047|回复: 0

[经验分享] Centos RSync+Shell实现数据定时同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-25 10:30:51 | 显示全部楼层 |阅读模式
Centos RSync+Shell实现数据定时同步
我们前面介绍了几篇关于Centos相关服务安装及配置,今天我们主要介绍如何实现本地与远程计算机的数据目录同步,在我之前bolg中有一篇通过shell实现本地与远程计算机的数据同步的文章,通过shell同步实现指定目录的复制及覆盖操作不是那么的方便,因为复制目录及覆盖目录只会增量,不会减量,比如:原来的本地有一个目录下的abc.txt被同步到了远程计算机的指定目录后,当本地目录下的abc.txt文件删除后,远程计算机同步目录下的abc.txt依然存在,所以这样导致数据信息不准确,今天了我们为了解决这样的问题,我们准备使用rsync+shell脚本进行定期数据同步。说到Rsync相信大家已经很熟悉了,但是很多文章中都介绍了,配置了Rsync server和rsync client的数据自动同步,这样结果当然好,但是对于服务配置上稍稍有点复杂,对于一个初学者来说还是有点难度,所以我们今天不准备配置rsync server 和rsync client实现自动同步,而是使用rsync client 和shell脚本定时同步数据,对于rsync server 和rsync client结合实现数据的双向同步我们下一篇文章中介绍;我们最最后再重申月一下Rsync 同步目录数据使用的SSH进行同步的;所以我们首先要将服务器之间的SSH服务互相通信,然后还需要注意一点是数据同步需要配置SSH-KEY,这样数据同步就无需输入密码了;
环境介绍:centos 6.4  + rsync + shell   DB1:192.168.6.28  DB2: 192.168.6.38
环境需求:我们需要将DB1服务器上的指定目录下的文件定时同步到DB2服务器上的指定目录;
我们使用的是rsync服务进行数据同步,对于rsync有很多参数,具体见下:
--help
选项
说明
-a,--archive
归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
-r,--recursive对子目录以递归模式处理
-l,--links
保持符号链接文件
-H,--hard-links
保持硬链接文件
-p,--perms
保持文件权限
-t,--times保持文件时间信息
-g,--group
保持文件属组信息
-o,--owner保持文件属主信息 (super-user only)
-D保持设备文件和特殊文件 (super-user only)
-z,--compress
在传输文件时进行压缩处理
--exclude=PATTERN
指定排除一个不需要传输的文件匹配模式
--exclude-from=FILE从FILE中读取排除规则
--include=PATTERN
指定需要传输的文件匹配模式
--copy-unsafe-links拷贝指向SRC路径目录树以外的链接文件
--safe-links
忽略指向SRC路径目录树以外的链接文件(默认)
--existing仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件
--ignore-existing忽略那些已经存在于接收端的文件,仅备份那些新创建的文件
-b,--backup当有变化时,对目标目录中的旧版文件进行备份
--backup-dir=DIR与-b结合使用,将备份的文件存到 DIR 目录中
--link-dest=DIR当文件未改变时基于 DIR 创建硬链接文件
--delete删除那些接收端还有而发送端已经不存在的文件
--delete-before接收者在传输之前进行删除操作 (默认)
--delete-during
接收者在传输过程中进行删除操作
--delete-after接收者在传输之后进行删除操作
--delete-excluded
接收者在传输之后进行删除操作
-e,--rsh=COMMAND
指定替代 rsh 的 shell 程序
--ignore-errors即使出现 I/O 错误也进行删除
--partial
保留那些因故没有完全传输的文件,以是加快随后的再次传输
--progress在传输时显示传输过程
-P等价于--partial--progress
--delay-updates将正在更新的文件先保存到一个临时目录(默认为 “.~tmp~”),待传输完毕再更新目标文件
-v,--verbose详细输出模式
-q,--quiet精简输出模式
-h,--human-readable输出文件大小使用易读的单位(如,K,M等)
-n,--dry-run
显示哪些文件将被传输
--list-only仅仅列出文件而不进行复制
--rsync-path=PROGRAM指定远程服务器上的 rsync 命令所在路径
--password-file=FILE从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
-4,--ipv4使用 IPv4
-6,--ipv6使用 IPv6
--version打印版本信息
--help显示帮助信息
一、安装rsync服务
首先在DB1server上安装rsync client服务;DB1 server是源服务器
1
yum install rsync



wKiom1e9Okqigk6-AAClf9TLfvw927.jpg
安装完成
wKiom1e9Ok7xqVbIAADinPWjUtc616.jpg
我们同时在DB2server也安装rsync服务;
1
yum install rsync



我们服务已经安装好了;
wKiom1e9Ok_xQkdsAADjFh7DaYY401.jpg
二、配置key验证
接下来我们需要配置key验证,因为数据同步我们不能使用密码验证后再传输同步数据,所以我们需要配置key认证,这样本地服务器与远程服务器之间同步就不需要密码验证了;
其实key验证我们前面的文章中已经有写了,为了方便在此还是说说。在源服务器上我们通过ssh-keygen生成一对验证秘钥,一个公钥,一个私钥;私钥放在远程服务器上即可,私钥需要公钥验证后才可以匹配,所以相对还是比较安全的;
1
ssh-keygen -t rsa     回车;



因为之前服务器上使用注册的,所以就拿来直接用了;计算机名不一样;请忽略即可;
wKiom1e9OlDDzqjFAABlen1BPXg623.jpg
创建目录,认证目录;然后一路回车
wKioL1e9OlGCtFdjAAFl8skLYk4721.jpg
1
2
3
在/root/.ssh 目录下生成了一对密钥文件
id_rsa   私钥
id_rsa.pub     公钥



wKiom1e9OlLwQwmVAAA4x5a709o837.jpg
1
2
ssh-copy-id ipaddress
ssh-copy-id 192.168.6.38



只在脚本执行的机器上或者源服务器上执行即可
会自动将公钥拷贝到目标服务器上;
wKiom1e9OlLxzCbIAACx0RliY74831.jpg
到此我们就结束了key的配置;
如果提示以下错误的话,我们需要修改hosts
reverse mapping checking getaddrinfo for bogon failed – POSSIBLE BREAK-IN ATTEMPT! 错误,但不影响登录。
原因:ssh 登录的时候会做一系列安全检查,其中有一项是 主机名与ip地址是否能解析,如果解析不了就会报这个错误。
解决方法:在/etc/hosts 文件加上对方的 ip地址  主机名,可以ping通主机名即可。
如果你有dns服务器 ,在服务器上做解析也行。总之,ping主机名必须解析到对应的ip地址;
三、创建数据同步目录;
我们在DB1server上创建同步目录;
1
2
mkdir SourceDirectory  创建目录
cd SourceDirectory     进入目录



wKioL1e9OlOyCtysAACwLh37ICs482.jpg
然后我们在SourceDirectory目录创建几个测试文件;
vim 1.txt
wKiom1e9OlSyNoxKAAA8jKWL07E642.jpg
然后我们在DB2server上创建target目标目录;
wKiom1e9OlTS92DlAAC2fX7HiSE522.jpg
接下来我们就是数据同步了;我们在没有TargetDirectory目录下创建任何文件,当前目录下为空;
我们使用rsync命令实现DB1--->DB2的数据同步;
执行“推”复制同步----就是将本地/root/SourceDirectory目录下的数据远程同步到192.168.6.38服务器下的/root/TargetDirectory目录下;
注:如果目录结尾不加“/”的话,意思就成将该文件夹同步到目标目录了;
1
synch -avz --delete /root/SourceDirectory/ root@192.168.6.38:/root/TargetDirectory/



wKioL1e9OleyQpxlAACF0sqKir4428.jpg
我们在目标服务器上查看同步的数据;
wKioL1e9OleyfQ-ZAACgtzWbAts240.jpg
当然我们也可以实现拉的操作:执行“拉”复制同步----就是将远程服务器192.168.6.38下的/root/TargetDirectory目录下的数据同步到本地/root/SourceDirectory目录下;数据远程同步到192.168.6.38服务器下的/root/TargetDirectory目录下
1
rsync -avz --delete root@192.168.6.38:/root/TargetDirectory/ /root/SourceDirectory/



我们先在DB2server上创建一个文件及编辑内容;
vim 2.txt
wKioL1e9Oliwblf8AAA78mlPFPM522.jpg
wKiom1e9OlnAhRu0AABf1aqc2hk317.jpg
接下来我们在DB1server上查看效果;
wKioL1e9OlmhjRKvAABh9zv5TY0512.jpg
我们运行拉的操作命令
1
rsync -avz --delete root@192.168.6.38:/root/TargetDirectory/    /root/SourceDirectory/



wKiom1e9OlrQVmeUAAB_M_PGqyk017.jpg
然后我们查看执行结果;数据同步完成;
wKioL1e9OluhRJfIAADLNJ0Gn3Q115.jpg
四、使用shell脚本定时同步数据;
我们在创建一个sh文件,然后添加执行命令即可
1
2
3
4
5
6
7
8
9
vim rsyncshell.sh
#!/bin/sh
Push_Source="/root/SourceDirectory/"
Pull_Source="root@192.168.6.38:/root/TargetDirectory/"
Push_Target="root@192.168.6.38:/root/TargetDirectory/"
Pull_Target="root/SourceDirectory"
#rsync -avz --delete /root/SourceDirectory/ root@192.168.6.38:/root/TargetDirectory/    ----->从本地“推”数据同步   rsync -avz --delete $Push_Source $Push_Target
#rsync -avz --delete root@192.168.6.38:/root/TargetDirectory/ /root/SourceDirectory/   ----->从远程“拉”数据同步    #rsync -avz --delete $Pull_Target $Pull_Source
echo "$(date +%Y-%m-%d_%H:%M:%S) -The Data Directoty:$Push_Source to $Push_Target had Sync Sucess" >>/var/log/DataSync.log



wKiom1e9OlySOOPqAACvWGyGALM766.jpg
我们给脚本赋予执行权限,再次
1
chomd 700 rsyncshell.sh



wKioL1e9Olyxi0A0AADQ_pft0Iw285.jpg
我们测试一下脚本;首先我们编辑DB1Server上的数据目录
wKioL1e9Ol2CXjR5AACKU6seouY995.jpg
wKioL1e9Ol7xbGnZAAAlMUMnfNc560.jpg
我们执行脚本
1
./rsyncshell.sh



wKiom1e9Ol-BpxmZAACm8lO456w558.jpg
我们查看DB2serve上的目录结构
wKioL1e9Ol_w2HlrAACNBaJh5KI012.jpg
对了我们在参数中添加了一个delete参数;我们来演示一下效果;
--delete参数的效果是当源目录中的文件和目标目录文件不统一时就会以源头为准,比如源目录下有1.txt\2.txt\3.txt,目标目录下有1.txt\2.txt\3.txt\4.txt,当执行同步的时候,会以源目录为准,源目录没有4.txt,所以会删除目标目录下的4.txt文件。以达到数据统一的目的;
我们现在确认测试数据;DB1serve(源)同步目录有1.txt、2.txt、3.txt
wKiom1e9OmCQ9s_SAABU31DiLc4681.jpg
同时更新源文件1.txt的内容;
wKioL1e9OmHwC9gnAAKeK9Hc1rA791.jpg
目标服务器数据;DB2server(目标)同步目录有:1.txt、2.txt、3.txt、4.txt
wKiom1e9OmKz50NVAABeRZUvFzs316.jpg
同时确认目标服务器的1.txt文件内容;
wKiom1e9OmKQogqVAACmb0b3x1k869.jpg
所以当我们执行脚本,会将内文件内容及同步目录下的数据进行以源为准进行更新
执行结果:DB2目标服务器的4.txt文件删除,1.txt文件内容以源服务器上的1.txt文件内容为准进行更新
执行脚本;结果我们已经看见了;
wKiom1e9OmOxt5XWAACNB3Hjc98742.jpg
具体我们查看DB2server上的目录结构及文件内容
wKioL1e9OmTBRnFbAAC1aTwFcwA116.jpg
wKioL1e9OmXDwaEEAAKnq6MtMec125.jpg
因为脚本内定义了日志记录,所以我们可以查看log
1
cat /var/log/DataSync.log



wKioL1e9OmaBr78jAAFzPiZqXKs212.jpg
5,使用计划任务进行脚本运行;
我们前面已经介绍了linux中使用 crontab 进行定义计划任务
linux上计划任务的命令为crontab ,通过后面的参数即可配置;我们可以通过man crontab查看相关帮助。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。-i:在删除用户的crontab文件时给确认提示。同样:crontal 的参数格式为  * * * * *   
一个 * 一小时当中的第几分钟 0-59
第二个 * 一天当中的第几个小时 0-23
第三个 * 一个月当中的第几天 1-31
第四个 * 一年当中的第几个月 1-12
第五个 * 一周当中的星期几 1-7
wKiom1e9OmeDRSrdAAEGkOFDJCg253.jpg
我们确认脚本存放路劲
1
/root/shell/



wKiom1e9OmewueaFAABre9vxp9I494.jpg
1
crondtal –e  编辑计划任务



每天晚上22:30执行一次
wKioL1e9OmjTPtJ4AAAqBc4xyic521.jpg
1
crontal –l 查看计划任务



wKioL1e9OmjB4yd_AABePEf87cU739.jpg
因为我们脚本内添加了log记录,所以我们可以查看对应的log,查看是否执行成功
1
cat /var/log/DataSync.log



wKioL1e9OmmycGsdAAFzPiZqXKs987.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-262792-1-1.html 上篇帖子: CentOS 7源码安装httpd服务 下篇帖子: 使用mailx发送邮件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表