利用inotify和rsync服务实现数据实时同步( 三 )

以独立服务方式运行rsync并实现验证功能??rsync-daemon:安装这个软件包以后会提供一个service服务,它会监听自己的独立端口
[root@bakup_server ~]# yum install rsync-daemonInstalled:rsync-daemon-3.1.3-9.el8.noarch[root@bakup_server ~]# systemctl enable rsyncd.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.说明:
??rsync默认传输文件的时候不需要验证
启用rsync的验证功能的方法:
[root@backup-centos8 ~]#dnf -y install rsync-daemon#安装服务的时候自动创建rsync服务器的配置文件[root@centos8 ~]#vi /etc/rsyncd.confuid = root  #远程用户映射到本机的用户,默认为nobody指定以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobodygid = root  #默认为nobody#port = 874#可指定非标准端口,默认873/tcp#use chroot = nomax connections = 0#不限制最大连接数ignore errors#如果有些错误,就跳过这些错误exclude = lost+found/#跳过指定的目录,不去复制log file = /var/log/rsyncd.log# 日志所在位置pid file = /var/run/rsyncd.pid# 存放进程的pid文件lock file = /var/run/rsyncd.lock# 存放锁文件reverse lookup = no# 拒绝反向解析,不把ip解析为主机名#hosts allow = 10.0.0.0/24# 允许连接的主机[backup]  #每个模块名对应一个不同的path目录,如果同名后面模块生效共享名path = /data/backup/  #共享的真实路径comment = backup dir#描述信息read only = no    #默认是yes,即只读auth users = rsyncuser  #默认anonymous可以访问rsync服务器用于验证的账号,只有这个账号才能去访问secrets file = /etc/rsync.pas#存放密码的文件 格式:用户名: 密码例如:实现密码验证
[root@CentOS8 ~]# yum install rsync-daemon[root@CentOS8 ~]# systemctl enable rsyncd --now[root@CentOS8 ~]# cat /etc/rsyncd.confuid = rootgid = rootmax connections = 0ignore errorsexclude = lost+found/log file = /var/log/rsyncd.logpid file = /var/run/rsyncd.pidlock file = /var/run/rsyncd.lockreverse lookup = no[backup]path = /data/backup/comment = backup dirread only = noauth users = tomsecrets file = /etc/rsync.pas[root@CentOS8 ~]# systemctl restart rsyncd.service[root@CentOS8 ~]# mkdir /data/backup/ -p[root@CentOS8 ~]# echo "tom:redhat" > /etc/rsync.pas[root@CentOS8 ~]# chmod 600 /etc/rsync.pas客户端访问:[root@CentOS8 ~]# rsync /etc/fstabtom@10.0.0.12::backupPassword:#交互输入tom的密码或者:[root@CentOS8 ~]# rsync /root/anaconda-ks.cfgrsync://tom@10.0.0.12/backupPassword:注意:不指定用户名默认就是当前系统的用户可以提前建立一个文件,将密码放在文件中
#非交互式查看共享目录[root@CentOS8 ~]# echo "redhat" >/etc/rsync.pas #客户端存放rsync的密码信息[root@CentOS8 ~]# chmod 600 /etc/rsync.pas #密码文件权限修改(必须,不然会报错)测试:[root@CentOS8 ~]# rsync --password-file=/etc/rsync.pas /root/file111rsync://tom@10.0.0.12/backupinotify+rsync+shell 脚本实现实时数据同步工作原理:

  • 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
  • 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
范例:inotify+rsync+shell 脚本实现实时数据同步
数据服务器:存放数据信息的服务器 10.0.0.11备份服务器:存放备份信息的服务器 10.0.0.12思路:利用inotidy监控事件是否发生变化,
[root@CentOS8 ~]# cat inotify_rsync.sh#!/bin/bashSRC="https://www.huyubaike.com/data/www/"#需要同步的目录文件 #注意最后的/DEST='tom@10.0.0.12::backup' #同步到备份数据器的指定位置rpm -q rsync &> /dev/null || yum -y install rsync #如果不存在rsync这个工具就安装它inotifywait -mrq--exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE; doFILEPATH=${DIR}${FILE} #需要同步的文件rsync -az --delete --password-file=/etc/rsync.pas$SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>/var/log/changelist.logdone#通过DATETIME DIR FILE 这四个变量记录发生的变化 日期 事件 目录 文件

经验总结扩展阅读