rsync+inotify,数据备份,数据传输
特点:传输过程中对相关数据校验。自增式同步。自成一套用户和密码,不和系统用户发生冲突。
实验结构:利用rsync数据传输,把数据端的数据/rsync-data目录传输到灾备端/rsync目录保存。

灾备端 192.168.5.160 /rsync rsync-server
数据端 192.168.5.140 /rsync-data rsync-client

灾备端操作

安装rsync

[root@rysnc-server ~]# rpm -qa |grep rsync
rsync-3.1.2-10.el7.x86_64
[root@rysnc-server ~]# yum -y install rsync

编辑配置文件

vim /etc/rsyncd.conf 
log file = /var/log/rsyncd.log   ###指定日志文件
pid  file= /var/log/rsyncd.pid #指定pid文件
lock file= /var/log/rsyncd.lock ##指定lock文件
motd file= /etc/rsyncd.motd ##指定欢迎消息文件
read only=no    #控制权限可以读写,只读就是yes
host allow=192.168.5.0/24 ##允许的IP段(白名单)
list=yes #能否列出来文件 列表
uid=nobody  #uid
gid=nobody #gid
use chroot=no #不能切换路径
max connections=4  #最大链接数
transfer logging = yes  #开启日志
#下面为共享配置段
 [data]
        path = /rsync  #路径
        auth users = user1 #连接用户
        comment = ftp export area  #描述信息
        secrets file = /etc/user1.pas  #认证用户名和密码信息

编辑密码文件

/etc/rsyncd.pas,这个配置文件中的用户和密码不与本机用户名和密码产生冲突,自成一派。

[root@rysnc-server etc]# vim user1.pas 
user1:123
#用户名:密码
密码文件权限必须为600
[root@rysnc-server ~]# chmod  600 /etc/user1.pas
[root@rysnc-server ~]# ll /etc/user1.pas 
-rw-------. 1 root root 10 1月  10 10:12 /etc/user1.pas

编辑注释文件,第一次登陆的提示界面.

[root@rysnc-server etc]# vim rsyncd.motd    
welcome to emporer rsync service !!!

创建数据目录启动服务

[root@rysnc-server ~]#mkdir /rsync
[root@rysnc-server ~]#systemctl start rsyncd #或者后面一种方法启动
[root@rysnc-server ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

服务端口及其防火墙配置

服务默认开启873端口。,也可在配置文件中定义port为873,或者启动服务时/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --port=8080

[root@rysnc-server etc]# netstat  -ntpla |grep :873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2539/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      2539/rsync   

防火墙

[root@rysnc-server ~]# firewall-cmd --add-port=873/tcp --permanent 
success
[root@rysnc-server ~]# firewall-cmd --add-service=rsyncd  --permanent 
success
[root@rysnc-server ~]# firewall-cmd --reload
success

数据端操作:

安装rsync

[root@rsync-client /]# yum -y install rsync

创建密码文件并修改权限,这里的密码需要和灾备端的secrets file中写的密码一致,

[root@rsync-client etc]# echo "123" > rsync.pas
[root@rsync-client etc]# cat rsync.pas 
123
[root@rsync-client etc]# chmod 600 rsync.pas 

验证实验结果

创建一个测试文件

[root@rsync-client rsync-data]# ll
总用量 0
[root@rsync-client rsync-data]# touch  test.file 
[root@rsync-client rsync-data]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  12 15:22 test.file

执行命令,把test-file,这个文件传输到灾备端。

[root@rsync-client rsync-data]# rsync  -avH --delete --password-file=/etc/rsync.pas  /rsync-data/ user1@192.168.5.160::data
sending incremental file list
./
test.file

sent 118 bytes  received 42 bytes  320.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-client rsync-data]# 

灾备端查看:

[root@rysnc-server rsync]# ll
总用量 0
-rw-r--r--. 1 root root 0 1月  12 15:26 test.file
[root@rysnc-server rsync]# 

重要概念:
源是主 要同步的文件一切基于前面的参数
源为前面的目录参数,不要写混了,容易把空目录同步给被同步的目录,导致文件丢失。
举例:rsync -avH --delete --passwrod-file=/etc/1.pas /tmp/* rsyncuser@192.168.0.103::data
这个的tmp目录为主。

基于ssh 密码同步文件

Rsync 实现增量同步 下一次同步只同步对端没有得东西,scp你传输就是传输你所有得东西。不能实现增量备份 源和目的一样的时候。

[root@rsync-client rsync-data]# rsync --delete -avH 192.168.5.160:/tmp ./
The authenticity of host '192.168.5.160 (192.168.5.160)' can't be established.
ECDSA key fingerprint is SHA256:+mXMA9D2FFmdb//jseUxm5460hLLGgJeHVjdBDk/nTA.
ECDSA key fingerprint is MD5:de:14:77:bc:38:c9:da:b1:51:47:a3:ea:40:1f:31:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.5.160' (ECDSA) to the list of known hosts.
root@192.168.5.160's password: 
receiving incremental file list
tmp/

把服务器的tmp目录拉到本地的当前目录。
rsync,可以拉也可以推,把文件从服务器中拉到本地,也可以推送本地文件到服务器中。

结合inotify工具实现 时效性同步 小批量更新频繁

安装inotify

****inotify下载链接
下载至数据端。
这里我就不赘述了,如何安装源码包,后续我写一个如何源代码编译安装nginx吧

[root@rsync-client src]# tar -zxvf inotify-tools-3.14.tar.gz  
[root@rsync-client src]# cd inotify-tools-3.14
[root@rsync-client inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify 
[root@rsync-client inotify-tools-3.14]# make && make install 
[root@rsync-client bin]# pwd
/usr/local/inotify/bin
[root@rsync-client bin]# ./inotifywait  --help

结合rsync

#!/bin/bash
/usr/local/inotfiy-3.14/bin/inotifywait -mrq -e create,move,delete,modify /tmp | while read D E F ; do


	rsync  -avH    --delete   --password-file=/etc/rsync.pas  /rsync-data/   user1@192.168.5.160::data
done

sh ,脚本
在/rsync-data/目录下新建一个文件名为123.txt文件。在灾备端实时查看
数据端:

[root@rsync-client rsync-data]# touch 123.txt
[root@rsync-client rsync-data]# echo "123" >123.txt

灾备端:

[root@rysnc-server rsync]# ll
总用量 4
-rw-r--r--. 1 root root 4 1月  12 16:02 123.txt
-rw-r--r--. 1 root root 0 1月  12 15:26 test.file
[root@rysnc-server rsync]# cat 123.txt 
123

几乎无时间差别实现实时同步。。
可以结合crontab:

crontab  -e  
* * * * *  分时日月周

总结

1,不同模块和密码可以把secrets file 配置放置在共享配置段之内。2,服务器/etc/user1.pas和客户端密码文件/etc/rsync.pas权限必须为600 ,文件名随便取,共享目录得其他人可读位得有chmod o+w /rsync
3,本地数据同步的时候,源目录后面的“/”会影响同步的结果 ,加/封死会表示其下面的目录和文件。不加/当前目录也会同步过去。4,再rsync同步命令中后面为双冒号,且后面跟的是配置段名称,不是目录名称。5,权限和防火墙,还有配置密码文件,容易导致出错,可以根据不同的用户名创建不同的配置段名称,
6,可以结合inotify,和crontab实现定时同步和差量同步。7,源是主,,,记住这个。
8,客户端有多个需要目录可以同步时,或者多台机器需要同步给一台灾备服务器时,可以增加配置段,和更改用户名和密码

文章作者: emporer
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
linux rsync
喜欢就支持一下吧