前言
近日,公司手游项目对接发行平台,这时候发行那边的运营提供了一个日志的需求,大致上是我们的游戏服按照数据采集需求进行日志上报,生成对应的log文件待用,然后运营会到上线的game服来同步log文件进行分析,从而制定不同的运营方案。根据这需求我们大致能想到使用scp、sync、rsync等同步工具来进行文件同步,这里我们选择rsync来实现。
介绍
rsync是远程(或本地)复制和同步文件最常用的命令。 借助rsync命令,你可以跨目录,跨磁盘和跨网络远程与本地数据进行复制和同步。举例来说:在两台Linux主机之间进行数据备份和镜像。本文介绍在Linux主机上进行远程和本地传输文件的常见用法,不需要root账户也可以允许rsync。
rsync的特点如下:
1.高效地复制同步数据到对端,或者对端到本地。
2.支持复制链接、设备、属主、属组、权限。
3.比scp(Secure Copy)更快。rsync使用远程更新协议( remote-update protocol ),这允许仅仅传输两组文件之间的差异。对于首次传输,它将文件或目录的全部内容从源复制到目标,但是从下次起,它仅将变化部分复制到目标。
4.rsync消耗较少的带宽,因为它使用压缩和解压缩方法,同时发送和接收数据两端。HTTP压缩技术。
配置
安装
一般的linux发行版都是预装了rsync工具,如果没有的话,请根据对应系统的包管理工具来安装一下该工具,因为安装比较简单就不详细说明了。
命令语法
rsync [options] from_dir to_dir
-v : 详细模式输出
-r : 递归拷贝数据,但是传输数据时不保留时间戳和权限
-a : 归档模式, 归档模式总是递归拷贝,而且保留符号链接、权限、属主、属组时间戳
-z : 压缩传输
-h : human-readable
-l : 保持符号连接;
-p : 保持文件原有权限;
-t : 保持文件原有修改时间;
-g : 保持文件原有用户组;
-o : 保持文件原有属主;
--progress: 显示传输过程
--exclude=PATTERN 指定排除传输的文件模式
--include=PATTERN 指定需要传输的文件模式
--delete 同步时,删除那些DST中有,而SRC没有的文件
--max-size:限定传输文件大小的上限
--dry-run:显示那些文件将被传输,并不会实际传输
--bwlimit:限制传输带宽
-W:拷贝文件,不进行增量检测
实例
- 本地同步
rsync -zvrh test/ ~/me/test
查看结果:
ls ~/me/test
src/ test.iml
- 远程同步
rsync -avz test/ root@192.168.51.231:/root/test_dir/
前往远程服务器查看,同样同步成功
rsync配置
rsync有一下三个配置文件:
/etc/rsyncd.conf
主配置文件,没有就手动生成
rsyncd.secrets
密码文件
rsyncd.motd
rysnc服务器信息
例如:我们要备份服务器上的 /home/backup 目录,同时要把 /home 下的 file1 和 file2 目录排除在外
#先定义整体变量
secrets file = /etc/rsyncd.secrets
motd file = /etc/rsyncd.motd
read only = yes
list = yes
#uid = nobody #nobody 为任何用户
#gid = nobody #nobody 为任何用户组
uid = test #
gid = test #
hosts allow = 192.168.0.110 #哪些主机可以访问rsync服务
hosts deny = 192.168.0.0/24 #哪些主机不可以访问rsync服务
max connections = 2
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#再定义要rsync的目录
[backup]
path = /home/backup
list=yes # 允许列清单
ignore errors
auth users = test,backup
comment = backup log files
exclude = file1/ file2/
定义rsyncd.secrets
rsyncd.secrets是存储rsync服务的用户名和密码的,需要自己手动创建,它是一个明文的文本文件,权限设为600,只有属主可以读写,密码文件格式为:user:password
#vim /etc/rsyncd.secrets
test:123456
添加属主和权限
#chown root:root /etc/rsyncd/rsyncd.secrets
#chmod 600 /etc/rsyncd/rsyncd.secrets
定义rsyncd.secrets
rsyncd.motd主要定义用户登录rsync服务的欢迎信息,可以自己根据需求定义,跟FTP登录界面一样如:
#vim /etc/rsyncd.motd
Welcome to use the game log rsync services!
定时备份
一般使用rsync的场景有两种,一种是临时上传下载数据,类似scp,另一种是定时备份数据,这里与crontab结合使用。
#!/bin/bash
rsync -avzP --delete --password-file=rsyncd.secrets /home/data root@172.25.0.150:/backup
然后使用crontab -e
配置一个合适的备份时间点执行脚本
总结
rsync使用上还是比较简单,这里直接列出的配置和使用案例基本上可以满足配置一个同步工具的需求了。