您现在的位置是:首页 >技术教程 >rsync+inotify实现服务器日志数据同步网站首页技术教程
rsync+inotify实现服务器日志数据同步
简介rsync+inotify实现服务器日志数据同步
非root账号准备
创建账号并设置为非root用户授权目录
useradd admin
passwd admin #输入两次密码
chown -R admin /backup/
服务端(源服务器所同步数据到的目标服务器)准备
关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -ri 's/^(SELINUX=).*/1disabled/g' /etc/sysconfig/selinux
getenforce
安装
yum -y install rsync rsync-daemon
卸载
rpm -qa | grep rsync
yum erase rsync -y
查看版本号
rsync -version
重启
netstat -anput | grep :873
kill -9 1246297(删除进程号)
systemctl restart rsyncd.service
查看服务是否正常工作
systemctl status rsyncd.service
修改或创建两个配置文件
vim /etc/rsyncd.conf
uid = admin
#进行备份的组,nobody为任意组
gid = admin
#端口
port = 873
# 如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true.但是一般不需要,选择no或false
use chroot = yes
read only = on
#不允许列清单
list = no
#最大连接数
max connections = 4
#pid文件的存放位置
#pidfile = /var/run/rsyncd.pid
#锁文件的存放位置
lock file=/var/run/rsyncd.lock
#日志文件的存放位置
log file = /var/log/rsyncd.log
# motd file = /etc/rsyncd.motd
# //此文件定义完成后系统会自动创建
exclude = lost+found/
transfer logging = yes
#覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。
timeout = 900
ignore nonreadable = yes
# //同步时跳过没有权限的目录
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# //传输时不压缩的文件
#哪些电脑可以访问rsync服务,这里可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开
#hosts allow = 172.25.0.110
#哪些电脑不可以访问rsync服务
#hosts deny = 172.25.0.0/24
#这里是认证模块名,即跟samba语法一样,是对外公布的名字
[backup]
comment = this is module for backup
#这里是参与同步的目录
path = /backup/
#可以忽略一些无关的IO错误
ignore errors
#允许可读可写
read only = no
#认证的用户名
auth users = admin
#密码文件存放地址
secrets file = /etc/rsyncd.pass
vim /etc/rsyncd.pass
admin:123456
修改配置文件权限
chmod 600 /etc/rsync*
创建同步目录,并设置目录权限
mkdir /backup
chmod 600 /backup
启动
rsync --daemon
客户端(源服务器)准备
关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
getenforce
安装(只需要安装,不要启动,不需要配置)
yum install -y rsync
创建认证密码文件
echo '123456' > /etc/rsync.pass
设置认证密码文件权限
chmod 600 /etc/rsync.pass
同步
rsync -avz --port 873 --progress --delete /tmp/test admin@服务器ip::backup --password-file=/etc/rsync.pass
inotify准备
查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify/
安装inotify-tools工具
yum -y install make gcc gcc-c++
yum -y install inotify-tools
写同步脚本
mkdir /scripts
touch /scripts/inotify.sh
chmod 755 /scripts/inotify.sh
vim /scripts/inotify.sh
inotify.sh 脚本如下
host=服务器的ip # 目标服务器的ip(备份服务器)
src=/tmp/test # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在)
des=backup # 自定义的模块名,需要与目标服务器上定义的同步名称一致
password=/etc/rsync.pass # 执行数据同步的密码文件
user=admin # 执行数据同步的用户名
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src
| while read files;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
启动脚本
nohup bash /scripts/inotify.sh &
查看启动脚本
ps -ef |grep inotify
设置脚本开机自启动
chmod +x /etc/rc.d/rc.local
echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.local
Rsync服务备份常见报错信息
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。