数据的实时同步

数据的实时同步inotify rsync 实现数据同步需要自行编写脚本组合 inotify 和 rsyncsersync 在 inotify rsync 软件基础上进行开发的 功能更强大

实现方法

inotify + rsync:实现数据同步需要自行编写脚本组合inotify和rsync

sersync:在inotify+rsync软件基础上进行开发的,功能更强大

工作原理

利用监控服务inotify,监控同步数据服务器目录中信息的变化,发现数据变化,就利用rsync服务推送到备份服务器

inotify

异步的文件系统事件监控机制。linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件。

一个动作不等于只发生一个事件。

[root@wenzi ~]$grep -i inotify /boot/config-4.18.0-193.el8.x86_64 CONFIG_INOTIFY_USER=y 

软件

  • inotify-tools
  • sersync
  • lrsyncd

查看内核是否支持inotify

[root@wenzi ~]$ll /proc/sys/fs/inotify total 0 -rw-r--r-- 1 root root 0 Feb 3 16:41 max_queued_events -rw-r--r-- 1 root root 0 Feb 3 16:41 max_user_instances -rw-r--r-- 1 root root 0 Feb 3 16:41 max_user_watches [root@wenzi ~]$cat /proc/sys/fs/inotify/max_queued_events 16384 [root@wenzi ~]$cat /proc/sys/fs/inotify/max_user_instances 128 [root@wenzi ~]$cat /proc/sys/fs/inotify/max_user_watches 8192 

max_queued_events

inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错误。建议调大,如

max_user_instances

每个用户创建 inotify实例最大值,默认值:128

max_user_watches

可以监视的文件的总数量(inotifywait 单进程)。建议调大,如

[root@data-centos8 ~]#vim /etc/sysctl.conf fs.inotify.max_queued_events=66666 fs.inotify.max_user_watches=     [root@centos8 ~]#sysctl -p fs.inotify.max_queued_events = 66666 fs.inotify.max_user_watches =  [root@centos8 ~]#cat /proc/sys/fs/inotify/* 66666 128 

inotify-tools工具

需要安装epel源

主要工具

inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

命令

inotifywait 选项 文件

选项
-m, --monitor 始终保持事件监听 -d, --daemon 以守护进程方式执行,和-m相似,配合-o使用 -r, --recursive 递归监控目录数据信息变化 -q, --quiet 输出少量事件信息 --exclude <pattern> 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现 --excludei <pattern> 和exclude相似,不区分大小写 -o, --outfile <file> 打印事件到文件中,相当于标准正确输出,注意:使用绝对路径 -s, --syslogOutput 发送错误到syslog相当于标准错误输出 --timefmt <fmt> 指定时间输出格式。 --format <fmt> 指定的输出格式;即实际监控输出内容。 -e 指定监听指定的事件,如果省略,表示所有事件都进行监听。

其中 --timefmt 时间格式:man 3 strfime

如 --timefmt "%Y-%m-%d %H:%M:%S"

%Y 年份信息,包含世纪信息 %y 年份信息,不包括世纪信息 %m 显示月份,范围 01-12 %d 每月的第几天,范围是 01-31 %H 小时信息,使用 24小时制,范围 00-23 %M 分钟,范围 00-59 %S 秒,范例 0-60

其中 --format 时间格式:

如 --format "%T %w%f event: %;e"

%T 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息 %w 事件出现时,监控文件或目录的名称信息,相当于dirname %f 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空,相当于basename %e 显示发生的事件信息,不同的事件默认用逗号分隔 %Xe 显示发生的事件信息,不同的事件指定用X进行分隔

其中 -e 选项指定的事件类型。

如 -e create,delete,attrib,move,close_write

