rsync远程同步协议

How to Transfer Files with Rsync over SSH - Linux Admin Geeks

简介:

Remote Sync 远程同步协议
官方网站:https://rsync.samba.org
端口号:TCP 873
rsync是类unix系统下的数据镜像备份工具。支持完全备份和增量备份,支持本地复制,远程同步等。在同步文件之前需要先登录目标主机进行用户身份认证,认证后才能进行数据同步,身份认证方式取决于使用的协议类型。一般使用两种协议进行数据同步:ssh协议和rsync协议。

scp和rsync的区别
scp对所有文件进行备份传输,rsync可以实现只备份变化的文件
scp支持远程主机到远程主机的传输,而rsync不支持
scp对小文件传输每一次都要进行建立、维护、断开,rsync对多个小文件可以进行打包传输

rsync特性
能更新整个目录树和文件系统
有选择地保留符号链接,硬链接、文件属性、权限、设备以及时间,边复制,边统计,边比较
对于安装来说,无任何特殊权限要求
就多个文件来说,传输速率高
能用ssh自定义端口作为传输端口

备份的种类

rsync远程同步协议

完整备份:每次备份都是从备份源将所有文件或目录备份到目的地
优点:数据完整i性高
缺点:效率低

完备的基础上:
1、增量备份:备份上次备份以后有变化的数据(与完上一次备份比较,增加)
优点:备份的数据少,速度快
缺点:数据恢复困难,每次备份数据都不能丢失

2、差异备份:备份上次完全备份以后有变化的数据(与完全备份后进行对比比,重新在完全备份的基础上备份)(不常用)
优点:恢复数据只需要第一次的完备和之后的差备就好了
缺点:相对于增备速度慢

常见的备份组和
完全+增量 :1次完全+多次增量
完全+差异:1次完全+1次差异

rsync工作方式
模式:
本地文件系统实现同步(类似于cp)
本地与远程主机时间同步(类似于scp)
例如:ssh登陆验证模式:使用ssh协议作为基础进行用户身份认证,然后进行数据同步
以守护进程方式运行。本地主机与远程主机通过网络套接字进行数据传传输:
例如:rsync登陆验证模式:使用rsync协议进行用户身份认证(非系统用户),然后进行数据同步

应用场景

推和拉都是站在客户端角度来说的,而不是从rsync服务器的角度
推:将客户端的数据推向rsync服务端,会导致数据同步缓慢,适合少量数据备份

rsync远程同步协议

拉:将rsync服务数据拉回(下载到)客户端

rsync远程同步协议

推拉

rsync远程同步协议

异地备份

rsync远程同步协议

实验

本地传输实验(验证检查模式和同步模式)

检查模式实验

本地传输,类似于cp,本地增量备份过程,增量备份依然将1.txt传输,因为mtime发生变化

rsync远程同步协议
rsync远程同步协议
rsync远程同步协议

