rsync+inotify+unison

Posted lyshark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify+unison相关的知识,希望对你有一定的参考价值。

**************************************************************************************************
◆案例1◆ 基于SSH验证的数据同步
**************************************************************************************************

1.首先生成密钥对

ssh-keygen -t rsa #生成密钥对

ssh-copy-id [email protected]对方IP #拷贝SSH


2.使用Rsync免密码上传下载

rsync -avz 本地文件 [email protected]服务器IP:/保存位置 #把我的文件发送给对方

rsync -avz [email protected]服务器IP:/对方文件位置 /保存位置 #把对方的文件下载给我


**************************************************************************************************
◆案例2◆ 基于Rsync的数据同步
**************************************************************************************************

Rsync 命令常用用法

基本格式: rsync 【选项】 原始位置 目标位置


-a #归档模式,递归保留对象属性,等同于 -rlptgoD
-v #显示同步过程的详细信息(verbose)信息
-z #在传输文件是进行压缩(compress)
-H #保留硬链接文件
-A #保留 ACL 属性信息
--delete #删除目标位置有而原始位置没有的文件
-r #递归模式,包含目录和子目录中所有文件
-l #对于符号连接文件仍然复制为符号连接文件
-p:保留文件的权限标记
-t #保留文件的时间标记
-g #保留文件的属主标记(仅超级用户使用)
-o #保留文件属主标记(仅超级用户使用)
-D #保留设备文件及其他特殊文件


****************************************************************************
◆服务端配置◆
****************************************************************************

1.创建服务端存储位置

mkdir -p /server/rsync

2.编辑Rsync主配置文件

编辑配置文件,覆盖写入
--------------------------------------------------------------------------------------------------------------
vim /etc/rsyncd.conf

use chroot=yes #禁锢用户主目录
address=127.0.0.1 #指定本机的IP地址
port=873 #指定默认端口
log file=/var/log/rsync.log #指定日志文件保存位置
pid file=/var/syncd.pid #指定PID文件保存位置

[pub] #声明目录名(也就是下面的共享名)
comment=rsync server #说明信息
path=/server/rsync #要同步的目录
read only=yes #只读
dont compress=*.gz *.tgz *.bz2 #指定这些目录不压缩
auth users=lyshark #使用sync的用户名密码
secrets file=/etc/rsyncd_users.db #存放虚拟用户的密码文件
--------------------------------------------------------------------------------------------------------------

3.创建密码文件

编辑配置文件,覆盖写入
--------------------------------------------------------------------------------------------------------------
vim /etc/rsyncd_users.db

lyshark:123 #账号lyshark密码123
--------------------------------------------------------------------------------------------------------------

4.赋予权限并启动

chmod 600 /etc/rsyncd_users.db #给予权限,保证安全
rsync --daemon #开启服务
netstat -antp |grep ":873" #查看端口,是否开启成功


****************************************************************************
◆客户端配置◆
****************************************************************************

1.创建客户接收位置

mkdir -p /client/rsync


2.声明全局变量,sync验证时先搜索变量在输入密码

export RSYNC_PASSWORD=123 #设置验证密码
echo "export RSYNC_PASSWORD=123" >> /etc/profile #写入配置文件


3.同步选项

rsync -avz 虚拟用户名@IP地址::共享名 数据保存位置 #从服务器同步到本机

rsync -avz --delete 虚拟用户名@服务器IP地址::共享名 数据保存位置 #从服务器同步到本机并且完全与服务器保持数据一致

rsync -avz [email protected]::pub /client/rsync


**************************************************************************************************
◆案例3◆ Rsync+Inotify实现实时单向同步
**************************************************************************************************

1.主服务器对从服务器建立SSH密钥对验证


****************************************************************************
◆同步选项全部在主服务器端做◆
****************************************************************************

1.安装inotify-tools

wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

tar -xzvf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13/

./configure

make && make install


2.优化内核参数(可选)

--------------------------------------------------------------------------------------------------------------
vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p
--------------------------------------------------------------------------------------------------------------

3开启监控模块(测试)

inotifywait -mrq -e create,delete /tmp #tmp为被监控目录


4.监控脚本,实现如果服务端数据更新,自动使用Rsync命令同步数据到客户端

--------------------------------------------------------------------------------------------------------------
#!/bin/bash

date="inotifywait -mrq -e create,delete /本地目录"
sync="rsync -avz --delete /本地目录/ 对方用户名@对方IP:/同步到对方那个目录"

$date | while read DIRECTORY EVENIS FILE
do
$sync
done
--------------------------------------------------------------------------------------------------------------


***************************************************************************************************************************
◆案例3◆ Unison+Inotify实时双向数据同步
***************************************************************************************************************************

注:两台服务器必须同时建立SSH密钥对验证

****************************************************************************
◆服务器和客户端必须同时安装以下软件,做相同的配置◆
****************************************************************************

1.安装Inotify

wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

tar -xzvf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13/

./configure

make && make install

--------------------------------------------------------------------------------------------------------------
vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p
--------------------------------------------------------------------------------------------------------------


2.安装Unison

a)安装依赖

wget http://caml.inria.fr/pub/distrib/ocaml-4.06/ocaml-4.06.0.tar.gz

tar -xzvf ocaml-4.06.0.tar.gz

cd ocaml-4.06.0/

./configure

make world opt && make install


b)安装Unison

wget https://codeload.github.com/bcpierce00/unison/tar.gz/v2.51.2

tar -xzvf unison-2.51.2.tar.gz

cd unison-2.51.2/

make UISTYLE=text THREADS=true static=true

cp -a src/unison /usr/local/bin/ #只需要此主程序
chmod 755 /usr/local/bin/unison #赋予执行权限


3.服务器和客户端同时运行脚本

--------------------------------------------------------------------------------------------------------------
#!/bin/bash

date="inotifywait -mrq -e create,delete /本地目录"
sync="/usr/local/bin/unison -batch /本地目录/ ssh://[email protected]远程同步IP//同步到远程目录"

$date | while read DIRECTORY EVENIS FILE
do
$sync
done
--------------------------------------------------------------------------------------------------------------

以上是关于rsync+inotify+unison的主要内容,如果未能解决你的问题,请参考以下文章

rsync下行同步rsync+inotify实时同步(同步如饮水一样简单)

rsync+inotify远程同步

Rsync下行同步+inotify实时同步介绍和部署

rsync+inotify的使用注意事项

rsync+inotify实时备份

rsync远程同步+inotify监控