Log文件备份
log文件集中备份
log文件分散在各个服务器,通过些方案,将各服务器日志集中收集到一台机器,便于拷贝和管理
方案对比
本次对比方案主要涉及,rsync、filebeat和ansible。操作平台为linux
rsync
rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。 rsync 是用于替代 rcp 的一个工具,rsync 使用所谓的 rsync算法 进行数据同步,这种算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
rsync优点
rsync 具有如下的基本特性:
- 可以镜像保存整个目录树和文件系统
- 可以很容易做到保持原来文件的权限、时间、软硬链接等
- 无须特殊权限即可安装
- 优化的流程,文件传输效率高
- 可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接
- 支持匿名传输,以方便进行网站镜象
rsync缺点
- 不能实时同步
- 当文件数量达到百万级以上时,客户端同步时扫描改变的文件非常耗时
- 单向同步
ELK的filebeat
Filebeat的基本原理其实就是有一群prospector,每个prospector手下管着一批harvester,每个harvester负责监视一个日志文件,把变动的内容由spooler汇总之后交给Logstash或者Elasticsearch。
filebeat优点
- 跨平台,linux、windows都可以用
- 节省资源
- 有elk支持,从存储到生成报表很方便
- 支持大数据量
filebeat缺点
- 收集的是数据而不是文件,不能保证原日志文件完整性
- 须配置elk系统服务
- 只能在客户端push,不支持服务端pull
ansible
Ansilbe是一个部署一群远程主机的工具。远程的主机可以是远程虚拟机或物理机, 也可以是本地主机。Ansilbe通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。
ansible优点
- 依赖少,支持ssh协议即可
- 专门为管理服务器集群而开发
- 轻量级,在客户机无须安装应用
- 语法简单,主要要服务端工作
- 不需要启动服务,仅仅只是一个工具,可以轻松的实现分布式扩展
ansible缺点
- 工具较新,还没有成熟
- 在大批量服务器集群中,性能不是太高
总结
综合来看,三个工具各有胜负,如果仅仅是为了备份log文件rsync足以。 下面是rsync的使用脚本:
#!/usr/bin/env bash
backUpPath=/tmp/bak/log
remotePath=/home/zhoub/
remoteUser=zhoub
for serVer in `seq 225 228`
do
serVerIp="192.168.2."$serVer
ping -c 3 $serVerIp > /dev/null 2>&1
if [ $? -eq 0 ]
then
ssh-keyscan $serVerIp 2>&1 | grep -v "^$" > /dev/null
if [ $? -eq 0 ]
then
if [ ! -d ${backUpPath}/${serVerIp} ]
then
mkdir -p ${backUpPath}/${serVerIp}
fi
rsync -az ${remoteUser}@${serVerIp}:${remotePath} ${backUpPath}/${serVerIp}/
echo ${serVerIp}" done!!"
fi
fi
done
保存在路径:
/data/webproj/log-back
然后,启用crontab -e添加一个条目,注意,在ssh免密码的用户下面操作,而且不要用sudo crontab -e,因为sudo会给root生成一个定时条目,这样的话root并不是免密的
添加一个条目:
0 3 * * * /usr/bin/bash /data/webproj/log-back/rsync-backup.sh
有些系统bash 并不在/usr/bin下面,而是在/bin下面。 结束配置,需要测试就自己修改crontab 里面的时间测试一下好了。
附言
用rsync的ssh方法拷贝,不要输入密码就能完成
ssh免密码操作
创建公钥、公钥
ssh-keygen -t rsa
无视它出来的任何提示,欢快的一路回车到底吧。
分发公钥
把公钥 id_rsa.pub 复制到远程机器的 /home/username/.ssh目录 并命名authorized_keys
-
一步到位:scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/authorized_keys
-
复制 scp ~/.ssh/id_rsa.pub username@hostname:~ 登陆 ssh username@hostname 追加 cat id_rsa.pub » .ssh/authorized_keys