rsync远程同步

在这里插入图片描述


一、rsync概述

  • rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
  • rsync是一个快速和非常同样的文件复制工具。它能本能复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
    ①Remote Sync,远程同步
    ②支持本地复制,或者与其他SSH、rsync主机同步
    ③rsync软件适用于unix/ linux/windows等多种操作系统平台④rsync还可以跨节点复制
    ⑤rsync监听端口:873
    ⑥rsync运行模式:C/S
    ⑦delta-transfer算法闻名

二、配置rsync源服务器

在这里插入图片描述

  • rsync同步源
    是备份操作的远程服务器,也称为备份源

2.1配置rsync源的方法

  • 建立rsyncd.conf配置文件、独立的账号文件(远程登录使用或管理rsync相关功能)
  • 启用rsync的–daemon模式
  • 账号文件
    ①需要对应配置文件模块(使用不同的账号+功能模块),就可以使用不同的同步策略、方式
    ②在同步时,我们需要指定账号+功能模块来指定我们同步的策略
    例如:
    ①用户backupr,允许下行同步
    ②操作目录为/var/www/html/

2.2配置文件rsyncd.conf

  • 需要手动建立,语法类似于Samba配置
  • 认证配置auth users、secrets file ,不加则为匿名

2.3rsync账号文件

  • 采用“用户名:密码”的记录格式,每一行一个用户记录
  • 独立的账号数据集,不依赖于系统账号

2.4启用rsync服务

  • 通过–daemon独自提供服务
  • 执行kill $(cat /var/run/rsyncd.pid)关闭rsync服务

三、rsync备份工具

3.1rsync配置源的方法

  • 格式1
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.27.135::wwwroot /root
  • 格式2
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.27.133::/wwwroot /root

3.2同步方式

  • 全量备份
  • 源有的数据全部传送
  • 把原来的文件和新文件一起统一传送
  • 全量复制,效率低

3.3增量备份

  • 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高

3.4rsync命令

  • 语法
rsync  [选项]  原始位置  目标位置
  • 常用选项

在这里插入图片描述

四、rsync远程同步部署

4.1实验环境:远程复制(下行复制)

在这里插入图片描述

systemctl stop firewalld
getenforce
setenforce 0
ntpdate ntp1.aliyun.com

4.2下载rsync源服务器

[root@rsync ~]# rpm -q rsync
[root@rsync ~]# yum -y install rsync

4.3修改rsync的配置文件

[root@rsync ~]# vim /etc/rsyncd.conf
uid = nobody   //root
gid = nobody    //root
use chroot = yes  //禁锢在源目录
address = 192.168.27.134  //监听地址   
port 873  //监听端口/tcp/udp 873, 可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log  //日志文件位置
pid file = /var/run/rsyncd.pid      //存放进程ID的文件位置    
hosts allow = 192.168.27.0/24      //允许访问的客户机地址
[ wwwroot ]
path = /var/www/html           //源目录的实际路径  
comment = Document Root of www.1jm.com
read only = yes          //是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z //同步时不在压缩的文件类型
auth users = backuper          //授权账号,多个账号以空格分隔 
secrets file = /etc/rsyncd_users.db  //存放账号信息得到数据文件
  • 共享模块全局模块配置
  • 共享模块(可以为多个)可以对应不同的“源目录”和授权账号信息
  • 此配置文件是为rsync --daemon,模式设置的
    在这里插入图片描述

4.4为备份账号创建数据文件,存放用户和用户密码

[root@rsync ~]# vim /etc/rsyncd_users.db
   backuper:sl  //无需创建同名系统用户
[root@rsync ~]# chmod 600 /etc/rsyncd_users.db //给密码文件 /etc/rsyncd_users.db一个权限

在这里插入图片描述

4.5保证所有用户对源目录/var/www/html 都有读的权限

[root@rsync ~]# mkdir -p /var/www/html
[root@rsync ~]# chmod +r /var/www/html/
[root@rsync ~]# ls -ld /var/www/html/

在这里插入图片描述

  • 启动rsync服务程序
