rsync同步+inotify实时同步部署-简介

rsync简介

一款快速增量备份工具:
         rsync全称remote sync,是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,是一种可以更高效、可以本地或远程同步的命令,之所以高效是因为rsync会对需要同步的源和目的进度行对比,只同步有改变的部分,所以比scp命令更高效,但是rsync本身是一种非加密的传输,可以借助-e选项来设置具备加密功能的承载工具进行加密传输。
        Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
        Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试
        此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具

inotify简介

        inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。该机制由著名的桌面搜索引擎项目beagle引入用于替代此前具有类似功能但存在诸多缺陷的dnotify。
        inotify既可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外,inotify 使用文件描述符作为接口,因而可以使用通常的文件I/O操作select、poll和epoll来监视文件系统的变化。

rsync同步源

指备份操作的远程服务器,也称为备份源。
在这里插入图片描述

当B服务器是客户机及发起端时,B服务器同步A服务器的数据,A服务器就是备份源。
如果A服务器同步B服务器的数据,同理A服务器是客户机及发起端,B服务器就是备份源

rsync命令

#命令的用法
rsync  [选项]  原始位置  目标位置
#----------常用选项--------------------------
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件,即删除差异文件,保留一致性。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
--password-file=file:从file中得到密码,用于免交互处理,file文件的权限要是600

配置rsync远程同步

IP主机
10.10.10.4master
10.10.10.5slave
服务端-10.10.10.4
1、关防火墙、安装相应的软件
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# rpm -q rsync		#检查是否安装,一般系统已默认安装rsync
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# yum -y install inotify-tools

2、建立/etc/rsyncd.conf 配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
  # /etc/rsyncd: configuration file for rsync daemon mode
  
  # See rsyncd.conf man page for more options.
  
  # configuration example:
  
  uid = root
  gid = root
  use chroot = no
  max connections = 2000
  pid file = /var/run/rsyncd.pid
  lock file =/var/run/rsync.lock
  log file = /var/log/rsyncd.log
  ignore erros
  read only = false
  list = false
  host allow = 10.10.10.0/24
  host deny = 0.0.0.0/24
  auth users = rsync_backup
  secrets file = /etc/rsync.password
  # exclude = lost+found/
  # transfer logging = yes
  timeout = 600
  # ignore nonreadable = yes
  # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
  
  # [ftp]
  #        path = /home/ftp
  #        comment = ftp export area
  [www]
  comment = www
  path = /data/www/
#---------------配置解释---------------
uid = root
gid = root
use chroot = yes						# 禁锢在源目录
max connections = 2000                  # 并发连接数
timeout = 600                           # 超时时间(秒)
pid file =/var/run/rsyncd.pid           # 指定rsync的pid目录
lock file =/var/run/rsync.lock          # 指定rsync的锁文件【重要】
log file = /var/log/rsyncd.log          # 指定rsync的日志目录
ignore errors                           # 忽略一些I/O错误
read only = false                       # 设置rsync服务端文件为读写权限
list = false                            # 不显示rsync服务端资源列表
hosts allow = 172.16.0.0/16             # 允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 0.0.0.0/32                 # 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
auth users = rsync_backup               # 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
secrets file =/etc/rsync.password       # 用户认证配置文件,里面保存用户名称和密码
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2	#同步时不再压缩的文件类型
--------------
[www]									# 自定义名称
 31 comment = www						# rsync服务端数据目录路径
 32 path = /data/www/					# 模块名称与[home_21yunwei]自定义名称相同

3、创建用户认证文件

无须建立同名系统用户

[root@localhost ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@localhost ~]# cat /etc/rsync.password
rsync_backup:123456
# 给创建的用户认证文件设置权限
[root@localhost ~]# chmod 600 /etc/rsync.password

4、启动、并创建相关待同步的目录
[root@localhost ~]# rsync --daemon
[root@localhost ~]# mkdir -p /data/www

客户端-10.10.10.5
1、安装inotify
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install rsync
[root@localhost ~ ]# yum -y install inotify-tools 
2、创建rsync配置文件,客户端创建即可,无需内容
# 如有此文件也课不创建
[root@localhost ~ ]# touch /etc/rsyncd.conf

2、配置rsync客户端相关权限认证
[root@localhost ~]# echo "123456">/etc/rsync.password
[root@localhost ~]# chmod 600 /etc/rsync.password

3、创建待同步数据
[root@localhost ~]# mkdir -p /data/www
[root@localhost ~]# touch /data/www/www.log 

4、 测试rsync是否同步 (在rsync-client上做)
[root@localhost ~ ]# cd /data/www
[root@localhost www]# touch {1..3}.txt
[root@localhost www]# rsync  -avzP /data/www/ rsync_backup@10.10.10.4::www/  --password-file=/etc/rsync.password
# 测试文件是否同步
/data/www/表示本地需要同步的数据目rsync_backup@10.10.10.4::www表示服务端的指定名称的模块下  本条命令执行的操作为:将第一个路径参数下的文件同步到第二个路径参数下  即:推模式 调换路径则为:拉模式
若在rsync-server发现成功传输,则继续执行下面步骤。

5、编写脚本

脚本所在地随意

[root@localhost ~ ]# vim /data/www/rsync.sh
#!/bin/bash
src=/data/www		# 本地需要同步的数据目录
des=www				# 服务端的指定名称的模块
rsyncPasswdFile=/etc/rsync.password		# 客户端连接服务端密码文件所在目录
remoteIp=10.10.10.5		# 客户端IP
user=rsync_backup		# 服务端创建的esync执行数据同步的用户名
cd ${src}
inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
    INO_EVENT=$(echo $file | awk '{print $1}')
    INO_FILE=$(echo $file | awk '{print $2}')
    echo "---------------------------$(date)--------------------------------"
    echo $file
    #增加、修改、写入完成、移动进事件
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
    then
        echo '增加、修改、写入完成、移动进事件'
        rsync -avzcR --password-file=${rsyncPasswdFile} $(dirname ${INO_FILE}) ${user}@${remoteIp}::${des}
    fi
    #删除、移动出事件
    if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
        echo '删除、移动出事件'
        rsync -avzR --delete --password-file=${rsyncPasswdFile} $(dirname ${INO_FILE}) ${user}@${remoteIp}::${des}
    fi
    #修改属性事件 指 touch chgrp chmod chown等操作
    if [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
        echo '修改属性事件'
        if [ ! -d "$INO_FILE" ]
        then
            rsync -avzcR --password-file=${rsyncPasswdFile} $(dirname ${INO_FILE}) ${user}@${remoteIp}::${des}
        fi
    fi
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值