文件同步 单向rsync 双向unison 监控inotifywait 免密登录

时间:2021-06-30 16:40:04

1、负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步

  rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能。

实现同步的两种方法

一:ssh方法

  rsync -avz 用户名@服务器ip /文件地址 本地目录

  回车

  input password

  

二:rsync同步

  首先安装yum install rsync

  创建 /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
max connections =
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout =
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [data]
path = /home/cloud-user/rsync
comment = ftp export area
read only = yes
auth users = username
secrets file = /etc/rsync_user.pas

创建用户密码文件

vim /etc/rsync_user.pas

username:password

启动同步功能

rsync --daemon

另一台服务器同步

rsync -acz username@ip::data 本地目录
回车
input password

注意:对于auth 失败;最可能的原因是rsync_user.pas的权限 必须为600

对于上行同步和下行同步失败还有可能是因为权限的问题,对于权限有两道检测;1:rsync配置文件的对于该用户的权限为只读;2:服务器对于rsync用户在同步的文件夹的权限不够;

上行同步

rsync -avz 本地目录 username@ip:服务器目录

免密登陆

方式一:ssh免密登录

ssh-keygen -t rsa
//回车、回车、回车

系统会生成.ssh目录 ,该目录下有三个文件

  id_rsa : 生成的私钥文件

  id_rsa.pub : 生成的公钥文件

  know_hosts : 已知的主机公钥清单

提交自己的用户名和密码去服务器

ssh-copy-id username@ip //回车
input password

然后可以通过ssh登录

ssh username@ip

二:rsync免密同步

系统中有一个环境变量RSYNC_PASSWORD 初始为空

设置RSYNC_PASSWORD密码

export RSYNC_PASSWORD=password

然后通过rsync同步

rsync -acz username@ip::data 本地目录

如果要实现实时同步需要先监控文件夹中的变化

使用inotifywait

编译安装inotify-tools-3.13

开始监控

//监控;监控/home/cloud-user/rsync/ 的增加和删除操作

inotifywait -mrq -e create,delete /home/cloud-user/rsync/
//同步;将本地home/cloud-user/rsync中的文件同步到改ip下的home/cloud-user/rsync中
rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync

编写inotifywait.sh脚本文件

#!bin/bash
inotifywait="inotifywait -mrq -e create,delete /home/cloud-user/rsync/"
rsync="rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync"
$inotifywait | while read directory event file
do
$rsync
done
//执行脚本
bash inotifywait.sh

rsync 更适合单向同步

如果要实现双向同步,可使用unison

yum install unison

编写脚本inotifywait_unison.sh

#!bin/bash
inotifywait="inotifywait -mrq -e create,delete,modify,move /home/cloud-user/rsync/"
unison="unison -batch /home/cloud-user/rsync/ ssh://IP//home/cloud-user/rsync"
$inotifywait | while read directory event file
do
$unison
done

注意shell文件权限

执行:

nohup bash inotifywait_unison.sh &

另一台服务也是相同操作,注意修改脚本文件中的ip