提示:如有侵权,请联系删除
目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、rsync是什么?
rsync是类unix系统下的数据镜像备份工具。一款支持快速完全备份和增量备份的工具,支持本地复制,远程同步等,类似于scp命令;rsync 命令在同步文件之前要先登录目标主机进行用户身份认证,认证过后才能进行数据同步,身份认证方式取决于所使用的协议类型,rsync一般使用两种协议进行数据同步:ssh协议和rsync协议。
二、rsync基础实验演示
2.1ssh协议数据同步
实验环境:一台NFS服务器,一台rsync服务器
在两台服务器上分别创建目录(/filesrc、/filedst)
下行同步(下载)
格式:rsync -avz 服务器地址:/服务器目录/* /本地目录
rsync -avz root@192.168.88.10:/filesrc/* /filedst
-a:归档模式,递归并保留对象属性
-v:显示同步过程
-z:在传输文件时进行压缩
上行同步(上传)
格式:rsync -avz /本地目录/* 服务器地址:/服务器目录
rsync -avz /filedst/* root@192.168.88.10:/filesrc
注意:使用root用户进行实验可以,但生产环境中尽量使用单独创建的普通用户,减少权限溢出
创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用ACL设置权限
useradd zhangsan
passwd zhangsan
setfacl -m u:zhangsan:rwx /filesrc
拓展:若要实现免密码数据同步,只需要做好ssh密钥对登录即可
2.2rsync协议数据同步
实验环境:一台服务器,一台客户端
1.在两台服务器上分别创建目录(/filesrc、/filedst)
2.搭建rsync服务(仅需要在NFS服务器上搭建即可)
a.创建主配置文件(/etc/rsyncd.conf)
address = 192.168.88.10 #rsync服务绑定IP
port 873 #默认服务端口873
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #进程号文件位置
[web]
#共享名:用来连接是写在url上的,切记
comment = web directory backup
#共享描述话语
path = /filesrc
#实际共享目录
read only = no
#是否仅允许读取
dont compress = *.gz *.bz2
#哪些文件类型不进行压缩
auth users = user1
#登录用户名(非系统用户,需要自行创建,写入文件即可,不用useradd创建)
secrets file = /etc/rsyncd_users.db
#认证所需账户密码文件(需自行创建-同上)
b.创建认证所需账户密码文件
vim /etc/rsyncd_users.db
user1:123456
chmod 600 /etc/rsyncd_users.db #必须修改权限,否则登录报错
c.启动服务
rsync --daemon
netstat -antp | grep :873 #查看是否启动成功
d.设置映射用户对共享目录有权限(r)
setfacl -m u:nobody:rwx /filesrc
注意:关闭服务可使用kill命令,但偶尔会造成服务被结束,但进程号配置文件不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常(建议自己写一个rsync的服务管理脚本)
下行同步(下载)
格式:rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录
rsync -avz rsync://user1@192.168.88.10/web /filedst
拓展:–delete:删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)
rsync -avz --delete rsync://user1@192.168.88.10/web /filedst
上行同步(上传)
格式:rsync -avz /本地目录/* rsync://用户名@服务器地址/共享模块名
rsync -avz /filedst/* rsync://user1@192.168.88.10/web
拓展:rsync协议的免密码可以借助一个环境变量实现(/etc/profile)
export RSYNC_PASSWORD=123456
三、配置rsync+inotify实时同步
1.inotify部署安装
#yum -y install gcc*
#tar -xf inotify-tools-3.14.tar.gz
#cd inotify-tools-3.14
#./configure && make && make install
2.利用rsync+inotifywait结合脚本实现单向实时同步
#!/bin/bash
a="inotifywait -mrq -e modify,attrib,create,move,delete /filesrc"
b="rsync -avz /filesrc/* root@192.168.88.20:/filedst"
$a | while read directory event file #while判断是否接收到监控记录
do
$b
done
注:用户登录时要求免密码验证,可以在 2.2rsync协议数据同步的基础上借助环境变量实现
3.实验结果验证
在服务器端创建,删除文件,查看备份端是否正常
四、配置unison+inotify实现双向实时同步
1.环境要求
1)准备好同步所需的两个目录
2)如若用root来实现登录的话,生成密钥对,以便于免密码验证
3)准备好inotify和unison的软件包
2.安装步骤
1)先安装inotify
tar -xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
2)再安装ocaml
tar -xf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1
./configure
make world opt
make install
3)安装unison
tar -xf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true
cp unison /usr/local/bin/
注意:同样的操作在服务器端也做一遍。
3.配置脚本
注:双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,否则会变成死循环。
filesrc端:
#!/bin/bash
a="inotifywait -mrq -e modify,attrib,create,move,delete /filesrc"
b="/usr/local/bin/unison -batch /filesrc/ ssh://192.168.88.20//filedst/"
$a | while read directory event file
do
$b
done
filedst端:
#!/bin/bash
a="inotifywait -mrq -e modify,attrib,create,move,delete /filedst"
b="/usr/local/bin/unison -batch /filedst/ ssh://192.168.88.10//filesrc/"
$a | while read directory event file
do
$b
done
4.测试
将两个脚本放入后台执行
分别在两个主机上创建文件查看是否可以实现双向实时同步(可能会有延迟)