实战经验分享,一招教你Linux下实时同步

文章目录[隐藏]

在程序员的日常场景中经常会经常碰到文件共享同步的问题,比如:

  • 集群,提供高可用服务(需要网站代码或者目录实时同步,保证数据的一致性)
  • 迁移数据 (实时增量传输)
  • 文件备份(实时将数据备份到其他设备,防止数据丢失)

今天跟大家分享一下针对以上场景实现在 Linux 系统下实现文件实时同步

黄金搭配:Rsync + Inotify

图片[1]-实战经验分享,一招教你Linux下实时同步-趣考网

1. Rsync

Rsync 是 Linux 系统下的数据镜像备份工具,使用快速增量备份工具 Remote Sync 可以远程同步,支持本地复制,或者与其他SSH、Rsync 主机同步

1.1 Server端配置

环境介绍

操作系统:CentOS 6.8 rsync: rsync-3.0.6 (yum 源默认安装)

图片[2]-实战经验分享,一招教你Linux下实时同步-趣考网

安装方式

sudo apt-get install rsync #debian、ubuntu 等在线安装方法;yum install rsync #Fedora、Redhat 等在线安装方法;rpm -ivh rsync # Fedora、Redhat 等rpm包安装方法;rpm -qa | grep rsync # 查看安装的版本

配置

创建相关配置目录和文件

mkdir -p /etc/rsync.d # rsync 配置文件目录,默认没有touch /etc/rsync.d/rsyncd.conf # rsync服务端配置文件touch /etc/rsync.d/rsyncd.pass # 客户端拉取文件时使用的用户密码chmod 600 /etc/rsync.d/rsyncd.confchmod 600 /etc/rsync.d/rsyncd.pass

编写主配置文件 rsyncd.conf

vim /etc/rsync.d/rsyncd.conf

(以下是配置文件)

log file=/var/log/rsyncd.logpid file=/var/run/rsyncd.pidlock file=/var/run/rsyncd.lockmotd file = /etc/rsyncd/rsyncd.motduid=rootgid=rootmax connections=5hosts allow=192.168.1.167 # 允许访问的IP地址,我这里填写的是测试的客户端地址hosts deny=*secrets file = /etc/rsync.d/rsyncd.passlog = /var/log/rsyncd.log log format = %t %a %m %f %bsyslog facility = local3 timeout = 300[handbook]path=/handbook/comment= handbooktest auth users=rsync

图片[3]-实战经验分享,一招教你Linux下实时同步-趣考网

编写用户认证文件

vim /etc/rsync.d/rsyncd.pass

输入以下内容:

rsync:cloudcare

图片[4]-实战经验分享,一招教你Linux下实时同步-趣考网

启动服务

rsync --daemon --config=/etc/rsync.d/rsyncd.conf

确认服务启动

ps -ef | grep rsyncnetstat -nltp | grep 7589

注:rsync 服务默认端口是 873

图片[5]-实战经验分享,一招教你Linux下实时同步-趣考网

1.2 Rsync客户端

客户端配置很简单,只需要安装 rsync 工具即可

安装方式

sudo apt-get install rsync # debian、ubuntu 等在线安装方法;yum install rsync # Fedora、Redhat 等在线安装方法;rpm -ivh rsync # Fedora、Redhat 等rpm包安装方法;rpm -qa | grep rsync # 查看安装的版本

验证

示例: 将192.168.1.176 服务器上的 handbook (这里是定义的项目名称,可以参考rsync server 端的配置)项目同步到 192.168.1.167 的 /tmp 下

rsync -avzP rsync@192.168.1.176::handbook /tmp

说明: -a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息

图片[6]-实战经验分享,一招教你Linux下实时同步-趣考网

如果想每隔一段时间同步一次,可以配合 crontab 来实现;但是如果想实时同步,那就需要用到 inotify 工具了。

2.Inotify

Inotify 是 Linux 核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。摘自维基百科 可以配合Rsync 做实时同步,Inotify 通过监控文件的变化,然后触发同步脚本,实现实时同步。

实现的原理:

图片[7]-实战经验分享,一招教你Linux下实时同步-趣考网

实验目的

将 192.168.1.167 的 /handbook 目录下的内容实时同步到 192.168.1.176 定义的 “handbook” 目录下(实验环境依旧采用上面的老环境)

拓扑环境

图片[8]-实战经验分享,一招教你Linux下实时同步-趣考网

安装

yum install -y inotify-tools

注:inotify 其实不需要任何的配置,安装好之后默认有两个命令;inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

使用

检测创建事件

inotifywait -mrq /handbook/ cd /handbook/ touch 1

图片[9]-实战经验分享,一招教你Linux下实时同步-趣考网

检测删除事件

inotifywait -mrq /handbook --timefmt \"%d-%m-%y %H:%M\" --format \"%T %w%f 事 件 息: %e\" -e delete cd /handbook/ rm -rf 1 4

图片[10]-实战经验分享,一招教你Linux下实时同步-趣考网

编写实时同步脚本

more rsync-handbook.sh

#!/bin/bashinotifywait -mrq /handbook/ --format \"%w%f\" -e create,delete,moved_to,close_write | while read line do rsync -az /handbook/ rsync@192.168.1.176::handbook --password-file=/root/handbook.pw done

注: 其中--password-file 是指定 “handbook” 模块认用户认证的密码文件

验证

图片[11]-实战经验分享,一招教你Linux下实时同步-趣考网

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享