Linux 系统下安装 rsync+inotify 组件实现多个服务器之间文件实时同步

Agatha ·
更新时间:2024-11-14
· 930 次阅读

一、多个服务器之间的网络地址规划

设置一个服务端地址,其他的都设置成客户端地址。以服务端为主,在服务端建立备份文件目录,将需要备份的文件上传到此目录下,客户端上也建立一个相同的备份目录,备份目录所在的路径和服务端的保持一致。客户端的备份文件要和服务器端的备份文件保持实时同步。

例如:

服务端 IP:192.168.2.10

客户端 IP:192.168.2.11,192.168.2.12,...,192.168.2.18

二、服务端开启rsync服务

1.CentOS7操作系统安装完成后,会有自带的rsync-3.1.2-4.el7.x86_64组件,可以先检测一下

[root@localhost /]# rpm -qa|grep rsync

rsync-3.1.2-4.el7.x86_64 

2.查看rsyncd.conf配置文件,添加同步信息

[root@localhost ~]# vi /etc/rsyncd.conf

#设置服务器信息提示文件,在该文件中编写提示信息

motd file = /etc/rsyncd.motd

#开启 rsync 数据传输日志功能

transfer logging = yes

#设置日志文件名,可通过 log format 参数设置日志格式

log file = /var/log/rsyncd.log

#设置 rsync 进程号保存文件名称

pid file = /var/run/rsyncd.pid

#设置锁文件名称 lock file = /var/run/rsync.lock

#设置服务器监听的端口号,默认是 873

port = 873

#设置本服务器所监听网卡接口的 IP 地址

address = 192.168.2.10

#设置进行数据传输时所使用的账户名或 ID 号,默认使用 nobody,可以改成root

uid = root

#设置进行数据传输时所使用的组名或 GID 号,默认使用 nobody,可以改成root

gid = root

#增加对目录文件软连接的备份

use chroot = no

#设置并发连接数

max connections = 50

#自定义模块,rsync 通过模块定义同步的目录,可定义多个

[backup]

#同步目录的真实路径通过 path 指定,定义接收备份数据目录

path = /backup/

#忽略一些 IO 错误

ignore errors

#是否允许客户端上传数据,true 表示不允许,false 对备份数据可读写

read only  = false

#设置哪些主机可以同步数据,多 ip 和网段之间使用空格分隔

hosts allow = 192.168.2.0/24

#除了 hosts allow 定义的主机外,拒绝其他所有

hosts deny = *

#设置允许连接服务器的账户,此账户可以是系统中不存在的用户

auth users = rsync_backup

#密码验证文件名,该文件权限要求为只读,建议为 600,用来存放密码

secrets file = /etc/rsyncd.secrets

#客户端请求显示模块列表时,不显示 rsync 服务端资源列表

list = false

3.创建 rsync 的密码文件,并设置成只有 root 用户才有的权限

[root@localhost ~]# echo 'tongbu' >> /etc/rsyncd.secrets

查看密码信息

[root@localhost ~]# cat /etc/rsyncd.secrets

tongbu

修改文件权限

[root@localhost ~]# chmod -R 600 /etc/rsyncd.secrets

4. 创建欢迎信息文件,将内容写入到文件中

[root@localhost ~]# echo "Welcome to access" >> /etc/rsyncd.motd

查看欢迎信息

[root@localhost ~]# cat /etc/rsyncd.motd

Welcome to access

5.开启 rsyncd 服务并设置开机自启动

[root@localhost ~]# systemctl start rsyncd

[root@localhost ~]# systemctl enable rsyncd

Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. 

6.检查是否已经成功启动

[root@localhost ~]# netstat -lnp|grep 873

tcp        0      0 192.168.2.10:873        0.0.0.0:*               LISTEN      8846/rsync 

三、客户端创建备份目录及创建密码文本 
1. 添加同步信息 

[root@localhost ~]# vi /etc/rsyncd.conf

motd file = /etc/rsyncd.motd

transfer logging = yes

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

port = 873

address = 192.168.2.11 

uid = root

gid = root

use chroot = no

max connections = 50

[backup]

path = /backup/ 

ignore errors

read only  = false

hosts allow = 192.168.2.10 

hosts deny = *

auth users = rsync_backup 

secrets file = /etc/rsyncd.secrets

list = false 

开启rsyncd服务并设置开机自启动

[root@localhost ~]# systemctl start rsyncd

[root@localhost ~]# systemctl enable rsyncd

Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service

2.将密码写入到密码文件中

[root@localhost ~]# echo "rsync_backup:tongbu" >> /etc/rsyncd.secrets

3.创建备份文件目录

[root@localhost ~]# mkdir /backup

4.创建需要备份的文件

[root@localhost backup]# touch {1..10} /backup/

5.将密码文件权限修改为 600

[root@localhost ~]# chmod -R 600 /etc/rsyncd.secrets

6.将本地文件推送到服务端

[root@localhost ~]# rsync -avz /backup/ rsync_backup@192.168.2.10::backup --password-file=/etc/rsyncd.secrets 