[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -antp | grep rsync

在这里插入图片描述

  • 关闭rsync服务
[root@rsync ~]# kill $(cat /var/run/rsyncd.pid)
[root@rsync ~]# rm -rf /var/run/rsyncd.pid

4.6测试远程同步

  • 服务端
[root@rsync ~]# cd /var/www/html/
[root@rsync html]# echo "hello world" >> 1.txt

在这里插入图片描述

4.6.1交互型:验证客户端是否实现远程共享

[root@client /]# mkdir /abc
[root@client /]# rsync -avz backuper@192.168.27.134::wwwroot /abc/  //clietnt进程远程共享

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.6.2免交互格式配置

[root@client abc]# rm -rf 1.txt
[root@client abc]# ls
[root@client abc]# cd ..
[root@client /]# vim /etc/server.pass
  sl
[root@client /]# cat /etc/server.pass
sl
[root@client /]# chmod 600 /etc/server.pass
[root@client /]# rsync -avz backuper@192.168.27.134::wwwroot /abc/
Password: 
receiving incremental file list
./
1.txt
1.txtls

sent 65 bytes  received 192 bytes  17.72 bytes/sec
total size is 24  speedup is 0.09

在这里插入图片描述

4.6.3服务端删除1.txt

[root@rsync html]# rm -rf 1.txtls
[root@rsync html]# ls
1.txt
[root@rsync html]# rm -rf 1.txt
[root@rsync html]# ls
[root@client abc]# ls
1.txt  1.txtls
[root@client abc]# rsync -avz --password-file=/etc/server.pass backuper@192.168.27.134::wwwroot /abc
receiving incremental file list
./
1.txt

sent 52 bytes  received 102 bytes  14.67 bytes/sec
total size is 12  speedup is 0.08

在这里插入图片描述

  • 实现的是同步应该是本地也删除1.txt,加上–delete即可实现
[root@client abc]#  rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.27.134::wwwroot /abc
receiving incremental file list
deleting 1.txt
./

sent 27 bytes  received 47 bytes  6.43 bytes/sec
total size is 0  speedup is 0.00

在这里插入图片描述

4.7rsync实时同步

  • 定期同步的不足
    执行备份的时间固定,延迟明显,实时性差
    当同步源长期不变化时,密集的定期任务是不必要的
  • 实时同步的优点
    一旦同步源出现变化时,立即启动备份
    只要同步源无变化,则不执行备份

五、inotify

5.1inotify概述

  • 可以监控文件系统的变动情况,并作出通知响应
  • 调整inotify内核参数(优化)
/etc/sysctl.conf   //内核参数配置文件
inotifywait          //用于持续监控,实时输出结果
inotifywatch         //用于短期监控,任务完成后再输出结果
max_queue_events	//监控事件队列大小
max_user_instances	//最多监控实例数
max_user_watches	//每个实例最多监控文件数

5.2inotifywait 持续监控并实时输出监控结果

  • 格式
inotifywait  [参数]
  • 参数
常见参数		说明
-m		    //持续进行监控
-r			//递归监控所有子对象
-q			//简化输出信息
-e			//指定要监控哪些事件类型

六、rsync+inotify实验

6.1修改服务端rsync配置文件

[root@rsync html]# vim /etc/rsyncd.conf
    uid = root		##修改为root
	gid = root		##修改为root
	[wwwroot]
	read only = no		##关闭只读,上行同步需要可写权限
[root@rsync html]# kill `cat /var/run/rsyncd.pid`
[root@rsync html]# rsync --daemon
[root@rsync html]# netstat -antp | grep rsync  //验证是否开启

在这里插入图片描述

6.2客户端修改inotify内核参数

[root@client ~]# vim /etc/sysctl.conf
    fs.inotify.max_queued_events = 32768		##监控时间队列,默认为16384
	fs.inotify.max_user_instances = 1024		##最多监控实例数,默认为128
	fs.inotify.max_user_watches = 1048576		##每个实例最多监控文件数,默认为8192
当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
[root@client ~]# sysctl -p   ## 刷新

在这里插入图片描述
在这里插入图片描述

6.3客户端安装inotify-tools

[root@client ~]# yum -y install gcc gcc-c++
[root@client ~]# cd /opt
[root@client opt]# rz -E
[root@client opt]# tar zxvf inotify-tools-3.14.tar.gz
[root@client opt]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make && make install

在这里插入图片描述

6.4执行“inotifywait"命令,查看监控

  • 在服务器向/var/www/html目录下添加文件、移动文件、跟踪屏幕输出结果
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /abc
##新开一个窗口
[root@client ~]# cd /abc/    
[root@client abc]# ls
[root@client abc]# touch 1.txt  //创建1.txt
[root@client abc]# vim 1.txt
this is sl
[root@client abc]# mv 1.txt 2.txt
[root@client abc]# ls
2.txt

在这里插入图片描述
在这里插入图片描述

6.5客户端编写触发同步脚本

[root@client opt]# vim inotify.sh
   #!/bin/bash
   INOTIFY_CMD="inotifywait -mrq -e     create,delete,move,modify,attrib /abc/"
   RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.27.134::wwwroot/"
   $INOTIFY_CMD | while read DIRECTORY EVENT FILE 
   do
     if [ $(pgrep rsync | wc -l) -le 0 ]; then
        $RSYNC_CMD
        fi
   done    
  • INOTIFY_CMD:持续监听并时时报告指定目录下的报告
  • RSYNC_CMD:把本地推送到对方192.168.35.40同步源的共享目录里面
  • inotify_cmd:监听abc的动态变化,但是无法同步,这时就需要rsync -apzH(H:符号连接)将abc目录下的数据同步,那么同步给谁,backuper@192.168.226.128::wwwroot/:表示同步给rsycn源服务器;数据同步指的是:本地abc的内容同步给wwwroot的模块内/var/www/html内

在这里插入图片描述

[root@client opt]# chmod +x /opt/inotify.sh
[root@client opt]# chmod +x /etc/rc.d/rc.local  //启动脚本
[root@client opt]# echo "/opt/inotify.sh" >> /etc/rc.d/rc.local  
[root@client opt]# sh -x inotify.sh

[root@client opt]# cd /abc/
[root@client abc]# touch 2.txt
## 去查看rsync服务器,已同步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值