rsync + inotify 单向同步数据

实验目的

验证:不同权限用户,不同密码下,单向同步数据

一、环境准备

###########################################

1.1 机器列表

     IP               USER           PASSWD             作用
192.168.199.201       root              1           源服务器(客户端)
192.168.199.202       faye             123          目标服务器(服务端) 
192.168.199.203       root              1           目标服务器(服务端) 

###########################################

1.2 安装依赖 ,3台机器

yum install -y gcc gcc+

###########################################
root操作,普通用户不行
###########################################

二、192.168.199.202 目标服务器(服务端) 操作

###########################################

2.1 安装 rsync(只需要rsync)

下载包

cd  /usr/local/
wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

解压安装

cd  /usr/local/
tar zxvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
./configure --prefix=/usr/local/rsync
make && make install

###########################################

2.2 配置rsyncd.conf (常用参数)

PS:注释语句不可以和参数在同一行,不然无法同步数据

vim /usr/local/rsync/rsyncd.conf
### 全局参数 ###
#默认端口
port=873  
# rsync启动时欢迎信息页面文件位置(文件内容自定义)
# motd file = /etc/rsyncd.Motd      
log file = /var/log/rsyncd.log    
pid file = /var/run/rsyncd.pid
# 支持max connections参数的锁文件    
lock file = /var/run/rsync.lock  
# 设置rsync运行权限为root 
uid = root
# 设置rsync运行权限为root                 
gid = root  
# 默认为true,修改为no,增加对目录文件软连接的备份                
use chroot = no 
# 最大连接数     
max connections = 2000
# 设置超时时间
timeout = 600         

### 模块参数,有的也可以写在全局变量中 ###
# 自定义模块名称
[testmodule]   
# 本机存放源服务器数据的文件夹,必须存在                   
path = /data     
# 解释用语    
comment = sync file  from  192.168.199.201:/data
# 设置rsync服务端文件为读写权限   
read only = false 
# 不显示rsync服务端资源列表 
list = no 
# 执行数据同步的用户名(必须存在),可以设置多个,用英文状态下逗号隔开        
auth users = faye    
# 允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开           
hosts allow = 192.168.199.0/24
# 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开  
hosts deny = * 
# 用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件                 
secrets file = /usr/local/rsync/rsyncd.secrets

###########################################

2.3 配置密码文件,并修改权限

vim /usr/local/rsync/rsyncd.secrets
#格式:用户名:密码,可以设置多个,每行一个用户名:密码
faye:123 

给密码文件赋予600权限,必须600,
目标服务器属主必须为root,源服务器最好属主也是root

chown root.root  /usr/local/rsync/rsyncd.secrets
chmod 600 /usr/local/rsync/rsyncd.secrets

###########################################

2.4 新建储存目录(如果不存在)

这个目录是rsyncd.conf 中模块中的path参数,必须要存在
普通用户faye要对这个目录有操作权限

mkdir  /data
chmod 777 /data

如果目录不存在,大概率会报下面的错误

rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]

###########################################

2.5 启动rsyncd,查看rsyncd进程 端口

/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
ps -ef | grep rsync
netstat -lanp | grep 873

关闭rsync,加 -9 需要删除pid文件

kill  PID

开机启动

echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local

###########################################

三、192.168.199.203 目标服务器(服务端) 操作

###########################################

3.1 安装 rsync(只需要rsync)

参考 2.1
###########################################

3.2 配置rsyncd.conf (常用参数)

参考 2.2
修改 auth users = root
###########################################

3.3 配置密码文件,并修改权限

echo "root:1" >>/usr/local/rsync/rsyncd.secrets
chown root.root  /usr/local/rsync/rsyncd.secrets
chmod 600 /usr/local/rsync/rsyncd.secrets

###########################################

3.4 新建储存目录(如果不存在)

参考 2.4
###########################################

3.5 启动rsyncd,查看rsyncd进程 端口

参考 2.5
###########################################

四、192.168.199.201 源服务器(客户端) 操作

###########################################

4.1 安装 rsync

参考 2.1
无需配置rsyncd.conf,因为源服务器的rsync不启动
###########################################

4.2 安装 inotify

下载包

cd  /usr/local/
wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

解压安装

cd  /usr/local/
tar xzvf inotify-tools-3.13.tar.gz
chown -Rf root:root inotify-tools-3.13
cd inotify-tools-3.13
./configure --prefix=/usr/local/inotify
make && make install

###########################################

4.3 设置环境变量

echo "export PATH=/usr/local/inotify/bin/:$PATH" >>/root/.bash_profile

生效

source /root/.bash_profile

加载库文件

echo '/usr/local/inotify/lib' >> /etc/ld.so.conf 
ldconfig
ln -s /usr/local/inotify/include /usr/include/inotify

###########################################

4.4 修改inotify默认参数(inotify默认内核参数值太小)

echo "fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535"  >>/etc/sysctl.conf 

生效

sysctl -p

4.5 创建脚本,实时触发rsync进行同步

vim /usr/local/inotify/rsync.sh
#!/bin/bash
dstip1=192.168.199.202
dstip2=192.168.199.203 

# 对/特别敏感,如果复制整个coco目录,coco后面不加/
srcdir=/home/coco        #源服务器同步目录,必须存在       
dstdir=testmodule        #目标服务器rsync同步目录模块名称

:<<!
excludedir=/usr/local/inotify/exclude.list 
不想同步的目录or文件
目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写
a/
b/b1/
!

user202=faye   #目标服务器rsync同步用户名
user203=root
passdir1=/usr/local/rsync/rsyncd.secrets202  #目标服务器rsync同步用户的密码在源服务器的存放路径
passdir2=/usr/local/rsync/rsyncd.secrets203

inotifywait=/usr/local/inotify/bin/inotifywait
$inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir | while read file
do
	# 如果端口不为22的话,可以在`/usr/bin/rsync-vzrtopg`后面添加`-e ssh -p 端口号`进行传输
	/usr/bin/rsync -vzrtopg --delete --progress --password-file=$passdir1  $srcdir $user202@$dstip1::$dstdir
	# 可家判断语句看是否成功
	echo "${file} was rsynced" >>/tmp/rsync.log 2>&1
	/usr/bin/rsync -vzrtopg --delete --progress --password-file=$passdir2  $srcdir $user203@$dstip2::$dstdir
	echo "${file} was rsynced" >>/tmp/rsync.log 2>&1
done

新建密码文件,只需要填入密码就行

echo  "123"  >>/usr/local/rsync/rsyncd.secrets202
echo   "1"   >>/usr/local/rsync/rsyncd.secrets203
chown root.root  /usr/local/rsync/rsyncd.secrets{202,203}
chmod 600 /usr/local/rsync/rsyncd.secrets{202,203}

给监控脚本赋予777权限

chmod 777 /usr/local/inotify/rsync.sh

设置开机自动在后台运行脚本

sh /usr/local/inotify/rsync.sh & 

4.6 测试

cd  /home/coco
touch 1
mkdir haha

查看日志

tailf   /tmp/rsync.log 

4.7 验证

正常情况下,202和203如下

[faye@node2 coco]$ tree /data
/data
└── coco
    ├── 1
    └── haha

2 directories, 1 file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值