rsync+inotify,数据备份,数据传输
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,客户端有多个需要目录可以同步时,或者多台机器需要同步给一台灾备服务器时,可以增加配置段,和更改用户名和密码