create 文件或目录创建 delete 文件或目录被删除 modify 文件或目录内容被写入 attrib 文件或目录属性改变 close_write 文件或目录关闭,在写入模式打开之后关闭的 close_nowrite 文件或目录关闭,在只读模式打开之后关闭的 close 文件或目录关闭,不管读或是写模式 open 文件或目录被打开 lsdir 浏览目录内容 moved_to 文件或目录被移动到监控的目录中 moved_from 文件或目录从监控的目录中被移动 move 文件或目录不管移动到或是移出监控目录都触发事件 access 文件或目录内容被读取 delete_self 文件或目录被删除,目录本身被删除 unmount 取消挂载

示例

监控一次性事件 inotifywait /data/www Setting up watches. Watches established. /data/www/ CREATE f1.txt 持续前台监控 inotifywait -mrq /data/www   --exclude=".*\.swx|\.swp" /data/www/ OPEN f1.txt /data/www/ ACCESS f1.txt /data/www/ CLOSE_NOWRITE,CLOSE f1.txt 持续后台监控,并记录日志 inotifywait -o /root/inotify.log -drq /data/www --timefmt "%Y-%m-%d %H:%M:%S" -- format "%T %w%f event: %e" 持续前台监控特定事件 inotifywait -mrq /data/www --timefmt "%F %H:%M:%S" --format "%T %w%f event: %;e" -e create,delete,moved_to,moved_from,close_write,attrib

rsync

rsync 常用于做为 linux系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时数据同步。

服务器软件包:rsync(Ubuntu20.04),rsync-daemon(CentOS 8)

服务文件:/usr/lib/systemd/system/rsyncd.service

配置文件:/etc/rsyncd.conf

端口:873/tcp

命令

本地传输

rsync [OPTION]... SRC [SRC]... DEST

远程传输通过ssh协议

远程传输通过rsync协议

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST  
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

选项

-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。 -P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显 示进度信息的)。 -n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。 -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -r --recursive:递归到目录中去。 -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导 致下次更新         :检查出mtime不同从而导致增量传输无效。 -o --owner:保持owner属性(属主)。 -g --group:保持group属性(属组)。 -p --perms:保持perms属性(权限,不包括特殊权限)。 -D       :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。 -l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象 -z       :传输时进行压缩提高效率 -R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端, 包括它们的属性。 --size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。 -u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会 影响删除行为。 -d --dirs   :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1 目录,使用该选项将拷贝dir1但不拷贝file1。 --max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"-- max-size=1.5m") --min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。 --exclude   :指定排除规则来排除不需要传输的文件。 --delete   :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行 的,所以它是在 :exclude/include规则生效之后才执行的。 -b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。 --backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。 -e         :指定所要使用的远程shell程序,默认为ssh。 --port     :连接daemon时使用的端口号,默认为873端口。 --password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell 认证的密码,而是rsync模块认证的密码。 -W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增 量传输更高效。 --existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如 果上层目录不存在也不会传输。 --ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示 例。 --remove-source-files:要求删除源端已经成功传输的文件 --bwlimit=RATE     指定限速,单位默为为MB/s

示例

inotify + rsync + shell 脚本实现实时数据同步

