likes
comments
collection
share

基于rsync的日志推送思路

作者站长头像
站长
· 阅读数 49

最初的时候,在不同服务器之间同步文件的时候,会经常使用scp,然后定时执行,今天从以为大哥身上学到了,用rsync位推送备份的核心,结合时间控制,完成之前不曾想过的细腻的日志推送备份操作,记录,分享一下,有没有考虑到的也请大家多多指正。

rsync

首先明确,这里说的是Linux rsync命令,就是remote sync(远程同步),可以用在远程同步数据,也可以用在本地同步数据,当然,和scp,cp命令还是有不同的地方了,就是全量和增量的关系,使用scp和cp会无脑的全量覆盖之前的内容,而rsync会判断数据是否存在差异,如果有差异再进行部分覆盖。先列举一下rsync的参数吧:

OPTION选项功能
-a这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 --no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a --no-l 等同于 -r、-p、-t、-g、-o、-D 选项。
-r表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。
-v表示打印一些信息,比如文件列表、文件数量等。
-l表示保留软连接。
-L表示像对待常规文件一样处理软连接。如果是 SRC 中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到 DEST。
-p表示保持文件权限。
-o表示保持文件属主信息。
-g表示保持文件属组信息。
-D表示保持设备文件信息。
-t表示保持文件时间信息。
--delete表示删除 DEST 中 SRC 没有的文件。
--exclude=PATTERN表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。
--progress表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。
-u表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。
-z加上该选项,将会在传输过程中压缩。

很多,但是常用的不是很多,这些参数建议各位作为一个参照,那么接下来看基础使用案例:

rsync -p /opt/1.txt  /opt/user/1.txt  #本地使用
rsync -p /opt/1.txt root@192.168.2.10:/opt/1.txt #远程同步

这里有一个下午注意到的额外的点,就是同步的话,如果是用的是脚本而且是远程同步需要先配置ssh免密登录,这里也附上:

ssh-keygen #生成ssh证书
#一路回车
ssh-copy-id -i /home/mysql/.ssh/id_rsa.pub root@192.168.2.10 #下发ssh证书

那么这个使用就可以使用shell脚本,python脚本更加灵活的使用了。

推送

来看一下完整的推送思路:

1、确定日志的内容,构建日志数据,日志的名称以名字和时间并联。

2、然后重点来了,推送过去的日志保留10个时间节点的,但是在使用的是软链过去的日志,这个顿时觉得厉害了,因为这样可以轻松的实现版本的回退。

3、然后编写脚本,进行定时任务。最后附上脚本:

import subprocess
​
cmd = "rsync -p 1.log root@192.168.1.2:/home/1.txt "re = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() 
​
print(re[1]
转载自:https://juejin.cn/post/7161013584112123935
评论
请登录