rsync同步复制过程:
决定那些文件需要同步(检查模式)默认情况下,rsync会对比源文件和目标文件的大小、mtime是否一致
解决方法:让rsync只对比文件大小  --size-only
rsync --size-only -v dir1/* dir2/

rsync远程同步协议

-t选项保持mtime不变也可以跳过mtime的检测

rsync远程同步协议
rsync远程同步协议

同步模式实验

同步模式是指在按照规定的检查模式确定了哪些文件被同步后,在同步之前要做的工作

--delete 无差异备份,删除原位置没有但目标位置有的文件

rsync远程同步协议

--exclude 排除,指定某个文件不进行复制

基于ssh远程认证系统用户备份
ssh协议数据同步实验:将一台基准服务器(10)数据同步备份到rsync服务器上(11)
两台主机都装rsync服务
基准服务器mkdir /filesrc,rsync服务器mkdir /filedst
基准服务器/filesrc目录下添加文件

下载:rsync -avz 服务器地址:/服务器目录/* /本地目录

选项:
-a 归档模式,递归并保留对象属性,包括以下属性
-t 保持mtime不变
-o 保持文件所有者信息
-g 保持文件属组
-p 保持文件权限
-l 如果文件是连接文件,则复制连接,而不是源文件
-D 复制设备文件信息
-v 显示同步过程
-z 在传输文件时进行压缩
-r 递归传送目录
--delete 删除目标位置有的文件而备份源没有的文件(这样才能做到完全同步,否则是增量备份)

rsync远程同步协议

实现远端清空目录

rsync远程同步协议

--passwd-file=FILE 从FILE中得到密码

实例:rsync -avz root@192.168.1.10:/filesrc/* /filefst (rsync下filesrc/也会代表复制目录下所有内容而不是整个目录,是个坑,注意)

上传:rsync -avz /本地目录/* 服务器地址:/服务器目录
实例:rsync -avz /filedst/* root@192.168.10:/filesrc

注:1、生产环境中尽量使用单独创建的普通用户(不是虚拟用户),减少权限溢出(创建zhangsan用户,设置相应权限setfacl -m u:zhangsan:rwx /filesrc)2、若要实现免密码数据同步,双方都增加ssh密钥对(ssh-keygen -t rsa -b 2048;ssh-copy-id 192.168.1.10(11))

基于rsyncd认证守护进程方式创建非系统用户进行同步

基准服务器配置(基于ssh):

守护进程的优势
发送文件时不需要考虑身份和权限问题
不会出现身份和文件路径暴露

服务端和客户端都使用yum下载rsync包
yum -y install rsync

rsync远程同步协议

查看rsync相关命令
rpm -qf | grep bin

查看配置文件路径
rpm -qc rsync
rpm -ql rsync | grep etc

创建目录赋予rsync用户权限
mkdir /backup
创建自定义用户
useradd -M -s /sbin/nologin rsync

创建备份目录/backup 并修改所属 chown -R rsync.rsync /backup(也可以通过setfacl -m rsync:rsync:rwx /filesrc)

rsync远程同步协议

修改配置文件
vim /etc/rsyncd.conf

rsync远程同步协议

全局模块

uid = rsync                    #运行进程的身份
gid =rsync                         #运行进程的组
port =873 (必须)                              #监听端口
ignore errors                      忽略错误信息
address =192.168.1.10                    #监听IP
pid file =/var/run/rsyncd.pid          #进程PID,自动生成
log file =/var/log/rsyncd.log          #日志文件位置
lock file =/var/run/rsync.lock         #指max connectios参数的锁文件
motd file =/etc/rsyncd.motd           #客户端登陆之后弹出的消息,需要创建
hosts allow =192.168.0.0/24                        #允许同步客户端的IP地址,可以是网段,或者用*表示所有 192.168.1.0/24或192.168.1.0/255.255.255.0
fake super = yes 无需让rsync以root身份运行,允许存储文件的完整路径(3.1版本之后)
use chroot = yes                               #是否囚牢,锁定家目录,rsync被黑之后,黑客无法再rsync运行的家目录之外创建文件,选项设置为yes
max connections =5                             #最大连接数
timeout = 600                                       # 超时时间
list =false                          不允许查看模块信息
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2            哪些文件类型不进行压缩

局部模块

[backup] (必须)                             #共享模块名称
auth users =rsync_user (必须)               #存放用户的密码文件,格式是  用户名:密码
read only = false  (可写再模块内部)                     #设置服务端文件读写权限
secrets file = /etc/rsync.password(必须)                    定义rsync用户连接认证密码文件路径
path =/backup  (必须)                   #模块路径
comment = welcome to lijiahao.com backup!             #描述

创建登录用户密码认证文件
echo "rsync_user:123"> /etc/rsync.password
chmod 600 /etc/rsync.password

启动服务
systemctl start rsyncd
systemctl enable rsyncd
选择项(centos6):rsync --daemon(以守护进程的方式进行启动 )

查看端口号
netstat -anput |grep :873
或者使用 lsof -i:873
注:centos6关闭服务使用kill命令,rm -f /var/run/rsyncd.pid 删除rsync.pid文件

rsync服务器测试:

推送(上传)rsync -avz /root/test.txt user1@192.168.1.10::backup

rsync远程同步协议

拉取(下载)rsync -avz --delete(将基准服务器上没有的文件删除)  user1@192.168.1.10::backup/test.txt  /root

rsync远程同步协议

若想免输入密码传输(配合周期性计划任务定时备份):
方法一
客户端创建一个目录echo "123" >>/etc/rsync.pass
chmod 600 /etc/rsync.pass
如果上传文件:rsync -avz /root/* rsync_user@192.168.1.10::backup --password-file=/etc/rsync.pass(自动输入密码)
方法二
备份服务器声明环境变量:
export RSYNC_PASSWORD=123

基于ssh和基于rsyncd守护进程传输方式的比较

ssh
端口:22
认证方式:系统用户(/etc/passwd /etc/shadow)
程序用户:服务端系统用户(操作系统可识别)
访问身份:登录的用户身份都不一样,指定不同身份

rsyncd
端口:873
认证方式:自定义虚拟用户
程序用户:rsync自定义用户,保护服务器用户名身份
使用服务端在模块中定义用户登录

访问过程

rsync远程同步协议

实战:服务端脚本实现过程

流程
1:安装包
yum -y install rsync
2:创建用户
useradd -M -s /sbin/nologin rsync
3:创建备份目录,并修改属主和属组
mkdir /backup
chown -R rsync.rsync /backup
4:对配置文件进行修改:/etc/rsyncd.conf
5:创建认证文件,修改权限
echo "rsync_user:123" > /etc/rsync.password
chmod 600 /etc/rsycn.password
6:启动和自启动服务
systemctl start rsyncd
systemctl enable rsyncd

脚本:

#!/bin/bash

#安装rsync包
yum -y install rsync 

#创建用户
useradd -M -s /sbin/nologin rsync

#创建备份目录,并修改属主和属组
mkdir /backup
chown -R rsync.rsync /backup

#对配置文件进行修改

cat <<EOF>/etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = yes 
max connections = 200 
pid file = /var/run/rsyncd.pid
timeout = 900 
ignore errors
list = false
fake super = yes 
read only = false
###########################
[backup]
    comment = welcome to backup
    auth users = rsync_user
    path = /backup
    secrets file = /etc/rsync.password
EOF

#创建认证文件,修改权限
echo "rsync_user:123" > /etc/rsync.password
chmod 600 /etc/rsync.password

#启动和自启动服务
systemctl start rsyncd
systemctl enable rsyncd

测试脚本
客户端
装软件
yum -y install rsync
export RSYNC_PASSWORD=123

可以实现多个模块(backup1,backup2,局部配置认证用户auth users rsync1 、rsync2······指定目录为多个不常用)

rsync+inotify单项实时同步

介绍
定期同步的缺点:。
执行备份的时间固定,延期明显,实时性差。
当同步源长期不变化时,密集的定期任务是不必要的(浪费资源)。
实时同步的优点:
一旦同步源出现变化,立即启动备份,实时性好。
只要同步源无变化,则不执行备份,节省资源。

本地实验流程
下载包
inotify-tools-3.14.tar.gz

下载gcc:
yum -y install gcc gcc-c++

安装源码包
解包 tar xvf inotify-tools-3.14.tar.gz -C /usr/local
配置:cd /usr/local/inotify-tools-3.14 ; ./configure
编译 :make
安装:make install
配置安装可以一步搞定./configer && make && make install

inotifywait -mrq -e create,delete,move,modify /backup
-m 处于始终监听状态
-r 递归查询目录
-q 安静模式,只打印监控事件的信息
-d 放到后台运行
-e 指定监听事件(如果省略,所有事件都监听)
create modify move delete attrib(属性变化)

测试:

rsync远程同步协议

之后将会写入脚本进行实时备份

生产环境脚本进行实时同步

远程实验流程

先开通免密验证
ssh-keygen -t rsa -b 2048 产生密钥
ssh-copy-id root@192.168.1.11 发送密钥并保存

在家目录下写几个脚本src.sh

rsync远程同步协议

bash ~/src.sh &
在/backsrc创建文件修改文件删除文件进行测试

测试inotify双向同步(服务端和客户端都需要配置)

配置rsync

#!/bin/bash

#安装rsync包
yum -y install rsync 

#创建用户
useradd -M -s /sbin/nologin rsync

#创建备份目录,并修改属主和属组
mkdir /backup
chown -R rsync.rsync /backup

#对配置文件进行修改
cat <<EOF>/etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = yes 
max connections = 200 
pid file = /var/run/rsyncd.pid
timeout = 900 
ignore errors
list = false
fake super = yes 
read only = false
###########################
[backup]
    comment = welcome to backup
    auth users = rsync_user
    path = /backup
    secrets file = /etc/rsync.password
EOF

#创建认证文件,修改权限
echo "rsync_user:123" > /etc/rsync.password
chmod 600 /etc/rsync.password

#启动和自启动服务
systemctl start rsyncd
systemctl enable rsyncd
netstat -anput | grep :873

#客户端创建密码文件
echo "123" >/etc/rsync.pass
chmod 600 /etc/rsync.pass

下载inotify

#!/bin/bash
yum -y install gcc gcc-c++
tar xvf  inotify-tools-3.14.tar.gz -C /usr/local
cd  /usr/local/inotify-tools-3.14 ; ./configure
make && make install

配置监控脚本

#!bin/bash
# 同步端的ip
IP=192.168.1.10
# 需要同步的目录
DIR=/backup/

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib /backup | while read file 
do
rsync -avz --delete $DIR rsync_user@$IP::backup --password-file=/etc/rsync.pass
done

常见的报错与解决方法

rsync远程同步协议

发布者:LJH,转发请注明出处:https://www.ljh.cool/5718.html

(0)
上一篇 2020年9月23日 上午2:18
下一篇 2020年10月4日 上午2:59

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注