文章目录

  • 一、rsync概念
    • 1. 什么是rsync
    • 2. rsync的特点
    • 3. rsync和scp的区别
  • 二、rsync用法
    • 1. 基本语法
    • 2. 本机同步
      • 1) -R(保留相对路径)
      • 2)- -delete
    • 3. 远程同步
      • 1)上传文件到远程服务器
      • 2)下载文件到本地服务器
      • 3)免密同步
    • 4. rsync作为服务
  • 三、rsync+crontab自动同步
    • 1. 环境准备
    • 2. 任务解决方案
      • 1. code服务器
      • 2.backup备份服务器
      • 3. 给rsync服务添加密码
  • 四、 rsync+inotify实现代码实时同步
    • inotify有什么用?
    • 1. 安装 inotify
    • 2. inotifywait命令
    • 3. 编写inotify.sh
    • 4. 添加可执行权限
    • 5. 让inotify.sh文件一直执行下去
    • 6. 测试
  • 五、rsync托管xinetd
    • 1. 如何将rsync托管给xinetd服务去管理
      • 1. 安装xinetd
      • 2. 了解配置文件
      • 3. 创建配置文件
      • 4. 重启xinetd服务

一、rsync概念

1. 什么是rsync

  • sync同步:刷新文件系统缓存,强制将修改过的数据写入磁盘块
  • async异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘
  • rsync远程同步 =>remote synchronous

数据同步过程:

  • sync数据同步 ——> 保存文件(目标) ——> 强制把缓存中的数据写入磁盘(立即保存),适合实时性比较高的场景
  • asyn数据异步 ——> 保存文件(目标) ——> 将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘,适合大批量数据同步场景

2. rsync的特点

  1. 可以镜像保存整个目录和文件系统
  2. 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
  3. 支持匿名传输,方便网站镜像;也可以做验证,加强安全
  4. 传输效率高,使用同步算法,只比较变化的(增量备份)
    比如A服务器某个目录有:file1.txt,file2.txt,file4.txt
    B服务器有:file1.txt,file2.txt
    rsync实现数据同步,B服务器只同步 file3.txt文件(增量备份)

3. rsync和scp的区别

两者都可以实现远程同步,但是相对比而言,rsync能力更强

  1. 支持增量备份
  2. 数据同步时保持文件的原有属性

二、rsync用法

1. 基本语法

本地文件同步:rsync [选项] [文件或目录] [要同步到的位置]

远程文件同步

  • 远程获取文件:rsync [选项] [用户名]@[目标主机ip]:[目标主机资源路径] [本机路径]
  • 远程上传文件:rsync [选项] [本机路径] [用户名]@[目标主机ip]:[目标主机路径]

常用选项:

  • -v 详细模式输出
  • -a 归档模式,递归的方式传输文件,并保持文件的属性,相当于-rlptgoD 选项
  • -r 递归拷贝目录
  • -l 保留软链接
  • -p 保留原有权限
  • -t 保留原有时间(修改)
  • -g 保留属组权限
  • -o 保留属主权限
  • -D 等于–devices --specials 表示支持b,c,s,p类型的文件
  • -R 保留相对路径
  • -H 保留硬链接
  • -A 保留ACL策略
  • -e 指定要执行的远程shell命令,ssh更改端口常用选项
  • -E 保留可执行权限
  • -X 保留扩展属性信息 a属性

2. 本机同步

本地文件同步简单理解就是把文件从一个位置到另外一个位置,类似于cp命令

示例:创建三个目录dir1dir2dir3 ,在dir1中创建三个文件 file1、file2、file3,使用rsync本地同步

创建目录命令:mkdir dir{1..3}
在dir1下创建文件:touch dir1/file{1..3}

把/dir1目录中的所有文件拷贝到/dir2目录中
把/dir1目录整体同步到/dir3目录中

命令:rsync -av /dir1/ /dir2
命令:rsync -av dir1/ dir3

1) -R(保留相对路径)

示例1:rsync -R选项的应用(保留相对路径)
也就是同步文件加不加/都是同步整个目录,如果不加-R选项,加/就是同步目录里的内容,如果不加就是连目录一起同步

2)- -delete

删除目标目录里多余的文件,
命令:rsync -av --delete dir1/ dir2/

3. 远程同步

1)上传文件到远程服务器

命令:rsync -av [本地文件或目录] [远程用户名]@[远程服务器的IP地址]:[目标路径]

示例1:把testc文件传输到远程服务器端的hhy用户(192.168.44.134)

命令:rsync -av test.c hhy@192.168.44.134:/home/hhy


示例2:把tmp文件夹传输到远程服务器端的hhy用户的根目录下(192.168.44.134)

命令:rsync -av tmp hhy@192.168.44.134:/home/hhy


查看目标服务器

2)下载文件到本地服务器

命令:rsync -av [远程用户名]@[远程服务器ip]:[目标文件或目录] [保存到本地位置]

示例1:把远程服务器(192.168.44.134)的/etc/hosts文件下载到本地
命令:rsync -av hhy@192.168.44.134:/etc/hosts ./


示例2:把远程服务器(192.168.44.134)hhy用户根目录下的code文件夹下载到本地

3)免密同步

rsync远程同步数据时,默认情况下为什么需要密码?如果不想要密码同步怎么实现?
rsync在远程同步时,之所以要输入密码的主要原因在于其底层还是基于SSH服务的。SSH有两种认证方式,如果没有配置免密则默认使用用户名+密码的认证方式。

不想要密码同步,可以考虑使用SSH免密操作。

在代码主机上生成公钥和私钥
命令:ssh-keygen -t rsa -P ""

  • -t rsa:指定生成非对称加密
  • -P "":不需要一路回车确定

把生成的公钥发送给备份主机

命令:ssh-copy-id hhy@192.168.44.134


测试免密同步

从代码服务器上传dir1目录到备份服务器hhy用户根目录
命令:rsync -av dir1 hhy@192.168.44.134:/home/hhy


如果备份服务器更改了SHH的默认端口号怎么办?
命令:rsync -e "ssh -p 7420" -av dir1 hhy@192.168.44.134:/home/hhy

  • -e:指定执行远程shell命令,这里是用来指定ssh端口号为7420

4. rsync作为服务

默认情况下,rsync只是作为一个命令来进行使用的(ps在查询进程时,找不到对应的服务),但是rsync提供了一种作为系统服务的实现方式。

注意:如果rsync作为系统服务单独运行,则其底层就不需要SSH服务了!

Linux系统服务的思路:

对外提供服务——>端口监听——>启动服务——>启动脚本(rsync没有启动脚本)——>配置文件

  1. 第一步启动rsyncd服务
    命令:systemctl start rsyncd

  1. 第二步:查看rsyncd服务的配置文件/etc/rsyncd.conf

# uid = nobody 用户编号
# gid = nobody 所属组编号
# use chroot = yes 是否禁锢目录(如果设置了禁锢目录就只能在指定目录下进行同步)
# max connections = 4 最大连接数
# pid file = /var/run/rsyncd.pid 进程文件,每个服务都有一个pid编号,其来源就是pid文件
# exclude = lost+found/ 传输文件时,忽略 lost+found/目录
# transfer logging = yes 传输日志是否需要写入日志文件,yes代表写入
# timeout = 900 传输超时时间,默认15分钟
# ignore nonreadable = yes 是否忽略不可读文件
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 一下格式文件不压缩

三、rsync+crontab自动同步

某公司为了保证开发人员线上代码的安全性,现需要对开发人员的代码进行备份

  1. 备份机backups需要每天凌晨3:23分定时同步code服务器的/code/java目录下的所有文件。
  2. 要求记录同步日志,方便同步失败分析原因(不仅仅进行同步,还要求有同步日志)

1. 环境准备

主机ip 主机名 角色
192.168.44.37 code 代码服务器
192.168.44.125 backup 代码备份服务器

代码服务器配置

TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.44.37
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=114.114.114.114
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"

备份服务器配置:

TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.44.125
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=114.114.114.114
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"

如果是图形化界面,就关闭NetworkManager。
防止配置Ip出问题

systemctl stop NetworkManager
systemctl disable NetworkManager

2. 任务解决方案

1. code服务器

第一步:准备代码文件
命令

[root@code ~]# mkdir -p code/java
[root@code ~]# mkdir code/java/test{1..4}
[root@code ~]# touch code/java/Main{1..6}.java


第二步:把rsync作为系统服务运行
/etc/log/下创建日志文件
修改配置文件 vim /etc/rsyncd.conf

[java]
# 要同步的目录
path=/root/code/java
# 同步的日志文件
log file=/var/log/rsync.log

启动rsyncd服务
命令:systemctl start rsyncd

查看rsyncd进程:ps -ef grep rsync
监听端口号:netstat -tnlp | grep rsync
rsyncd的默认端口号是837

2.backup备份服务器

第一步:启动rsync服务:systemctl status rsyncd

第二步:创建备份目录:mkdir -p backup/code/java

第三步:测试rsync是否可以连接到rsync服务

命令:rsync -a root@192.168.44.37::

-a:获取同步目录标签

第四步:下载文件到本地
命令:rsync -av root@192.168.44.37::java /root/backup/code/java

java代表代码服务器/etc/rsyncd.conf配置文件中的标签,同步[java]标签的那个path目录的文件


第五步:编写计划任务+shell的脚步,实现代码自动备份

编写计划任务:每天凌晨3:23备份代码文件
可以先用每分钟测试
命令:crontab -e
编写:* * * * * /root/rsync_java.sh

再创建并编写rsync_java.sh脚本程序
编写一下内容
rsync -av root@192.168.44.37::java /root/backup/code/java &>/dev/null

&>/dev/null:表示把同步的信息不显示出来

最后给rsync_java.sh加上可执行权限

命令:chmod +x rsync_java.sh

在代码服务器编写代码,就能在备份服务器自动同步了

3. 给rsync服务添加密码

在code服务器
第一步:编辑配置文件:/etc/rsyncd.conf

[java]
path=/root/code/java # 同步这个目录
log file=/var/log/rsync.log # 日志文件
auth users = java,test # 用户名
secrets file = /etc/rsyncd.secrets # 密码文件

第二步:在/etc目录下创建rsyncd.secrets密码文件

vim /etc/rsyncd.secrets

java:123456  # 用户名:密码
test:654321


第三步:更改密码文件rsyncd.secrets权限为600
命令:chmod 600 /etc/rsyncd.secrets


第四步:重启rsyncd服务
命令:systemctl restart rsyncd

第五步:在backup备份服务器测试

命令:rsync -av test@192.168.44.37::java /root/
注意:用户一定是在rsyncd.conf配置文件里有,并且在密码配置文件rsyncd.secrets配置过密码的

四、 rsync+inotify实现代码实时同步

inotify有什么用?

inotify提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序
Inotify可用于检测单个文件,也可以检测整个目录。当检测的对象是一个目录的时候,目录本身和目录里的内容都会成为检测的对象。

注意代码实时同步要开启免密同步

实现code代码服务器上的/root/code/java目录的文件和backup备份主机上的/root/backup/code/java目录实时同步

1. 安装 inotify

第一步在code服务器安装 inorify-tools 工具(监控器)

解压文件:tar -xzf inotify-tools-3.13.tar.gz -C tmp/
到tmp目录下

第二步:到解压目录下执行文件

执行文件./configure对软件进行配置,没有指定安装目录,就会安装到默认目录

第三步:编译+安装文件
编译命令:make
安装命令:make install

安装后会产生两个命令

/usr/local/bin/inotifywait 等待

/usr/local/bin/inotifywatch 看守

2. inotifywait命令

  • -m : 一直监控某个目录,create、delete、modify等行为

  • -r : 递归,不仅仅监控目录还要监控目录下的文件

  • -q : 获取操作信息,但是不输出

  • -e : 哪些行为需要被监控,modify,delete,create,attrib,move
    modify: 文件被修改
    delete: 文件被删除
    create: 文件被创建
    attrib: 文件属性被修改
    move: 文件被移动

3. 编写inotify.sh

在code主机上编写inotify.sh脚本文件

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /root/code/java |while read events
dorsync -av --delete /root/code/java root@192.168.44.125:/root/backup/code/javaecho "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done

只要代码主机上/root/code/java的文件发生变化,就会马上同步到备份主机上的/backup/code/java目录下

4. 添加可执行权限

inotify.sh脚本文件添加可执行权限:chmod +x inotify.sh

5. 让inotify.sh文件一直执行下去

命令:nohup ./inotify.sh &

  • & : 让inotify.sh在计算机后台运行,可以使用jobs命令查看,kill %编号结束,当我们退出终端时,这个执行会自动结束
  • nohup : 让程序一直在后台运行,即使我们关闭了终端

6. 测试

只要在代码服务器进行删除或者创建文件等操作,就会被inotifywait检测到。

通过命令查看日志文件:cat /var/log/rsync.log

五、rsync托管xinetd

独立服务 :有独立启动脚本的比如:ssh、ftp
依赖服务:没有独立启动脚本的,比如:rsync
依赖服务的特点:

  1. 平时不占用系统的运行资源
  2. xinetd服务管理依赖服务
  3. 一些轻量级服务会托管给xinetd服务

1. 如何将rsync托管给xinetd服务去管理

1. 安装xinetd

命令:yum -y install xinetd

查看xinetd的相关文件目录:rpm -ql xinetd
其中:/etc/xinetd.d目录为:xinetd服务管理的所有轻量级服务的目录

2. 了解配置文件

1)通过man 5 xinetd.conf查看配置文件信息
配置文件位置/etc/xinetd.conf

  • only_from:只允许访问
  • no_access:拒绝访问
  • access_times:控制访问服务的时间段
  • log_type:指定日志类型
  • interface:并发连接数
  • per_source:每个IP的最大连接数
  • includedir /etc/xinetd.d :子配置文件目录((追加rsync、telnet))

3. 创建配置文件

/etc/xinetd.d下,创建配置文件rsync
写入一下内容

service rsync
{disable = noflags = IPv6socket_type = streamwait = nouser = rootserver = /usr/bin/rsyncserver_args = --daemonlog_on_failure += USERID
}
  • disable = no //开关;no表示开启该服务;yes表示关闭服务

4. 重启xinetd服务

注意:xinetd服务重启后,rsync服务也会随之重启,检查端口占用

先杀死rsync
命令:pkill rsync
再启动xinetd服务:systemctl restart xinetd
根据rsync的默认端口873查找服务:ss -naltp | grep 873

在查询873端口占用时,发现只有xinetd服务,没有rsync服务,原因:rsync => xinetd

如果我们在启动xinetd服务时,发现系统中的873端口一直没有被占用,只能有一个问题:配置文件有错误!
解决方案:cat /var/log/messages

