rsync远程同步

目录

简介

配置rsync源服务器

在源服务器建立配置文件

赋权并启动服务

rsync具体操作命令

下行同步,从源服务器拉数据

上行同步

免交互

rsync-daemon方式

rsync-ssh方式

先做ssh密钥对免交互

快速清空目录中大量文件

基于rsync+inotify实现实时同步

修改rsync源服务器配置文件

[调整 inotify 内核参数](#调整 inotify 内核参数)

[安装 inotify-tools](#安装 inotify-tools)

在另外一个终端编写触发式同步脚本

Git


简介

  • rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
  • 在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。

配置rsync源服务器

实验准备

bash 复制代码
192.168.88.50                #源服务器
192.168.88.51                #客户端服务器

systemctl stop firewalld
setenforce 0
rpm -q rsync				 #一般系统已默认安装rsync

在源服务器建立配置文件

bash 复制代码
建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf				#添加以下配置项
uid = root
gid = root
use chroot = yes										#禁锢在源目录
address = 192.168.88.50									#监听地址
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.88.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[yy]												    #共享模块名称
path = /var/www/html									#源目录的实际路径
read only = yes											#是否为只读
auth users = cxk			    						#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db						#存放账户信息的数据文件

#如采用匿名的方式,只要将其中的"auth users"和"secrets file"配置项去掉即可。
#为备份账户创建数据文件
vim /etc/rsyncd_users.db
cxk:123					        #无须建立同名系统用户

赋权并启动服务

bash 复制代码
chmod 600 /etc/rsyncd_users.db

#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /var/www/html/
ls -ld /var/www/html/

#启动 rsync 服务程序
rsync --daemon				#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 
netstat -anpt | grep rsync

#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid

rsync具体操作命令

基本格式:rsync [选项] 原始位置 目标位置

常用选项 解释
-r 递归模式,包含目录及子目录中的所有文件
-l 对于符号链接文件仍然复制为符号链接文件
-v 显示同步过程的详细(verbose)信息
-z 在传输文件时进行压缩(compress)
-a 归档模式,保留文件的权限、属性等信息,等同于组合选项"-rlptgoD"
-p 保留文件的权限标记
-t 保留文件的时间标记
-g 保留文件的属组标记(仅超级用户使用)
-o 保留文件的属主标记(仅超级用户使用)
-H 保留硬连接文件
-A 保留 ACL 属性信息
-D 保留设备文件及其他特殊文件
--delete 删除目标位置有而原始位置没有的文件
--checksum 根据校验和(而不是文件大小、修改时间)来决定是否跳过文件

下行同步,从源服务器拉数据

bash 复制代码
#从源服务器拉数据
rsync -az --delete  源服务器位置   本地位置

上行同步

bash 复制代码
#推数据到源服务器
rsync -az --delete  本地位置       源服务器位置 

免交互

rsync-daemon方式
bash 复制代码
rsync -az --delete --password-file=密码文件   用户名@源服务器地址::共享模块名   本地目录
rsync -az --delete --password-file=密码文件   rsync://用户名@源服务器地址/共享模块名   本地目录

#为备份账户创建数据文件
vim /etc/rsyncd_users.db
123	

chmod 600 /etc/rsyncd_users.db

rsync-ssh方式
bash 复制代码
yum install -y sshpass   #首先下载配置文件

rsync -az --delete -e 'sshpass -p 'ssh密码' ssh -p ssh端口 -o StrictHostKeyChecking=no'  用户名@源服务器地址:共享目录/   本地目录
先做ssh密钥对免交互
bash 复制代码
空密码,ssh-agent bash + ssh-add
ssh-keygen -t rsa
ssh-copy-id 192.168.88.50
rsync -az --delete -e 'ssh -p ssh端口'  用户名@源服务器地址:共享目录/   本地目录
快速清空目录中大量文件
bash 复制代码
rsync -a --delete 空目录/  目标目录/

基于rsync+inotify实现实时同步

  • 使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
  • 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
  • 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

修改rsync源服务器配置文件

bash 复制代码
vim /etc/rsyncd.conf
......
read only = no											#关闭只读,上行同步需要可以写

kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon	
netstat -anpt | grep rsync

chmod 777 /var/www/html/

调整 inotify 内核参数

bash 复制代码
在Linux内核中,默认的inotify机制提供了三个调控参数:max_queue_events(监控事件队列,默认值为16384)、max_user_instances(最多监控实例数,默认值为128)、max_user_watches(每个实例最多监控文件数,默认值为8192)。当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches

vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p

安装 inotify-tools

  • 用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。
  • inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
  • inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
bash 复制代码
tar -xf inotify-tools-3.14.tar.gz
cd /opt/inotify-tools-3.14
./configure
make && make install

#可以先执行"inotifywait"命令,然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html

#选项"-e":用来指定要监控哪些事件
#选项"-m":表示持续监控
#选项"-r":表示递归整个目录
#选项"-q":简化输出信息

在另外一个终端编写触发式同步脚本

  • 注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效
bash 复制代码
vim /opt/inotify.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/"
RSYNC_CMD="rsync -azH --delete -e 'ssh' /var/www/html/ root@192.168.88.50:/data/yy"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录

$INOTIFY_CMD | while read event
do
echo $event
  if [ $(pgrep rsync | wc -l) -le 1 ];then
   #如果rsync未在执行,则立即启动
   $RSYNC_CMD
  fi
done

Git

  • SVN、Git 代码版本控制软件,主要功能用于代码管理和文档管理,支持日志备份、数据恢复、文件同步等功能
命令 作用
git clone 从代码仓库克隆代码到本地
git add 添加文件到暂存区
git commit 提交代码到本地仓库
git push 推送代码到代码仓库(如github、gitee、gitlab)
git log 查看版本提交记录
git pull 从代码仓库拉取最新代码到本地
git branch 管理代码分支
git checkout 切换分支
相关推荐
鱼满满记5 小时前
1.6K+ Star!GenAIScript:一个可自动化的GenAI脚本环境
人工智能·ai·github
梦魇梦狸º8 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
Huazie13 小时前
一篇搞定 Hexo Diversity 主题接入!支持多主题自由切换!
javascript·github·hexo
草明1 天前
Nginx 做反向代理,一个服务优先被使用,当无法提供服务时才使用其他的备用服务
运维·nginx·github
马里嗷1 天前
Puppeteer - 掌控浏览器自动化的开源利器
后端·github
2301_796982141 天前
怎样使用pycharm的服务?
git·pycharm·github
yanlaifan2 天前
GitHub中搜索项目方法
github
油泼辣子多加2 天前
2024年11月5日Github流行趋势
github
算家云2 天前
moffee模型部署教程
人工智能·python·github·markdown·nvidia·ppt·幻灯片制作