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的主要内容,如果未能解决你的问题,请参考以下文章