IP 系统 作用 同步目录
192.168.28.30 CentOS8 data server数据服务器 /data/www
192.168.28.31 CentOS8 backup server备份服务器/rsyncd服务器 /data/backup
实现rsync服务
--------------------------------192.168.28.31 安装rsync-daemon,此程序提供service文件 [root@wenzi ~]$yum -y install rsync-daemon 修改配置文件 [root@wenzi ~]$vim /etc/rsyncd.conf [root@wenzi ~]$cat /etc/rsyncd.conf uid = root 指定访问的用户以什么身份访问共享目录,类似NFS的映射 gid = root 指定访问的用户以什么用户组访问共享目录 max connections = 0 同时连接的最大数量。0表示没有限制 ignore errors 在传输过程中,即使出现错误,rsync也不会停止传输 exclude = lost+found/ 排除此目录 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no 增加安全,避免DNS欺骗 hosts allow = 192.168.28.0/24 允许访问此rsync服务的IP地址范围 [backup] 模块名,若有重名,则偏后的生效 path = /data/backup 要同步的目录 comment = This is backup dir 描述 read only = no 默认是yes,只读;改为允许写 auth users = wenzi 访问时认证的用户 secrets file = /etc/rsync.pas 保存访问的用户名和密码,一行一个 创建密码文件,修改密码文件权限,保证安全。 密码文件后缀必须为 .pas [root@wenzi ~]$echo "wenzi:" > /etc/rsync.pas [root@wenzi ~]$chmod 600 /etc/rsync.pas 创建相关目录 [root@wenzi ~]$mkdir -p /data/backup 重启服务 [root@wenzi ~]$systemctl restart rsyncd.service 向同步的目录中新增测试文件 [root@wenzi ~]$echo "aaa" > /data/backup/a.txt --------------------------------192.168.28.30 创建密码文件 [root@wenzi ~]$echo "" > /etc/rsync.pas [root@wenzi ~]$chmod 600 /etc/rsync.pas 查看远程rsync服务器的模块信息 [root@wenzi ~]$rsync rsync://wenzi@192.168.28.31/backup Password: drwxr-xr-x 19 2024/02/04 18:20:47 . -rw-r--r-- 4 2024/02/04 18:20:47 a.txt 交互式验证查看具体模块内的文件 [root@wenzi ~]$rsync rsync://wenzi@192.168.28.31/backup Password: drwxr-xr-x 19 2024/02/04 18:20:47 . -rw-r--r-- 4 2024/02/04 18:20:47 a.txt 非交互式查看 [root@wenzi ~]$rsync --password-file=/etc/rsync.pas rsync://wenzi@192.168.28.31/backup drwxr-xr-x 19 2024/02/04 18:20:47 . -rw-r--r-- 4 2024/02/04 18:20:47 a.txt 将远程共享目录内容同步到本机客户端 创建本机的同步目录 /data/www [root@wenzi ~]$mkdir -p /data/www 前面的是src,后面的是dest,以src为主,--delete选项表示对比后多则删,少则补 [root@wenzi ~]$rsync -avz --delete --password-file=/etc/rsync.pas rsync://wenzi@192.168.28.31/backup /data/www/ receiving incremental file list ./ a.txt sent 46 bytes received 111 bytes 314.00 bytes/sec total size is 4 speedup is 0.03 [root@wenzi ~]$ll /data/www/ total 4 -rw-r--r-- 1 root root 4 Feb 4 18:20 a.txt 少则补,所以此时是将rsync服务器的/data/backup/a.txt同步至本机,而不是把远程的a.txt删除了
配合shell脚本实现实时同步

执行脚本前必须保证双方数据已同步,脚本用于同步后续的变化

------------------------------------192.168.28.30 [root@wenzi ~]$cat inotify_rsync.sh #!/bin/bash # #FileName: inotify_rsync.sh #Version: 1.0 #Date: 2024-02-04 #Author: wenzi #Description: This is description # SRC='/data/www/' DEST='wenzi@192.168.28.31::backup' #Ubuntu20.04不支持 --password-file=/etc/rsync.pas,可用变量实现 export RSYNC_PASSWORD= rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools 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,attrib,move,close_write ${SRC} | \ while read DATE TIME DIR FILE;do FILEPATH=${DIR}${FILE} #注意src和dest位置        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@wenzi ~]$./inotify_rsync.sh 新增文件 [root@wenzi ~]$echo "222" > /data/www/222.txt 查看日志 [root@wenzi ~]$cat /var/log/changelist.log 2024-02-04 19:30:59,file /data/www/222.txt was backuped up via rsync 2024-02-04 19:30:59,file /data/www/222.txt was backuped up via rsync ------------------------------------192.168.28.31 查看是否同步 [root@wenzi ~]$ll /data/backup/ total 16 -rw-r--r-- 1 root root 4 Feb 4 19:30 222.txt -rw-r--r-- 1 root root 4 Feb 4 18:20 a.txt 

