您的位置:首页 > 大数据 > 人工智能

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

2017-03-16 01:51 537 查看
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 = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Cousine for Powerline"; color: #0000ff; background-color: #00d900 }
span.s1 { }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: