IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用rsync+inotify实现/www目录实时同步 -> 正文阅读

[系统运维]使用rsync+inotify实现/www目录实时同步

使用rsync+inotify实现/www目录实时同步

inotify:对同步数据目录信息的监控
rsync:完成对数据的同步

环境准备:

IP操作系统及版本描述
10.0.0.7CentOS-7.9data-server,inotify
10.0.0.17CentOS-7.9backup-server,rsync
#列出下面的文件,说明服务器内核支持inotify
[root@data ~]#ls -l /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_queued_events
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_user_instances
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_user_watches

[root@data ~]#cat /proc/sys/fs/inotify/max_queued_events
16384
[root@data ~]#cat /proc/sys/fs/inotify/max_user_instances
128
[root@data ~]#cat /proc/sys/fs/inotify/max_user_watches
8192

inotify 内核参数说明:

  • max_queued_events:inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384, 生产环境建议调大,比如:327679
  • max_user_instances:每个用户创建inotify实例最大值,默认值:128
  • max_user_watches:可以监视的文件的总数量(inotifywait 单进程),默认值:8192,建议调大
[root@data ~]#vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000
[root@data ~]#sysctl -p
fs.inotify.max_queued_events = 66666
fs.inotify.max_user_watches = 100000
[root@data ~]#cat /proc/sys/fs/inotify/*
66666
128
100000

1、安装inotify-tools:基于epel源

[root@data ~]#yum -y install inotify-tools
[root@data ~]#rpm -ql inotify-tools
/usr/bin/inotifywait 
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz

inotify-tools包主要工具:

  • inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open ,close,delete等)发生, 常用于实时同步的目录监控
  • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

2、创建rsync服务器的配置文件

[root@backup ~]#rpm -q rsync
rsync-3.1.2-10.el7.x86_64
[root@backup ~]#vim /etc/rsyncd.conf
 uid = root  #提定以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobody
 gid = root  #默认为nobody
 max connections = 0
 ignore errors
 log file = /var/log/rsyncd.log
 pid file = /var/run/rsyncd.pid
 exclude = lost+found/
 lock file = /var/run/rsyncd.lock
 reverse lookup = no

[backup]  #每个模块名对应一个不同的path目录,如果同名后面模块生效
path = /data/backup/
comment = backup dir
read only = no  #默认是yes,即只读
auth users = rsyncuser  #默认anonymous可以访问rsync服务器
secrets file = /etc/rsync.pas

3、准备备份目录

[root@backup ~]#mkdir -pv /data/backup

4、生成验证文件

[root@backup ~]#echo "rsyncuser:xiaoming" > /etc/rsync.pas
[root@backup ~]#chmod 600 /etc/rsync.pas

5、启动rsyncd服务

[root@backup ~]#systemctl enable --now rsyncd
[root@backup ~]#ss -ntl
State      Recv-Q Send-Q              Local Address:Port                             Peer Address:Port
LISTEN     0      128                             *:22                                          *:*
LISTEN     0      100                     127.0.0.1:25                                          *:*
LISTEN     0      5                               *:873                                         *:*
LISTEN     0      128                          [::]:22                                       [::]:*
LISTEN     0      100                         [::1]:25                                       [::]:*
LISTEN     0      5                            [::]:873                                      [::]:*

6、数据服务器配置密码文件

[root@data ~]#echo "xiaoming" > /etc/rsync.pas
[root@data ~]#chmod 600 /etc/rsync.pas

7、查看远程rsync服务器的模块信息

[root@data ~]#rsync rsync://10.0.0.17
backup         	backup dir

8、交互式验证查看具体模块内的文件

[root@data ~]#rsync rsync://rsyncuser@10.0.0.17/backup
Password:

9、非交互式查看共享目录

[root@data ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.17/backup

10、客户端测试同步数据

[root@backup ~]#mkdir /data/www/
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/
[root@data ~]#ll /data/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 www
[root@backup ~]#touch /data/www/a.txt
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/a.txt
[root@data ~]#ll /data/www/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 a.txt
[root@backup ~]#touch /data/www/test.txt
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/test.txt
[root@data ~]#ll /data/www/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 a.txt
drwxr-xr-x 2 root root 6 Mar 21 10:26 test.txt

11、shell 脚本实现实时数据同步

注意: 此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步

#数据服务器上创建inotify_rsync.sh脚本

[root@data ~]#vim inotify_rsync.sh
#!/bin/bash
SRC='/data/www/' #注意最后的/
DEST='rsyncuser@10.0.0.17::backup'
rpm -q rsync &> /dev/null || yum -y install rsync
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

[root@data ~]#bash -n inotify_rsync.sh

[root@data ~]#ls /data/www/
a.txt  test.txt
[root@data ~]#cd /data/www/
[root@data www]#ls
a.txt  test.txt
[root@data www]#rm -rf *.txt
[root@data www]#touch b.txt
[root@data www]#touch a.txt
[root@data www]#ls
a.txt  b.txt
[root@data www]#dd if=/dev/zero of=f1.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 65.0319 s, 16.1 MB/s
[root@data www]#ll f1.img
-rw-r--r-- 1 root root 1048576000 Mar 21 12:42 f1.img
[root@data www]#chown chen f1.img
[root@data www]#ll f1.img
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f1.img
[root@data www]#mv f1.img f2.img
[root@data www]#ll f2.img
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f2.img


[root@backup ~]#watch -n0.5 ls -l /data/backup/
Every 0.5s: ls -l /data/backup/                                                               Mon Mar 21 12:53:42 2022

total 1024000
-rw-r--r-- 1 root root          0 Mar 21 12:32 a.txt
-rw-r--r-- 1 root root          0 Mar 21 12:31 b.txt
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f2.img

#查看文件传输日志
[root@data www]#tail -f /var/log/changelist.log
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:41:19 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:42:24 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:48:39 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:51:24 on 2022-03-21, file /data/www/f2.img was backuped up via rsync

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 21:01:04  更:2022-03-22 21:04:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:25:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码