7.在其他客户端上安装 rsync 组件,进行相应的参数设置 

四、 在服务端添加inotify实时监控服务,监控服务端指定目录下所有文件状态

在服务端安装 inotify 实时监控组件,当修改源文件时,其他客户端服务器上的指定文件也随之改变,同时还将变化的过程记录到指定的日志中。一旦开启监控,在任何时间段下,如果服务端指定的文件有改变,其他客户端上与之对应的文件也随之改变,也就是不同服务器之间指定的文件实时同步

下载 inotify 组件:

[root@localhost ~]# cd /usr/local/src

[root@localhost src]# wget http://cloud.github.com/downloads/rvoicilas/ inotify-tools/inotify-tools-3.14.tar.gz

将inotify-tools-3.14.tar.gz进行解压:

[root@localhost src]# tar -zxvf inotify-tools-3.14.tar.gz

将解压后的文件移至/usr/local目录下

[root@localhost src]# mv inotify-tools-3.14 /usr/local

在/usr/local/目录下新建inotify文件,主要将inotify服务生成的文件安装到/usr/local/inotify中

[root@localhost local]# mkdir inotify

初始化安装环境,检查是否满足安装条件

[root@localhost local]# cd inotify-tools-3.14

[root@localhost inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify

开始安装

[root@localhost inotify-tools-3.14]# make && make install

安装成功!

第一种情况:监控本地服务器下也就是服务端指定的目录,在这个目录中是否增加文件、修改文件、删除文件、创建新的文件

1.创建监控目录和监控脚本

[root@localhost ~]# mkdir /home/inotify

[root@localhost inotify]# touch inotify.sh

[root@localhost inotify]# ls

inotif.sh 

2.编辑监听脚本 服务端作为文件源,inotify 监听服务端/backup/下的所有文件,将有变化的文件信息记录到/tmp/rsync.log 文件中 [root@localhost inotify]# vi inotif.sh

#!/bin/bash

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f %e' --event modify,delete,create,attrib  /backup/ | while read date time file event  

do      

           case $event in          

                    MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)                  

                                      echo $event'-'$file >> /tmp/rsync.log 2>&1

                              ;;              

                    MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)                  

                                      echo $event'-'$file >> /tmp/rsync.log 2>&1

                              ;;

            esac

done

注释:

inotifywait 可以用来收集有关文件访问信息

inotifywatch 用于收集关于被监视的文件系统的统计数据

--timefmt 是指定时间的输出格式

--format 指定文件变化的详细信息

--event 指触发事件

3.给脚本添加读写权限

[root@localhost inotify]# chmod -R 755 inotif.sh

4.开启监控服务

服务端开启服务:

[root@localhost inotify]# sh inotif.sh &

在服务端 backup 中创建新的文件,文件夹进行测试

[root@localhost backup]# touch sohu.txt

在服务端查看日志记录,文件的增加、删除、修改都能被记录下来

[root@localhost tmp]# cat rsync.log

CREATE,ISDIR-/backup/www           #创建新的文件夹

DELETE-/backup/www/web.xml        #删除已有的文件

CREATE-/backup/sohu.txt                 #创建新的文件

客户端查看新增的文件

[root@localhost backup]# ls

sohu.txt 

测试成功,实时监控本地文件的使用情况

第二种情况:安装 inotify 服务进行监控并将服务端指定的文件远程到不同服务器指定的目录下,保持不同服务器之间的文件实时同步

1.创建实时同步监控脚本

进入到指定的监控目录下

[root@localhost ~]# cd /home/inotify

创建一个新的监控脚本

[root@localhost inotify]# touch inotifcg.sh

给监控脚本赋予读写权限

[root@localhost inotify]# chmod -R 755 inotifcg.sh

开始编辑监控程序

[root@localhost inotify]# vi inotifcg.sh 

#!/bin/bash

jtprog="inotifywait"                                            #监听命令

events="create,delete,modify,attrib"                 #触发的事件

jtcs="-mrq"                                                        #监听参数

jtml="/backup/"                                                  #监听目录

khdz="192.168.2.11"                                         #客户端地址

szxyh="rsync_backup"                                      #设置新用户

passfile="/etc/rsyncd.secrets"                           #设置用户密码

tbcs="-avz"                                                        #同步参数

tbmk="backup"                                                 #同步模块 

$jtprog $jtcs --format "%w%f" -e $events $jtml | while read line

do      

         rsync $tbcs $line $szxyh@$khdz::$tbmk --password-file=$passfile

done

保存并退出

开启监控服务

[root@localhost inotify]# sh inotifcg.sh &

2.进行测试,在服务端指定目录下新建文件,在客户端查看结果是否出现新文件

服务端创建新文件

[root@localhost ~]# cd /backup

[root@localhost backup]# touch test.txt qq.txt  

客户端查看新文件                                                                                

[root@localhost backup]# ls

qq.txt  test.txt

查看结果:实时同步成功 


 


作者:tizhen



Linux 服务器 安装 系统 inotify rsync

需要 登录 后方可回复, 如果你还没有账号请 注册新账号