Linux下实现文件实时同步(rsync命令+rsync作为服务+xinetd托管rsync)相关推荐

  1. linux 高并发文件实时同步,Linux海量数据高并发实时同步架构方案杂谈

    不论是Redhat还是CentOS系统,除去从CDN缓存或者数据库优化.动静分离等方面来说,在架构层面上,实 现海量数据高并发实时同步访问概括起来大概可以从以下几个方面去入手,当然NFS的存储也可以是 ...

  2. Linux下实现文件双向同步

    修改的地方时:私钥和公约处. 其次 vi /root/.unison/default.prf 这个文件在这个位置 root = /tmp/test root = ssh://root@10.10.3. ...

  3. 【Linux下Inotify + Rsync文件实时同步】

    Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...

  4. rsync+sersync实现数据文件实时同步

    rsync+sersync实现数据文件实时同步 使用rsync+sersync,实现nfs与backup服务器间实时数据同步 一.数据同步工具介绍 rsync是一款开源的.快速的.多功能的.可实现全量 ...

  5. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  6. linux监控覆盖视频恢复,linux下使用inotify实时监控文件变更,做完整性检查

    linux下使用inotify实时监控文件变更,做完整性检查 完整性检查是HIDS的重要组成部分之一,linux下做完整性检查的思路有3个 1.哈希对比 2.签名校验 3.inotify 方法有2个: ...

  7. inotify + rsync 打造文件实时同步

    rsync 是Linux 下的一个文件同步利器,以高效的增量传输而闻名,适用于同步,备份等多个场合.几乎所有的Linux 发行版都收录了该软件,安装非常容易,以CentOS 6.4为例: 1 yum  ...

  8. Linux与Windows之间实现文件实时同步的方案

    记linux与Windows之间实现文件实时同步的方案 近日,数据分析部提了个需求说要让一台linux的机器上的文件同步到一台Windows机器的某个目录下,由于本姑娘从来没有碰到过这种问题,于是上网 ...

  9. MySQL :rsync+sersync文件实时同步

    文章目录 1. rsync是什么 rsync+sersync文件实时同步 一:环境 二:备份服务器操作 三:数据源服务器操作 安装rsync客户端软件 安装sersync工具,实时触发rsync进行同 ...

最新文章

  1. 在python中 函数赋值给变量时,需要注意的几个事项
  2. git合并多个commit成为一个commit
  3. JQuery Ajax 使用FormData上传文件对象
  4. int和double究竟占多少个字节?c++等
  5. 【Android开发艺术探索】RemoteViews
  6. kotlin枚举_Kotlin枚举班
  7. TCP/IP协议简单介绍
  8. spark filter过滤某个字段在几个值里面_Spark案例学习-PV的统计
  9. linux微软雅黑字体库_Ubuntu 安装 Wine 4.4 并设置微软雅黑字体解决中文乱码
  10. iOS sign in with Apple 苹果ID登录
  11. 使用Java程序发送邮件|发送有附件的邮件|进行邮件群发
  12. Java实现医疗系统
  13. 同时存在有编号和无编号脚注(latex, footnote)
  14. Java程序员掉发系列——程序员的成长之路
  15. 战火与秩序迁城显示服务器忙,战火与秩序怎么迁城 迁城方法和迁城技巧分享[图]...
  16. tesla 显卡在ubuntu下安装显卡驱动log in loop 不能登陆的问题
  17. 2022危险化学品经营单位主要负责人考试试题及在线模拟考试
  18. Havel-Hakimi定理(判断是否可图序列)
  19. 3-4、无/有信息搜索
  20. TeamViewer 破解版分享一下

热门文章

  1. ArcEngine下架空线之悬链线的模拟
  2. jspm律所应用管理系统毕业设计(附源码、运行环境)
  3. LIM参数化景观施工图教程(2)- 门房施工图绘制
  4. 预制凭证过账报错【dynpro SAPMF05A 0302 无批输入数据】
  5. 第一节---shell与运维
  6. 人一生平均900个月
  7. 基于JAVA医院医护人员排班系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  8. Java伽马什么意思_伽马值是什么意思?,对比度,色调,清晰度,显示器亮度
  9. SpringBoot自动跳转首页
  10. 美通企业周刊 | 瑞士制药巨头罗氏深化在华布局;美国炸鸡Popeyes进入中国大陆市场;上海迪士尼乐园重新开放...