您现在的位置是:首页 >技术教程 >rsync+inotify实现服务器日志数据同步网站首页技术教程

rsync+inotify实现服务器日志数据同步

程序员达芬奇 2024-09-15 00:01:03
简介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服务备份常见报错信息

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。