本日志转载请注明出处,否则将追究责任!
-
rsync简介
rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输。rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次发送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH伺服文件。需要备份的终端为服务器,备份的终端为客户端,两端均需启动rsync服务,其中服务器端需要写配置文件rsync.conf.
它的特性如下:
- 可以镜像保存整个目录树和文件系统。
- 可以很容易做到保持原来文件的权限、时间、软硬链接等等。
- 无须特殊权限即可安装。
- 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
- 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
- 支持匿名传输,以方便进行网站镜像。
?
?
-
rsync采集二进制日志方案
-
需求分析
-
日志分类
操作系统:windows日志,linux日志
追加方式:短时间内在单个目录下产生大量单个文件;长时间往一个文件当中追加;两种混合。
-
采集时间要求
采集周期:实时,短周期(一天以内),每日,长周期(大于一日)。
-
-
采集方案
-
采集架构
该日志采集的过程主要分为三个部分:数据源处理,中转站处理以及目的地。流程为:使用rsync将文件从数据源备份至中转站,再通过hadoop的上传功能将文件从中转站传至目的地。
-
数据源处理
数据源(rsync的server)主要分为两类:追加目录(以tcpdump为例)以及追加文件(以系统日志为例),而追加文件又分为两类,文件可读(以linux日志为例)以及文件不可读(以windows日志为例)
?
对于数据源的处理一般分两部分,rsync的server端安装配置以及必要的文件转移。
-
-
rsync的server端配置
rsync的server端主要分为windows端和linux端,windows端server的安装和配置详见windows,linux端的配置和windows端类似,详见linux。
-
文件转移
当文件由于权限问题不允许用户直接读取的时候(如windows日志),需要首先将文件转移至一个可以供用户读取的路径,此时需copy.bat满足此需求。而当文件由于正在读写无法直接备份时(如tcpdump流量文件),需mv.sh满足此需求。
-
中转站处理
中转站(rsync的client)的处理工作主要分为两部分:将文件备份至本地以及将本地的备份文件上传至目的地(hadoop的hdfs)。而上传的时候又分为两种情况:对于追加目录形式的文件可以直接上传;对于追加文件形式的文件,由于hdfs没有更新功能,因此需先删除过期文件,再将新文件上传。
-
-
rsync的client端配置
rsync的client端你为linux,一般无需安装,启动rsync服务后直接命令行输入指令即可实现文件的备份功能,详见linux-client.
-
文件上传至目的地
?
上传时有时需先删除再上传,详情请参考上传。
-
目的地处理
目的地为hadoop的hdfs文件系统,为linux 端,需启动hadoop服务。
-
-
配置项
使用rsync采集二进制日志文件的过程中有几个配置项需要用户自主配置,数据源处需要的配置项主要包含日志文件的存储路径。中转站的工作内容分为两部分:备份至本地和上传至hdfs,因此需要的配置项也分为客户端备份服务器日志的存储地址和上传至hdfs的地址,同时还需要配置该服务执行的周期及时间。至于目的地方面只需安装并且启动hadoop服务即可,因此没有什么配置项。
?
-
附录
-
-
附录1:配置windows的server端
-
在windows上安装rsync
安装rsync的windows版server
在开始程序中打开"start a unix bash shell"程序:
进入一个类似cmd的终端,输入如下命令:
$/bin/activate-user.sh
输入l
输入administrator
后面全按回来结束
-
启动opensshd
打开"控制面板"-->"管理工具"-->"服务":
找到一个opensshd的服务,启动它
-
配置rsyncd.conf文件
编辑C:/安装目录/rsyncd.conf.
use chroot = false
strict modes = false
host allow = 172.16.28.10
log file = /var/log/rsyncd.log #日志存储路径
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
max connections = 2
address = 172.16.27.234 #服务器ip
port = 873 #服务器备份路径端口
syslog facility = local3
timeout = 300
?
#module definitions
#remember Cygwin naming conventions:c:\work becomes /cygwin/c/work
[test] #模块名称
path = /cygdrive/c/copy(此路径表示c:/copy) #待备份文件(由于windows系统日志文件无法直接备份,故需提前复制至copy文件夹)
comment = this is a windows test program
ignore errors
read only = yes
list = no
transfer logging = yes
auth user = demo
secret file = /etc/rsyncd.secrets
?
-
启动rsync服务
打开"控制面板"-->"管理工具"-->"服务":
找到一个RsyncServer的服务,启动它
-
配置rsyncd.secrets文件
编辑/etc/rsyncd/secrets文件,内容如下:
用户名:密码
?
至此windows的server端配置完成。
?
-
-
附录2:配置linux的server端
-
配置rsyncd.conf文件
创建/etc/rsyncd.conf文件,内容与windows端的rsyncd.conf配置文件类似,在此不做过多说明
-
配置rsyncd.secrets文件
该步骤与windows类似,同样是创建一个文件,内容格式为:用户名:密码。需要注意的是linux中要将该文件的权限定义为600,否则无法备份成功。出于安全考虑,该文件必须只有属主可以读写,其他用户无权限。
-
启动rsync服务
执行#/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写
?
至此,linux的server端配置完成。
?
-
-
附录:3:copy.bat
copy.bat的功能是将不可直接读取的windows日志复制到可以直接读取的copy文件夹中,将该任务添加至控制面板中的任务计划程序,使之定期自动执行(copy.bat的具体内容为xcopy "C:\Windows\System32\winevt\Logs" "C:\copy" /e/I/d/h/r/y)
-
附录4:mv.sh简介
该脚本用于将已经采集完成的tcpdump文件移出,用法为:
./mv.sh /源路径 /目的路径
代码如下
#!/bin/bash
# filename : scan_mv.sh
while true
do
all_file=$(ls $1 -t)
count=1
for i in $all_file
do
if [ $count -eq 1 ];then
count=2
else
new_file=$1$i
mv $new_file $2
fi
done
sleep 1
done
-
附录5:配置linux的client端
-
配置
rsyncd.pas文件
自定义路径,以/etc/rsyncd.pas为例,文件内容为用户的密码,注意不要讲用户名写进去,密码需与rsyncd.secrets中的密码一致。
-
启用rsync服务
使用rsyncd对windows日志进行备份
以本次操作命令为例rsync –av --password-file=/etc/rsyncd.pas [email protected]::test /home/wx/Desktop/winevt/
若自动执行,则需将命令按照格式添加到/etc/crontab文件中,使之定时自动执行,如
50 19 * * * root rsync –av --password-file=/etc/rsyncd.pas [email protected]::test /home/wx/Desktop/winevt/
-
-
rsync命令
rsync 的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [[email protected]]HOST:DEST
rsync [OPTION]... [[email protected]]HOST:SRC DEST
rsync [OPTION]... [[email protected]]HOST::SRC DEST
rsync [OPTION]... SRC [[email protected]]HOST::DEST
rsync [OPTION]... rsync://[[email protected]]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式, rsync 有六种不同的工作模式:
1) 拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。
2) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。
3) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。
4) 从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。
5) 从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。
6) 列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。
?
-
参数说明
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
?
?
-
附录6:上传至目的地
hadoop fs –put /home/wx/Desktop/winevt hdfs://master:8020/
hadoop fs –ls hdfs://master:8020/winevt
如需先删除文件则只要在前面首先执行
hadoop fs –rm –r hdfs://master:8020/winevt
若自动执行,则需将命令按照格式添加到/etc/crontab文件中,使之定时自动执行,如
52 19 * * * root hadoop fs –rm –r hdfs://master:8020/winevt
54 19 * * * root hadoop fs –put /home/wx/Desktop/winevt hdfs://master:8020/
-
备份tcpdump文件实例
-
保存tcpdump流量文件
将tcpdump产生的流量文件保存在某个指定的文件夹里:
首先切换到copy文件夹,输入tcpdump –C 10 –w tcpdump命令,使得以tcpdump命名的流量文件保存在copy文件夹中,然后通过shell脚本mv.sh将已经完成的文件转移至tcpdump文件夹中(./mv.sh /home/wx/Desktop/copy /home/wx/Desktop/tcpdump)。
-
将tcpdump文件上传至hdfs
将命令按照格式添加到/etc/crontab文件中,使之定时自动执行,如
54 19 * * * root hadoop fs –put /home/wx/Desktop/tcpdump hdfs://master:8020/
-
rsync采集二进制日志文件