简介:
Remote Sync 远程同步协议
官方网站:https://rsync.samba.org
端口号:TCP 873
rsync是类unix系统下的数据镜像备份工具。支持完全备份和增量备份,支持本地复制,远程同步等。在同步文件之前需要先登录目标主机进行用户身份认证,认证后才能进行数据同步,身份认证方式取决于使用的协议类型。一般使用两种协议进行数据同步:ssh协议和rsync协议。
scp和rsync的区别
scp对所有文件进行备份传输,rsync可以实现只备份变化的文件
scp支持远程主机到远程主机的传输,而rsync不支持
scp对小文件传输每一次都要进行建立、维护、断开,rsync对多个小文件可以进行打包传输
rsync特性
能更新整个目录树和文件系统
有选择地保留符号链接,硬链接、文件属性、权限、设备以及时间,边复制,边统计,边比较
对于安装来说,无任何特殊权限要求
就多个文件来说,传输速率高
能用ssh自定义端口作为传输端口
备份的种类
完整备份:每次备份都是从备份源将所有文件或目录备份到目的地
优点:数据完整i性高
缺点:效率低
完备的基础上:
1、增量备份:备份上次备份以后有变化的数据(与完上一次备份比较,增加)
优点:备份的数据少,速度快
缺点:数据恢复困难,每次备份数据都不能丢失
2、差异备份:备份上次完全备份以后有变化的数据(与完全备份后进行对比比,重新在完全备份的基础上备份)(不常用)
优点:恢复数据只需要第一次的完备和之后的差备就好了
缺点:相对于增备速度慢
常见的备份组和
完全+增量 :1次完全+多次增量
完全+差异:1次完全+1次差异
rsync工作方式
模式:
本地文件系统实现同步(类似于cp)
本地与远程主机时间同步(类似于scp)
例如:ssh登陆验证模式:使用ssh协议作为基础进行用户身份认证,然后进行数据同步
以守护进程方式运行。本地主机与远程主机通过网络套接字进行数据传传输:
例如:rsync登陆验证模式:使用rsync协议进行用户身份认证(非系统用户),然后进行数据同步
应用场景
推和拉都是站在客户端角度来说的,而不是从rsync服务器的角度
推:将客户端的数据推向rsync服务端,会导致数据同步缓慢,适合少量数据备份
拉:将rsync服务数据拉回(下载到)客户端
推拉
异地备份
实验
本地传输实验(验证检查模式和同步模式)
检查模式实验
本地传输,类似于cp,本地增量备份过程,增量备份依然将1.txt传输,因为mtime发生变化
rsync同步复制过程:
决定那些文件需要同步(检查模式)默认情况下,rsync会对比源文件和目标文件的大小、mtime是否一致
解决方法:让rsync只对比文件大小 --size-only
rsync --size-only -v dir1/* dir2/
-t选项保持mtime不变也可以跳过mtime的检测
同步模式实验
同步模式是指在按照规定的检查模式确定了哪些文件被同步后,在同步之前要做的工作
--delete 无差异备份,删除原位置没有但目标位置有的文件
--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 删除目标位置有的文件而备份源没有的文件(这样才能做到完全同步,否则是增量备份)
实现远端清空目录
--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相关命令
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)
修改配置文件
vim /etc/rsyncd.conf
全局模块
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 -avz --delete(将基准服务器上没有的文件删除) user1@192.168.1.10::backup/test.txt /root
若想免输入密码传输(配合周期性计划任务定时备份):
方法一
客户端创建一个目录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自定义用户,保护服务器用户名身份
使用服务端在模块中定义用户登录
访问过程
实战:服务端脚本实现过程
流程
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(属性变化)
测试:
之后将会写入脚本进行实时备份
生产环境脚本进行实时同步
远程实验流程
先开通免密验证
ssh-keygen -t rsa -b 2048 产生密钥
ssh-copy-id root@192.168.1.11 发送密钥并保存
在家目录下写几个脚本src.sh
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
常见的报错与解决方法
发布者:LJH,转发请注明出处:https://www.ljh.cool/5718.html