linux 文件同步

来源:互联网 发布:红叶知弦本子 编辑:程序博客网 时间:2024/06/04 20:08
最近由于业务上的考虑,把内容的点击数、播放数等变化频换(每日1000W-2000w次)但是对于业务没有太大实时意义的计数,由实时操作DB变更为只记录操作日志,每晚汇总各机器的操作日志,计算各内容点击与播放的总数一次性更新DB,将DB的操作降低到百万级别以内了。
这个过程中使用rsync来进行操作日志的同步,为避免遗忘特记录下配置rsync服务以及进行日志文件传输的过程。
机器以及配置过程如下:
192.168.1.100作为rsync服务器,提供rsync服务;
192.168.1.101 、192.168.1.102 、192.168.1.103、192.168.1.104作为应用服务器;
(1)配置rsync服务端(192.168.1.100)
当前的绝大多数Linux操作系统都安装有rsnyc服务,如果不升级版本的话,可以直接使用,要是需要升级的话,可以参考网上教程。
检查是否存在/etc/rsyncd.conf 文件,不存在则创建,文件的内容如下。
[plain] view plain copy
  1. pid file = /var/run/rsyncd.pid  
  2. port = 873  
  3. #只监控内网的IP地址,更加安全  
  4. address = 192.168.1.100  
  5. uid =root  
  6. gid = root  
  7. use chroot = yes  
  8. #客户端只能写入不能读取  
  9. read only = no  
  10. write only = yes  
  11. #只允许指定IP地址的机器能够访问  
  12. hosts allow = 192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104  
  13. max connections = 4  
  14. motd file = /etc/rsyncd/rsyncd.motd  
  15. timeout = 300  
  16. transfer logging = yes  
  17. log file = /var/log/rsync.log  
  18. #客户端上传文件时候的存储模块  
  19. [ logs ]   
  20.         #客户端上传文件的存储地址  
  21.         path = /var/log/access_log    
  22.         list = yes  
  23.         ignore errors  
  24.         auth users = zhangzk  
  25.         #密码文件  
  26.         secrets file = /etc/rsyncd/rsyncd.secrets  
  27.         exclude = error_log httpd.pid  

创建密码文件 /etc/rsyncd/rsyncd.secrets,用户名称与密码以冒号分割,整个文件内容如下:

[plain] view plain copy
  1. zhangzk:239fjdalk@893246dasaATDFBSad  

设置该文件的600权限

[plain] view plain copy
  1. chmod 600 /etc/rsyncd/rsyncd.secrets  
以守护进程方式启动该服务:

/usr/local/bin/rsync --daemon
检查服务是否运行正常:

[plain] view plain copy
  1. -bash-3.2# ps -aef |grep rsync  
  2. root      8510  8481  0 18:30 pts/0    00:00:00 grep rsync  
  3. root     31787     1  0 Aug14 ?        00:00:00 rsync --daemon  
至此服务端全部搞定了。

(2)客户端(以192.168.1.101为例)

客户端相对要简单得多了,只需要设定密码文件即可。

创建密码文件/etc/rsyncd/ rsyncd.pass,该密码文件的内容与服务端的密码文件中的密码必须一致。

[plain] view plain copy
  1. 239fjdalk@893246dasaATDFBSad  

设置该文件的600权限

[plain] view plain copy
  1. chmod 600 /etc/rsyncd/rsyncd.pass  

OK!现在可以使用rsync服务从客户端192.168.1.101上无密码的方式传输文件到192.168.1.100上去了!
[plain] view plain copy
  1. rsync -vzrtopg --delete --progress $tarFile zhangzk@192.168.1.100::logs  --password-file=/etc/rsyncd/rsyncd.pass  

(3)建立crontab任务来定时传输日志文件

检查并且创建脚本文件/var/scripts/rsync_operate_log.sh

[plain] view plain copy
  1. #!/bin/sh  
  2. fileName=my_play_download.log.`date -d yesterday +%Y-%m-%d`  
  3. filePath=/var/log/app/  
  4. logFile=$filePath$fileName  
  5.   
  6. ipAddress=101  
  7.   
  8. tarName=$fileName.$ipAddress.tar.gz  
  9. tarFile=$filePath$tarName  
  10.   
  11.   
  12.   
  13. cd $filePath  
  14.   
  15. if [ -e "$logFile" ]; then  
  16.   tar -zcvf $tarName $fileName;  
  17. else  
  18.   echo "log file not existed.file=$logFile"  
  19. fi  
  20.   
  21. if [ -e "$tarFile" ]; then  
  22.    rsync -vzrtopg --delete --progress $tarFile zhangzk@192.168.1.100::logs  --password-file=/etc/rsyncd/rsyncd.pass  
  23.    rm -rf $tarFile  
  24. else  
  25.    echo "log file not existed.file=$tarFile"  
  26. fi  

设置该crontab脚本文件的700权限:

[plain] view plain copy
  1. chmod 700 /var/scripts/rsync_operate_log.sh  

再使用crontab -e命令来设置每日凌晨3点定时执行脚本文件即可:

[plain] view plain copy
  1. 0 3 * * * /var/scripts/rsync_operate_log.sh > /dev/null 2>&1  




原创粉丝点击