企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
参考博客:https://www.cnblogs.com/MacoLee/p/5633650.html 一、文件同步很简单 服务端:被动的接收传输过来的数据 客户端:主动提供数据给服务端 安装思路:服务端和客户端都需要安装rsync软件。因为我这里理解的客户端是提供数据给服务端,所以客户端需要实时监测文件的变动,这里的客户端需要安装inotify软件。 安装演示思路:这里按照常规的思路。在服务端安装完rsync软件后,编辑相关的配置文件,并启动rsync。在客户端安装完rsync软件后,不做任何操作,只需要执行相关的同步命令即可。 二、安装rsync软件 1、两种安装方式:(1)、直接使用yum命令安装(本人采用) yum -y install rsync (2)、使用编译安装 ``` [root@www ~]# cd /usr/local/src/ [root@www src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz [root@www src]# tar zxvf rsync-3.0.9.tar.gz [root@www src]# cd rsync-3.0.9 [root@www rsync-3.0.9]# ./configure --prefix=/usr/local/rsync [root@www rsync-3.0.9]# make [root@www rsync-3.0.9]# make install</pre> ``` 2、设置密码认证文件和配置文件 (1)、建立用户和密码认证文件(编译安装时的位置) (只在服务端做配置文件的修改) ``` [root@www rsync-3.0.9]# echo "web:123" > /usr/local/rsync/rsyncd.passwd</pre> ``` (只在客户端做配置文件的修改) ``` [root@www rsync-3.0.9]# echo "123" > /usr/local/rsync/rsync.passwd</pre> ``` 设置权限为只读 ``` [root@www rsync-3.0.9]# cd /usr/local/rsync [root@www rsync]# chmod 600 rsyncd.passwd</pre> ``` (2)、建立rsync配置文件(只在服务端做配置文件的修改) 安装方式不同引发的配置文件区别: <1>、直接使用yum命令安装时 ``` [root@www rsync]# vi /etc/rsyncd.conf # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. uid = root gid = root use chroot = no max connections = 200 timeout = 1000 transfer logging = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log log format = %t %a %m %f %b port = 873 ignore errors #read only = yes #address = 192.168.248.136 [web] path = /home read only = false write only = yes hosts allow = 192.168.248.138 192.168.248.136 hosts deny = * list = false auth users = web secrets file = /usr/local/rsync/rsyncd.passwd #read only = yes #exclude = test/ #不同步的目录</pre> ``` <2>、使用编译安装(举例) ``` [root@www rsync]# vi /usr/local/rsync/rsyncd.conf uid = root gid = root use chroot = no max connections = 4 strict modes = yes hosts allow = 192.168.1.101 #可以空格,允许多个 port = 873 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [test] path = /home/test ignore errors read only = false list = false auth users = backup secrets file = /usr/local/rsync/rsyncd.passwd</pre> ``` PS:注意这里要将read only 修改为 false, 因为是要将文件同步到该模块的,必须可写 (3)、以守护进程方式启动rsync服务器(客户端不需要启动,就是没有修改配置文件的客户端) <1>、使用yum命令安装时 ``` rsync --daemon</pre> ``` <2>、使用编译安装时 ``` rsync --daemon --config=/usr/local/rsync/rsyncd.conf</pre> ``` (4)、加入开机自启动 ``` echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf" >> /etc/rc.local</pre> ``` 三、安装inotify软件 在客户端(就是要监测文件变化的那端)安装inotify。 (1)、验证rsync是否安装成功 举例1:客户端上执行,客户端向服务端复制文件 ``` /usr/bin/rsync -vzrtopg --progress --password-file=/etc/web.passwd /home/fan web@192.168.248.136::web</pre> ``` 举例2:客户端上执行,服务端向客户端复制文件 ``` [root@www rsync]# rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd backup@192.168.1.102::test /home/test</pre> ``` (2)、安装inotify ``` [root@www rsync]# cd /usr/local/src/ [root@www src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@www src]# tar zxvf inotify-tools-3.14.tar.gz [root@www src]# cd inotify-tools-3.14 [root@www inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify [root@www inotify-tools-3.14]# make [root@www inotify-tools-3.14]# make install </pre> ``` (3)、创建rsync复制脚本 此项功能主要是将客户端的目录/home/fan/里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给服务端的/home里,下面是通过shell脚本实现的。 ``` #!/bin/bash host=192.168.248.136 src=/home/fan des=web user=web /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --progress --delete --password-file=/etc/web.passwd $src $user@$host::$des echo "${files} was rsynced" >>/data/logs/rsync.log 2>&1 done</pre> ``` 其中host是client的ip,src是客户端要实时监控的目录,des是认证的模块名,需要与client一致,user是建立密码文件里的认证用户。 运行脚本 ``` [root@www rsync]# sh /tmp/rsync.sh & </pre> ``` 把rsync.sh脚本加入到开机启动项里 ``` [root@www rsync]# echo "setsid /usr/local/rsync/rsync.sh &" >> /etc/rc.local</pre> ```