一.先准备rsyncd服务环境
Backup服务器(rsync服务端)
1.快速的部署rsyncd服务端
#!/bin/bash
yum install rsync -y
cat > /etc/rsyncd.conf << 'EOF'
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
EOF
useradd -u 1000 -M -s /sbin/nologin www
mkdir -p /{backup,data}
chown -R www:www /{backup,data}
echo "rsync_backup:yiyuan666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
systemctl start rsyncd
2.执行脚本部署服务端的rsync
bash instal_rsync.sh
dev服务器部署(rsync客户端)
试试是否可正确rsync备份
rsync -avzp /tmp/
[root@nfs-31 ~]#touch /opt/我是nfs31wwww
[root@nfs-31 ~]#export RSYNC_PASSWORD=yiyuan666
[root@nfs-31 ~]#rsync -avzP /opt/ --delete rsync_backup@192.168.106.135::backup
二.准备部署inotify-tools软件(nfs-31机器)
内核检查
[root@nfs-31 ~]#uname -r
3.10.0-1160.el7.x86_64
脚本通用型,健壮性
还有内核参数检查,
本质上是linux支持inotify机制
在性能还可以优化,支持更高的文件并发数
#检测多少个文件 ,文件内容大量的发生变化,inotify机制能同时检测多少文件
这个参数的优化,就是调整linux的几个文件
[root@nfs-31 ~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_queued_events
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_instances
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_watches
系统文件解释
max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件
max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程
max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384
inotify-tools 系统自带的比较low的工具
sersync 金山云的运维通过c++开发的工具
lsyncd三个工具 最新的,目前有人在用,适用于大规模服务器环境的工具
这些工具就3件事
1.优化,调整了这3文件的参数
2.检测某个目录
3.触发rsync命令
安装inotifty-tools工具
需要配置好epel源,才可以安装
[root@nfs-31 ~]# yum install inotify-tools -y
检查生成的软件命令
[root@nfs-31 ~]# rpm -ql inotify-tools |head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch
Inotifywait详解
上述操作我们安装好了Inotify-tools软件,生成2个重要的命令
inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键
Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)
【inotifywait命令解释】
inotifywait实践
所有事件,任意的linux命令,只要对该目录的数据,对文件发生了修改动作,都会被检测到
mkdir /nfs-data
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" /nfs-data
12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
12:27:56----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR
12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
三.需要指定检测事件的名字
Events 含义
access 文件或目录被读取
modify 文件或目录内容被修改
attrib 文件或目录属性被改变
close 文件或目录封闭,无论读/写模式
open 文件或目录被打开
moved_to 文件或目录被移动至另外一个目录
move 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create 文件或目录被创建在当前目录
delete 文件或目录被删除
umount 文件系统被卸载
Create、delete
检测,创建,删除两个时间,只有你执行了对应的linux命令,才会生成日志
-e events 事件名
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e delete,create /nfs-data
12:29:46----/nfs-data/------hehe.log 捕获到的事件是:CREATE
12:30:24----/nfs-data/------aoligei.log 捕获到的事件是:CREATE
12:31:03----/nfs-data/------hehe.log 捕获到的事件是:DELETE
move事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e move /nfs-data
12:31:48----/nfs-data/------xixi.log 捕获到的事件是:MOVED_FROM
12:31:48----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO
12:32:17----/nfs-data/------xixi.png 捕获到的事件是:MOVED_FROM
12:32:54----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO
close_write事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e close_write /nfs-data
四.基于sersync工具同步(了解)
检测文件事件的工具,条件
某些文件不检测
1.下载安装
https://code.google.com/archive/p/sersync/
cd /opt && wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs-31 /opt]#ls
sersync2.5.4_64bit_binary_stable_final.tar.gz 我是nfs31wwww
[root@nfs-31 /opt]#tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
修改名字
[root@nfs-31 /opt]#mv GNU-Linux-x86/ sersync254
2.修改配置文件
找到需要检测的目录配置段,修改为你的机器环境即可
[root@nfs-31 /opt]#ls
sersync254 sersync2.5.4_64bit_binary_stable_final.tar.gz 我是nfs31wwww
[root@nfs-31 /opt]#cd sersync254/
[root@nfs-31 /opt/sersync254]#ls
confxml.xml sersync2
检测nfs-31 /nfs-data目录
修改如下部分配置
[root@nfs-31 /opt/sersync254]#vim confxml.xml
23 <sersync>
24 <localpath watch="/nfs-data">
25 <remote ip="172.16.1.41" name="backup"/>
26 </localpath>
27 <rsync>
28 <commonParams params="-az"/>
29 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pwd"/>
3.启动服务
[root@nfs-31 /nfs-data]#/opt/sersync254/sersync2 -r -d -o /opt/sersync254/confxml.xml
3.1 发现报错了,如何看日志,解决问题,咱们当前得问题是
1.没有密码文件
2.密码文件权限不对
[root@nfs-31 /nfs-data]#cd /nfs-data && rsync -az -R --delete ./ rsync_backup@192.168.106.135::backup --password-file=/etc/rsync.pwd
rsync: could not open password file /etc/rsync.pwd: No such file or directory (2)
rsync error: syntax or usage error (code 1) at authenticate.c(187) [sender=3.1.2]
[root@nfs-31 /nfs-data]#echo "yiyuan666" > /etc/rsync.pwd
[root@nfs-31 /nfs-data]#cd /nfs-data && rsync -az -R --delete ./ rsync_backup@192.168.106.135::backup --password-file=/etc/rsync.pwd
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
[root@nfs-31 /nfs-data]#chmod 600 /etc/rsync.pwd
4.使用工具
必须先确认sersync帮你生成的rsync命令,能正确的执行
5.查看sersync是否帮你做了同步
你必须确保,rsync可以手动,sersync才能帮你同步!!!
[root@nfs-31 /nfs-data]#touch yiyuan.log
[root@nfs-31 /nfs-data]#touch 我是一原
[root@rsync-41 /backup]#ls
yiyuan.log 我是一原
分析工具启动日志
分析,是为了更好的排错
五.lsyncd工具(推荐使用)
某运维,在维护数据实时同步的时候,遇见难题了
1.去市面找开源的,主流的数据同步工具
inotify-wait
sersync工具
注意,当你做了很多的实验,机器上,可能会同时运行很多个rsync数据同步程序,解释
https://github.com/lsyncd/lsyncd
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。
我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。
另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。
lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。
实现简单高效的本地目录同步备份(网络存储挂载也当作本地目录),一个命令搞定。
0.干掉sersync工具
[root@nfs-31 /nfs-data]#ps -ef|grep sync
root 15303 1 0 15:05 ? 00:00:00 /opt/sersync254/sersync2 -r -d -o /opt/sersync254/confxml.xml
root 15736 1278 0 15:46 pts/0 00:00:00 grep --color=auto sync
[root@nfs-31 /nfs-data]#kill 15303
1.下载安装
yum install lsyncd -y
2.修改配置文件,(只检测一个目录)
先备份
[root@nfs-31 /nfs-data]#cp /etc/lsyncd.conf {,.ori}
[root@nfs-31 /nfs-data]#ls /etc/lsyncd.conf*
/etc/lsyncd.conf /etc/lsyncd.conf.ori
[root@nfs-31 /nfs-data]#cat /etc/lsyncd.conf
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/nfs-data",
target = "rsync_backup@172.16.1.41::backup",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.pwd",
_extra={"--bwlimit=200"}
}
}
3.启动服务
systemctl start lsryncd
[root@nfs-31 /nfs-data]#systemctl start lsyncd
[root@nfs-31 /nfs-data]#systemctl status lsyncd
4.使用工具
[root@nfs-31 /nfs-data]#for i in {1..100};do echo ${i} > ${i}.log;sleep 0.1;done