目录
Inotify-tools+rsync实时复制实战
搭建基础环境
在rsync-41服务器上搭建rsync服务端
1.恢复了快照,重新安装rsync服务端
2.快速的部署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
[data]
comment = chaoge rsync backup!
path = /data
EOF
useradd -u 1000 -M -s /sbin/nologin www
mkdir /data
chown -R www:www /data
echo "rsync_backup:xiaopi666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
systemctl restart rsyncd
3.执行脚本部署服务端的rsync
bash instal_rsync.sh
在nfs-31机器上配置服务端
[root@nfs-31 ~]# yum -y install rsync
测试
[root@nfs-31 ~]# export RSYNC_PASSWORD='xiaopi666'
[root@nfs-31 ~]# rsync -az /opt/200M.txt rsync_backup@rsync-41::data
[root@nfs-31 ~]#
客户端安装Inotify-tools
1.进行内核检查
[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 Sep 9 22:54 max_queued_events
-rw-r--r-- 1 root root 0 Sep 9 22:54 max_user_instances
-rw-r--r-- 1 root root 0 Sep 9 22:54 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命令
2.安装Inotify-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
上述操作我们安装好了Inotify-tools软件,生成2个重要的命令
inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键
Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)
3.启用inotifywait命令
所有事件,任意的linux命令,只要对该目录的数据
inotifywait -mrq --timefmt '%T' --format "%T----%w----%f 捕获到的事件是:%e" /data
#打开另一个终端进行ls查看时也会被记录,当然创建和删除也要记录
[root@nfs-31 ~]# ls /momo1
[root@nfs-31 ~]# inotifywait -mrq --timefmt '%T' --format "%T----%w----%f捕获到的事件是:%e" /data
23:27:40----/momo1/----捕获到的事件是:OPEN,ISDIR
23:27:40----/momo1/----捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
[root@nfs-31 ~]# touch /momo1/1.txt
[root@nfs-31 ~]# inotifywait -mrq --timefmt '%T' --format "%T----%w----%f捕获到的事件是:%e" /data
23:28:08----/momo1/----1.txt捕获到的事件是:CREATE
23:28:08----/momo1/----1.txt捕获到的事件是:OPEN
23:28:08----/momo1/----1.txt捕获到的事件是:ATTRIB
23:28:08----/momo1/----1.txt捕获到的事件是:CLOSE_WRITE,CLOSE
4.指定需要检测查看的事件
检测,创建,删除两个时间,只有你执行了对应的linux命令,才会生成日志
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e delete,create /data
-m: 即"-monitor"表示始终保持事件监听状态
-r:即"-recursive"表示递归查询目录
-q:即"-guiet"表示打印出监控事件
-e:即"-event",通过此参数可以指定要监控的
其他事件
Events 含义
access 文件或目录被读取
modify 文件或目录内容被修改
attrib 文件或目录属性被改变
close 文件或目录封闭,无论读/写模式
open 文件或目录被打开
moved_to 文件或目录被移动至另外一个目录
move 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create 文件或目录被创建在当前目录
delete 文件或目录被删除
umount 文件系统被卸载
#inotifywait性能低下,如果创建的事件太多可能会丢数据
该命令,在大量文件生成的时候,需要检测,性能会骤然下降,以及会丢失数据,有部分的文件,会无法被检测到,也就是无法被后续的动作抓取到
适用于数据量不大的情况下,你用也没问题,以及对数据
sersync+rsync进行实时同步(了解即可)
在nfs-31(客户端)上完成
1.下载安装
cd /opt && wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz
2.解压并修改文件名
[root@nfs-31 opt]# tar -xvzf 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 sersync2.5.4
3.修改配置文件,并在创建密码文件后启动
[root@nfs-31 sersync2.5.4]# vim confxml.xml
<localpath watch="/momo1">
<remote ip="172.16.1.41" name="momo_data1"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az"/>
<auth start="true" users="momo01" passwordfile="/etc/rsync.momo"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
[root@nfs-31 sersync2.5.4]# echo "momo666" >/etc/rsync.momo
#启动
[root@nfs-31 momo1]# /opt/sersync2.5.4/sersync2 -rdo /opt/sersync2.5.4/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
option: -o config xml name: /opt/sersync2.5.4/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is momo01
passwordfile is /etc/rsync.momo
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /momo1 && rsync -az -R --delete ./ momo01@172.16.1.41::momo_data1 --password-file=/etc/rsync.momo >/dev/null 2>&1
run the sersync:
watch path is: /momo1
#启动产生的日志
#命令参数含义
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
#如果没有同步成功,可以使用日志最后一行的命令测试,并检查日志中是否存在error日志输出
4.检验是否可以实时同步
[root@nfs-31 momo1]# touch {1..50}.txt
[root@nfs-31 momo1]# rm -rf {1..50}.txt
[root@rsync-41 ~]# while true;do ls /momo1;sleep 1;done
nfs-31_10.0.0.31_2024-09-02 nfs-31_10.0.0.31_2024-09-04 nfs-31_10.0.0.31_2024-09-10
10.txt 15.txt 1.txt 24.txt 29.txt 33.txt 38.txt 42.txt 47.txt 5.txt nfs-31_10.0.0.31_2024-09-02
11.txt 16.txt 20.txt 25.txt 2.txt 34.txt 39.txt 43.txt 48.txt 6.txt nfs-31_10.0.0.31_2024-09-04
12.txt 17.txt 21.txt 26.txt 30.txt 35.txt 3.txt 44.txt 49.txt 7.txt nfs-31_10.0.0.31_2024-09-10
13.txt 18.txt 22.txt 27.txt 31.txt 36.txt 40.txt 45.txt 4.txt 8.txt
14.txt 19.txt 23.txt 28.txt 32.txt 37.txt 41.txt 46.txt 50.txt 9.txt
nfs-31_10.0.0.31_2024-09-02 nfs-31_10.0.0.31_2024-09-04 nfs-31_10.0.0.31_2024-09-10
[root@nfs-31 momo1]# ps -ef | grep sersync | grep -v 'grep'
root 1933 1 0 21:02 ? 00:00:00 ./sersync2 -rdo confxml.xml
root 2605 1 0 21:17 ? 00:00:00 /opt/sersync2.5.4/sersync2 -rdo /opt/sersync2.5.4/confxml.xml
[root@nfs-31 momo1]# pkill sersync2
[root@nfs-31 momo1]# ps -ef | grep sersync | grep -v 'grep'
[root@nfs-31 momo1]# rm -rf /opt/sersync2.5.4*
lsyncd+rsync实时同步
在nfs-31(客户端)上完成
1.下载安装
[root@nfs-31 momo1]# yum -y install lsyncd
2.修改配置文件,(只检测一个目录)
[root@nfs-31 momo1]# cp /etc/lsyncd.conf{,.bak}
[root@nfs-31 momo1]# vim /etc/lsyncd.conf
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite", #进行检测的事件,全局设置
maxProcesses = 8,
}
sync {
default.rsync,
source = "/momo1",
target = "momo01@172.16.1.41::momo_data1",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.momo",
_extra={"--bwlimit=200"}
}
}
#如果要检测多个备份目录,在下面多添加几个sync模块即可
3.开启服务并检查
[root@nfs-31 momo1]# systemctl start lsyncd
[root@nfs-31 momo1]# systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2024-09-10 21:50:14 CST; 8s ago
Main PID: 3760 (lsyncd)
CGroup: /system.slice/lsyncd.service
└─3760 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
Sep 10 21:50:14 nfs-31 systemd[1]: Started Live Syncing (Mirror) Daemon.
Sep 10 21:50:14 nfs-31 lsyncd[3760]: sending incremental file list
Sep 10 21:50:14 nfs-31 lsyncd[3760]: sent 369 bytes received 23 bytes 784.00 bytes/sec
Sep 10 21:50:14 nfs-31 lsyncd[3760]: total size is 33,267,196 speedup is 84,865.30
4.测试
[root@nfs-31 momo1]# touch {1..50}.txt
[root@nfs-31 momo1]# rm -rf {1..50}.txt
[root@rsync-41 ~]# while true;do ls /momo1;sleep 1;done
nfs-31_10.0.0.31_2024-09-02 nfs-31_10.0.0.31_2024-09-04 nfs-31_10.0.0.31_2024-09-10
10.txt 15.txt 1.txt 24.txt 29.txt 33.txt 38.txt 42.txt 47.txt 5.txt nfs-31_10.0.0.31_2024-09-02
11.txt 16.txt 20.txt 25.txt 2.txt 34.txt 39.txt 43.txt 48.txt 6.txt nfs-31_10.0.0.31_2024-09-04
12.txt 17.txt 21.txt 26.txt 30.txt 35.txt 3.txt 44.txt 49.txt 7.txt nfs-31_10.0.0.31_2024-09-10
13.txt 18.txt 22.txt 27.txt 31.txt 36.txt 40.txt 45.txt 4.txt 8.txt
14.txt 19.txt 23.txt 28.txt 32.txt 37.txt 41.txt 46.txt 50.txt 9.txt
nfs-31_10.0.0.31_2024-09-02 nfs-31_10.0.0.31_2024-09-04 nfs-31_10.0.0.31_2024-09-10