sersync

下载地址 https://code.google.com/archive/p/sersync/downloads

优点

  • sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,
  • 所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
  • sersync配置很简单,其中提供了静态编译好的二进制文件和xml配置文件,直接使用即可
  • sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态
  • sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步
  • sersync不仅可以实现实时同步,另外还自带crontab功能,只需在xml配置文件中开启,即也可以
  • 按要求隔一段时间整体同步一次,而无需再额外配置crontab功能
  • sersync 可以二次开发

查看帮助

可见sersync已将inotify的内核参数优化了

[root@wenzi sersync]$sersync2 -h set the system param execute:echo  > /proc/sys/fs/inotify/max_user_watches execute:echo  > /proc/sys/fs/inotify/max_queued_events parse the command param _______________________________________________________ 参数-d:启用守护进程模式 参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍 c参数-n: 指定开启守护线程的数量,默认为10个 参数-o:指定配置文件,默认使用confxml.xml文件 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块 参数-m:单独启用其他模块,使用 -m socket 开启socket模块 参数-m:单独启用其他模块,使用 -m http 开启http模块 不加-m参数,则默认执行同步程序 ________________________________________________________________ 

实验

IP 系统 作用 同步目录
192.168.28.30 CentOS8 data server数据服务器 /data/www
192.168.28.31 CentOS8 backup server备份服务器/rsyncd服务器 /data/backup

基于rsync daemon实现sersync

备份服务器配置和上个实验一致。

--------------------------------------数据服务器 [root@wenzi ~]$yum -y install rsync [root@wenzi ~]$ls sersync2.5.4_64bit_binary_stable_final.tar.gz [root@wenzi ~]$tar -x -f sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/ [root@wenzi ~]$ln -s /usr/local/GNU-Linux-x86/ /usr/local/sersync [root@wenzi ~]$ll /usr/local/sersync/ total 1772 -rwxr-xr-x 1 root root 2214 Oct 26 2011 confxml.xml -rwxr-xr-x 1 root root  Oct 26 2011 sersync2 [root@wenzi ~]$echo 'PATH=/usr/local/sersync:$PATH' > /etc/profile.d/sersync.sh [root@wenzi ~]$source /etc/profile.d/sersync.sh [root@wenzi ~]$cp /usr/local/sersync/confxml.xml{,.bak} [root@wenzi sersync]$vim confxml.xml ... <filter start="false"> 不开启文件过滤功能,若为true,下面4种类型的文件将不同步 <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <inotify> 监控事件 <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="true"/> 文件属性变化后也会同步 <modify start="false"/> </inotify> <sersync> rsync命令配置 <localpath watch="/data/www"> 需要同步的源目录或文件 <remote ip="192.168.28.31" name="backup"/> 指定备份服务器地址和rsync daemon模块名 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-artuz"/> rsync命令选项 <auth start="true" users="wenzi" passwordfile="/etc/rsync.pas"/> 认证的用户密码 <userDefinedPort start="false" port="874"/><!-- port=874 --> rsync端口号 <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> 默认使用rsync daemon,若为true,使用远程shell模式 </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> 错误重传及日志文件路径 <crontab start="false" schedule="600"><!--600mins--> 不开启crontab <crontabfilter start="false"> 不开启crontab定时传输功能 <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync> ... 创建连接rsyncd服务器的用户密码文件,并修改权限 [root@wenzi sersync]$echo "" > /etc/rsync.pas && chmod 600 /etc/rsync.pas 

开始监控并实时同步 sersync2 -dro /usr/local/sersync/confxml.xml

sersync支持多实例

即监控多个目录时,需要分别配置不同配置文件,然后执行sersync2时指定配置文件即可。

sersync2 -rd -o /etc/sersync.d/nginx.xml

