Rsync远程同步

203 阅读6分钟

rsync简介

rsync介绍

  • rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

  • rsync软件支持跨平台,适用于unix/ linux/windows等多种操作系统平台

  • rsync是一个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

  • 以其delta-transfer算法闻名。

  • rsync监听端口:873

  • rsync运行模式:C/S

rsync同步方式

  • 全量备份:原有的数据全部传送,把原来的文件和新的文件一起统一传送,全量复制,效率低
  • 增量备份:在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高

rsync特性

  • 可以镜像保存整个目录和文件系统
  • 可以很容易做到保持原文件的权限、时间、软硬连接等
  • 无须特殊权限即可安装

快速

第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件 rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的宽带

安全

可以使用scp、ssh等方式来传输文件 也可通过直接socket连接 支持匿名传输,以方便进行网站镜像

rsync与cp、scp对比

  • cp命令是一种典型的将文件完整的拷贝到一个位置。而rsync是,第一次拷贝,在目标位置没有的时候,rsync是全量拷贝过去,但是第二次拷贝的时候,只会对差异项进行同步拷贝。所有如果对同一个文件进行二次备份的话,rsync速度会相较于cp而言更快。
  • cp只支持本地,而rsync支持远程
  • scp是基于cp原理,也是属于完整性拷贝文件。假设rsync和scp拷贝的文件都是第一,目标地址都没有要同步的文件,此时,这两者的差异在于,第一个,这个要传输的文件大不大,第二个要看在传输的过程中,用的带宽大不大。如果文件不大的情况下,scp是把数据从磁盘中的块存储提取出来,封装一下,网络传过去,此时scp更快,如果是更大的文件,比如说40G,带宽只支持100M的带宽,scp想要传输,需要拆分数据,一段一段传输。而rsync会根据一个逻辑意义上的空间,把数据划分出来,把数据先压缩再传输,所以这种方式而言,带宽校,文件大,这个时候先压缩再传输会比较快。此时适合用rsync远程同步。

rsync命令

常用选项解释
-v,–verbose详细模式输出
-q,–quiet精简输出模式
-c,–checksum打开校验开关,强制对文件传输进行校验
-a,–archive归档模式,表示以递归方式传输文件,并保持所有文件树形
-z在传输文件时进行压缩
-r,–recursive对子目录以递归模式处理,包含目录及子目录中的所有文件
-H,–hard-links保留硬链接
-l, --links保留软链接
–delete删除目标位置有而原始位置没有的文件(一致性)
–delete-after传输结束以后再删除
-A保留ACL属性信息

Rsync 同步源

在远程同步任务中,负责发起 rsync 同步操作的客户机称为客户端,而负责响应来自客户端的 rsync 同步操作的服务器称为备份源,也称之为同步源

  • 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限
  • 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限

实例配置Rsync同步

image.png

3 台服务器需要配置 rsync C/S 模式,配置成一个客户端,多个 服务器端的模式。在 serverO 中部署 rsync 客户端,在 serverP 和 serverQ 中部署 rsync 的服务器端,需要编写 rsync 的配置文件,配置文件内要包含认证的用户名和密码信息,以及同步模块, 同步的目录为/data。测试文件使用/var/log/message,将此文件拷贝到/data 目录下,然后从 serverO 同步到 serverP 和 serverQ 中。

#关闭三台主机的防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#三台主机都安装
yum install -y rsync
#两台服务器都修改配置文件
vim /etc/rsyncd.conf

uid = root
gid = root
use chroot = yes
address = 192.168.80.200
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24
[wwwroot]        
path = /data
comment = Document Root of www.xixi.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper	
secrets file = /etc/rsyncd_users.db

#两台服务器都添加配置
vim /etc/rsyncd_users.db
backuper:123123
chmod 600 /etc/rsyncd_users.db
rsync --daemon
mkdir /data

#客户端配置
mkdir /data
vim /etc/server.pass
123123

vim /etc/sysctl.conf         #加大每个参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p

#安装gcc gcc-c++ 
yum install -y gcc gcc-c++ 

#编译安装inotify
cd /opt
tar zxf inotify-tools-3.14.tar.gz 
cd /opt/inotify-tools-3.14/
./configure
make && make install

#客户端监控
inotifywait -mrq -e modify,create,delete /data

#客户端打开子shell去/data目录下创建文件
vim /data/1.txt
#返回查看监控

#添加脚本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/abc/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data backuper@192.168.80.200::wwwroot"
RSYNC_CMD2="rsync -azH --delete --password-file=/etc/server.pass /data backuper@192.168.80.210::wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
        $RSYNC_CMD2
	fi
done

#给脚本和文件赋权
cd /opt/
chmod +x inotify.sh
chmod 600 /etc/server.pass

#设置开机自启动
chmod +x /etc/rc.d/rc.local 
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local 

#执行脚本
sh -x inotify.sh

#复制文件
cp /var/log/messages /data


#服务器1
ls /data/data

#服务器2
ls /data/data

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

rsync的应用场景

  • 增量同步
  • 备份/迁移:可以作为辅助工具(mysql 主从复制 rsync +inotify ——》趋于一致 双向同步——MM,但是只能在并发量不大的时候可以用)
  • 假设mysql 从主机A迁移到主机B(一主两从模式)

一主两从模式迁移方案

  • 确定迁移的时间、业务线停止的时间、要写文档描述具体操作,要发邮件审批

  • 确认迁移后的节点的环境问题(资源环境 + 系统依赖环境 + mysql内部的格式环境 ------1)例如自增长,自增长可能会导致主从复制不一致的情况 2)版本迁移问题,比如说低版本向高版本迁移。两个版本中的差异比较大,数据迁移比较重要,需要和研发沟通,让研发开发一个工具,让低版本可以转成高版本工具格式,使用工具迁移)

  • 如果数据库是相同版本,可以用rsync + inotify持续同步

  • 测试、之前还要编写回滚方案

  • 提交检修申请 22:00 - 00:00