最近线下BI准备要做数据仓库,需要线上的日志,现在线上的日志是NFS挂载过来的,二次挂载没成功,所以考虑用rsync来做。
1、检查是否安装了rsync
[[email protected] opt]# rpm -qa | grep rsync rsync-3.1.1-1.el6.rfx.x86_64
2、在slave端新建用户
useradd rsync -s /sbin/nologin -M #添加rsync用户 mkdir /home/logs #Rsync工作的后台目录 chown rsync.rsync /home/logs #更改模块目录的用户组
3、编写rsync的配置文件/etc/rsyncd.conf
# rsyncd.conf - Example file, see rsyncd.conf(5) # # Set this if you want to stop rsync daemon with rc.d scripts pid file = /var/run/rsyncd.pid log file = /var/log/rsync.log lock file = /var/run/rsync.lock # Edit this file before running rsync daemon!! uid = root gid = root use chroot = no #max connections = 4 #syslog facility = local5 [backup] #模块对应的目录 read only = false #网络权限可写 hosts allow = 192.168.10.0/24 #对应的网段 hosts deny = 0.0.0.0/32 auth users = rsync #虚拟用户 secrets file = /etc/rsync/rsyncd.pwd #虚拟用户密码文件
4、配置虚拟用户密码文件
echo "rsync:123456" >/etc/rsync/rsyncd.pwd chmod 600 /etc/rsync/rsyncd.pwd rsync --daemon #启动rsync服务 [[email protected] opt]# netstat -anlpt | grep rsynctcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12243/rsync tcp 0 0 :::873 :::* LISTEN 12243/rsync
#以上操作都是在slave上操作的
5、在master上测试推送
echo "123456" > /etc/rsync/rsyncd.pwd chmod 600 /etc/rsync/rsyncd.pwd echo "hello rsync" > test.text rsync -avz text.txt [email protected]::backup --password-file=/etc/rsync/rsyncd.pwd rsync常用参数的具体解释如下: -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive 对子目录以递归模式处理 -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 -D, --devices 保持设备文件信息 -t, --times 保持文件时间信息 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间 -n, --dry-run现实哪些文件将被传输 -W, --whole-file 拷贝文件,不进行增量检测 --rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete 删除那些DST中SRC没有的文件 -z, --compress 对备份的文件在传输时进行压缩处理 --log-format=formAT 指定日志文件格式 --password-file=FILE 从FILE中得到密码
#以下操作都是在master上操作的,操作完了检测下slave上文件是不是传过去了
6、在master上安装inotify
检测当前系统是否支持inotify [[email protected] etc]# ll /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Feb 29 10:29 max_queued_events #表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。 -rw-r--r-- 1 root root 0 Feb 29 10:29 max_user_instances #表示每一个real user ID可创建的inotify instatnces的数量上限。 -rw-r--r-- 1 root root 0 Feb 29 10:29 max_user_watches #表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小
7、下载inotify源码包并编译安装
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify-3.14 make && make install
8、编写后台运行脚本
mkdir /usr/local/inotify-3.14/etc cat /usr/local/inotify-3.14/etc/inotify.sh #!/bin/bash host=192.168.18.8 src=/mnt/nginx_log/ dst=backup user=rsync rsync_passfile=/etc/rsync.password inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib,modify $src | while read file do cd $src && rsync -aruz -R --delete ./ --timeout=100 [email protected]$host::$dst --password-file=$rsync_passfile >/dev/null 2>&1 done exit 0 bash -x inotify.sh #检测下有没有错误sh inotify.sh & #没有错误就放入后台运行inotifywait常用参数的具体解释如下: access #文件或目录被读取 modify #文件或目录被修改 attrib #文件或目录属性被改变 create #文件或目录被创建在当前目录
delete#文件或目录被删除
9、实时同步测试
touch 1 #新建个文件 去slave上看有没有被同步过去,如果同步过去,说明就成功了。
10、在slave端写一个计划任务来修改文件名
因为每天只有一个日志文件,所有要对文件名修改,并放到一个单独的目录存储
cat on-line.sh #!/bin/bash datetime=`date +%Y%m%d` mv /home/logs/access.log /DB/on-line/access.log.$datetime mv /home/logs/error.log /DB/on-line/error.log.$datetime
crontab -e 58 23 * * * /bin/bash /opt/on-line.sh >/dev/null 2>&1 #每天晚上11.58分执行,这样会有2分钟日志记录不到
时间: 2024-10-28 17:03:43