基于远程shell实现sersync

无需配置rsync daemon,只需要配置基于key验证的ssh即可。

-------------------------------------数据服务器 [root@wenzi ~]$ssh-keygen [root@wenzi ~]$ssh-copy-id 192.168.28.31 [root@wenzi ~]$tar -x -f sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/ [root@wenzi ~]$ln -s /usr/local/GNU-Linux-x86/ /usr/local/sersync [root@wenzi ~]$echo 'PATH=/usr/local/sersync:$PATH' > /etc/profile.d/sersync.sh [root@wenzi ~]$source /etc/profile.d/sersync.sh [root@wenzi ~]$cp /usr/local/sersync/confxml.xml{,.bak} [root@wenzi ~]$vim /usr/local/sersync/confxml.xml ... <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="true"/> 此行该为true <modify start="false"/> </inotify> <sersync> <localpath watch="/data/www"> 监控的源目录 <remote ip="192.168.28.31" name="/data/backup"/> 备份服务器IP和目标目录 ... <ssh start="true"/> 此行改为true,启用shell方式 

开始监控并实时同步

实验

实现基于分布式的LAMP架构,并将NFS实时同步到备份服务器

192.168.28.30 CentOS8 客户端,用于测试
192.168.28.40 Rocky8 DNS服务器,wenzi.com
192.168.28.41 Rocky8 httpd服务器,web1
192.168.28.42 Rocky8 httpd服务器,web2
192.168.28.60 Ubuntu2204 MySQL数据库
192.168.28.61 Ubuntu2204 NFS文件共享服务器
192.168.28.62 Ubuntu2204 备份服务器

DNS配置

安装软件 [root@wenzi ~]$yum -y install bind bind-utils [root@wenzi ~]$systemctl enable --now named.service 修改配置文件 [root@wenzi ~]$vim /etc/named.conf options { listen-on port 53 { 127.0.0.1;localhost; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { localhost;192.168.28.0/24; }; ... 定义区域文件 [root@wenzi ~]$vim /etc/named.rfc1912.zones zone "wenzi.com" { type master; file "wenzi.com.zone"; }; ... 区域解析库 [root@wenzi ~]$cp -a /var/named/named.localhost /var/named/wenzi.com.zone [root@wenzi ~]$cat /var/named/wenzi.com.zone $TTL 1D @ IN SOA ns mail.wenzi.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS master master IN A 192.168.28.40 www IN A 192.168.28.41 www IN A 192.168.28.42 [root@wenzi ~]$named-checkconf [root@wenzi ~]$named-checkzone wenzi.com /var/named/wenzi.com.zone zone wenzi.com/IN: loaded serial 1 OK [root@wenzi ~]$systemctl restart named.service

MySQL数据库配置

配合web服务器搭建的wordpress使用

安装mysql-server root@wenzi:~#apt update && apt -y install mysql-server root@wenzi:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf 将这两项注释 #bind-address = 127.0.0.1 #mysqlx-bind-address = 127.0.0.1 root@wenzi:~# mysql 创建wordpress数据库 mysql> create database wordpress; 创建用户 mysql> create user wp@'192.168.28.%' identified by 'Admin.123'; 授权 mysql> grant all on wordpress.* to wp@'192.168.28.%'; 重启服务 root@wenzi:~# systemctl restart mysql.service 

NFS服务器配置

-------------------------------------配置nfs 安装 [root@wenzi ~]$apt -y install nfs-kernel-server 创建共享目录 [root@wenzi ~]$mkdir -p /data/www 修改配置文件,将所有访问用户(包括root)都映射为nobody [root@wenzi ~]$vim /etc/exports /data/www 192.168.28.0/24(rw,all_squash) 生效 [root@wenzi ~]$exportfs -r 查看 [root@wenzi ~]$exportfs -v /data/www 192.168.28.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,all_squash) 授予nobody访问共享目录的权限 [root@wenzi ~]$setfacl -m u:nobody:rwx /data/www 创建测试文件 [root@wenzi ~]$echo "This is test NFS text" > /data/www/test.txt -------------------------------------配置sersync 可知,内核支持inotify root@wenzi:~# ll /proc/sys/fs/inotify/ total 0 dr-xr-xr-x 1 root root 0 Feb 5 05:32 ./ dr-xr-xr-x 1 root root 0 Feb 4 22:31 ../ -rw-r--r-- 1 root root 0 Feb 5 05:32 max_queued_events -rw-r--r-- 1 root root 0 Feb 5 05:32 max_user_instances -rw-r--r-- 1 root root 0 Feb 5 05:32 max_user_watches root@wenzi:~# apt -y install inotify-tools [root@wenzi ~]$ls sersync2.5.4_64bit_binary_stable_final.tar.gz snap [root@wenzi ~]$tar -x -f sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/ [root@wenzi ~]$ln -s /usr/local/GNU-Linux-x86/ /usr/local/sersync [root@wenzi ~]$echo 'PATH=/usr/local/sersync:$PATH' > /etc/profile.d/sersync.sh [root@wenzi ~]$source /etc/profile.d/sersync.sh [root@wenzi ~]$cp /usr/local/sersync/confxml.xml{,.bak} [root@wenzi ~]$vim /usr/local/sersync/confxml.xml ... <attrib start="true"/> ... <localpath watch="/data/www"> 此处源目录应为NFS共享目录 <remote ip="192.168.28.62" name="backup"/> ... <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> 创建密码文件 [root@wenzi ~]$echo "" > /etc/rsync.pas [root@wenzi ~]$chmod 600 /etc/rsync.pas

web1配置

[root@wenzi ~]$yum -y install httpd && systemctl enable --now httpd
[root@wenzi ~]$yum -y install nfs-utils
查看远程共享目录
[root@wenzi ~]$showmount -e 192.168.28.61
Export list for 192.168.28.61:
/data/www 192.168.28.0/24
挂载远程目录 至 /var/www/html,共享存储
[root@wenzi ~]$vim /etc/fstab
...
192.168.28.61:/data/www /var/www/html/  nfs _netdev 0 0

[root@wenzi ~]$mount -a
[root@wenzi ~]$df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  877M     0  877M    0% /dev
tmpfs                   tmpfs     896M     0  896M    0% /dev/shm
tmpfs                   tmpfs     896M  8.7M  887M    1% /run
tmpfs                   tmpfs     896M     0  896M    0% /sys/fs/cgroup
/dev/mapper/rl-root     xfs        17G  2.3G   15G   14% /
/dev/nvme0n1p1          xfs      1014M  192M  823M   19% /boot
tmpfs                   tmpfs     180M     0  180M    0% /run/user/0
192.168.28.61:/data/www nfs4      9.8G  3.3G  6.1G   35% /var/www/html

查看共享目录
[root@wenzi ~]$ll /var/www/html/
总用量 4
-rw-r--r-- 1 root   root   22 2月   5 04:55 test.txt
创建文件,验证对共享目录的读写功能
[root@wenzi ~]$touch /var/www/html/a.txt
[root@wenzi ~]$ll /var/www/html/
总用量 4
-rw-r--r-- 1 nobody nobody  0 2月   5 05:02 a.txt
-rw-r--r-- 1 root   root   22 2月   5 04:55 test.txt

创建测试网页
[root@wenzi ~]$echo 'This is test html' > /var/www/html/index.html

web2配置

[root@wenzi ~]$yum -y install httpd && systemctl enable --now httpd
[root@wenzi ~]$yum -y install nfs-utils
[root@wenzi ~]$showmount -e 192.168.28.61
Export list for 192.168.28.61:
/data/www 192.168.28.0/24
[root@wenzi ~]$vim /etc/fstab
...
192.168.28.61:/data/www /var/www/html/  nfs _netdev 0 0

[root@wenzi ~]$mount -a
[root@wenzi ~]$df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  877M     0  877M    0% /dev
tmpfs                   tmpfs     896M     0  896M    0% /dev/shm
tmpfs                   tmpfs     896M  8.7M  887M    1% /run
tmpfs                   tmpfs     896M     0  896M    0% /sys/fs/cgroup
/dev/mapper/rl-root     xfs        17G  2.1G   15G   12% /
/dev/nvme0n1p1          xfs      1014M  192M  823M   19% /boot
tmpfs                   tmpfs     180M     0  180M    0% /run/user/0
192.168.28.61:/data/www nfs4      9.8G  3.3G  6.1G   35% /var/www/html

备份服务器

root@wenzi:~# apt -y install rsync root@wenzi:~# systemctl enable --now rsync.service 编辑rsync配置文件,若不存在直接新建 root@wenzi:~# vim /etc/rsyncd.conf uid = root gid = root max connections = 0 ignore errors exclude = lost+found/ log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no [backup] path = /data/backup/ comment = This is backup dir read only = no auth users = rsyncuser secrets file = /etc/rsync.pas root@wenzi:~# echo "rsyncuser:" > /etc/rsync.pas root@wenzi:~# chmod 600 /etc/rsync.pas root@wenzi:~# mkdir -p /data/backup root@wenzi:~# systemctl restart rsync 在NFS上测试 [root@wenzi ~]$rsync rsync://192.168.28.62 backup This is backup dir

全部配置完毕,最后开启NFS服务器的备份实时同步

开启同步 [root@wenzi ~]$sersync2 -dro /usr/local/sersync/confxml.xml set the system param execute:echo  > /proc/sys/fs/inotify/max_user_watches execute:echo  > /proc/sys/fs/inotify/max_queued_events parse the command param option: -d run as a daemon option: -r rsync all the local files to the remote servers before the sersync work option: -o config xml name: /usr/local/sersync/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 rsyncuser passwordfile is /etc/rsync.pas 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 /data/www && rsync -artuz -R --delete ./ rsyncuser@192.168.28.62::backup --password-file=/etc/rsync.pas >/dev/null 2>&1 run the sersync: watch path is: /data/www 

查看备份服务器的备份目录

已同步

root@wenzi:~# ll /data/backup/
total 16
drwxrwxr-x 2 root   root    4096 Feb  5 05:26 ./
drwxr-xr-x 3 root   root    4096 Feb  5 05:55 ../
-rw-r--r-- 1 nobody nogroup    0 Feb  5 05:02 a.txt
-rw-r--r-- 1 nobody nogroup   18 Feb  5 05:26 index.html
-rw-r--r-- 1 root   root      22 Feb  5 04:55 test.txt

测试客户端访问www.wenzi.com

[root@wenzi ~]$dig www.wenzi.com

; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> www.wenzi.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46870
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 5ff8f3bcb99ef2f69118584c65c002b3559cdc5c9763a599 (good)
;; QUESTION SECTION:
;www.wenzi.com.                 IN      A

;; ANSWER SECTION:
www.wenzi.com.          86400   IN      A       192.168.28.42
www.wenzi.com.          86400   IN      A       192.168.28.41

;; AUTHORITY SECTION:
wenzi.com.              86400   IN      NS      master.wenzi.com.

;; ADDITIONAL SECTION:
master.wenzi.com.       86400   IN      A       192.168.28.40

;; Query time: 1 msec
;; SERVER: 192.168.28.40#53(192.168.28.40)
;; WHEN: Mon Feb 05 05:33:39 CST 2024
;; MSG SIZE  rcvd: 139

[root@wenzi ~]$curl www.wenzi.com
This is test html

今天的文章 数据的实时同步分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-12 16:46
下一篇 2024-12-12 16:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84349.html