rsync远程同步备份
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync远程同步备份相关的知识,希望对你有一定的参考价值。
作者:Georgekai 归档:学习笔记 2018/1/22
|
本章正题:rsync远程同步备份
1.5.1 什么是rsync?
开源的、快速的、多功能的、可实现全量及增量备份的本地或远程数据同步备份方案
rsync官网:http://rsync.samba.org/documentation.html
1. 什么是全量、什么是增量?
全量备份:本地所有数据都进行传输复制,不管对端服务器是否有相同的数据,如果有进行覆盖
增量备份:只备份同步变化的的数据,对端服务器已存在的数据不进行传输复制
1.5.2 rsync软件命令特点
1. rsync == scp (scp是全量复制、rsync是增量复制),利用的是ssh协议
参数:-r #递归
-p #保证文件权限不变
-a #包括多个参数
scp远程传输文件:scp -rp /oldboy_dir/oldboy_file1 172.16.1.31:/tmp
scp远程传输目录:scp -rp /oldboy_dir/ 172.16.1.31:/tmp
rsync远程传输文件:rsync -rp /oldboy_dir/oldboy_file1 172.16.1.31:/tmp
rsync远程传输目录:rsync -rp /oldboy_dir 172.16.1.31:/tmp
PS: 1.如果传输目录时,目录后面有“/”,表示将目录下面的数据内容传输过去
2.如果传输目录时,目录后面没有“/”,表示将目录本身及目录下面的数据内容进行传输过去
2. rsync == cp
cp本地传输文件或目录:cp -a /oldboy_dir/oldboy_file1 /tmp
rysnc本地传输文件或目录:rsync -a /oldboy_dir/oldboy_file1 /tmp
3. rsync == rm
创建空目录:mkdir /null
rsync清空目录:rysnc --delete -r /null/ 172.16.1.31:/oldboy_dir/
4. rsync == ls
查看远程端的数据:rsync 172.16.1.31:/tmp/
1.5.3 rsync实现增量同步原理说明
1. rysnc通过quick check算法实现增量传输数据。
2. 同步方式: 1)CentOS 5中,把所有文件对比一遍,然后把差异数据进行同步
2)CentOS 6中,一边对比差异,一边把差异的数据进行同步(效率快)
3. 查看rsync版本
rsync --version
1.5.4 rsync软件的特点
1. 支持拷贝普通文件与特殊文件(如链接文件,设备)
2. 可以有排除指定文件或目录同步的功能,相当于tar的排除
3. 可以做到保持原文件或目录的权限时间,或软硬连接的属性不变
4. 可以实现增量同步,指同步发生变化的数据,所以传输速率很高
# 将备份/home 目录自 2008-01-29 之后修改过的文件
tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
# 将备份 /home 目录昨天之后修改过的文件
tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
# 添加文件到已经打包的文件
tar -rf all.tar *.gif
PS:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
5. 可以使用rcp、rsh、ssh等方式来配置行进隧道加密传输文件(rsync本身不会对数据加密)
6. 可以支持socket(守护进程的方式)传输文件和数据(服务端和客户端)
7. 支持匿名或认证的进程模式传输,可是实现安全地进行数据备份及镜像
1.5.6 rsync的企业工作场景说明
1. 利用定时任务实现数据备份(crond+rsync)
2. 利用实时同步方式实现数据备份(inotify或sersync+rsync)
1.5.7 rsync的工作方式
1.本地数据备份方式,类似上面的cp命令
2.远程备份shell方式,类似上面的scp命令
语法结构:
Access via remote shell:
Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST
实现远程备份方式,类似scp命令
Pull(拉):
rsync ---数据备份命令
[OPTION...] ---指定备份数据命令参数
[[email protected]]HOST: ---定义以什么身份从相应主机上,拉取数据信息
(如果没有[[email protected]],表示以当前用户身份登录到远程主机,拉取数 据)
SRC... ---将要从远端服务拉取的数据信息(文件或目录)
[DEST] ---将拉取过来的数据,保存到本地路径信息
Push(推):
rsync ---数据备份命令
[OPTION...] ---指定备份数据命令参数
SRC... ---将本地服务上数据信息(文件或目录),推送到远端
[[email protected]]HOST: ---定义以什么身份向相应主机上,推送数据信息
(如果没有[[email protected]],表示以当前用户身份登录到远程主机,推送数 据)
DEST ---将本地数据推送到远程服务器的路径信息
示例:
pull(拉):rsync -rp [email protected]:/etc/hosts /tmp/
以oldboy用户身份将31主机的hosts文件拉取到本地的/tmp/目录下
注:如果前面不写用户名表示以当前用户身份拉取数据
push(推):rsync -rp /etc/hosts [email protected]:/tmp/
以oldboy用户身份将本地hosts文件推送到41服务器的/tmp目录下
注:下图解释推和拉的概念
3. rsync守护进程方式,进行数据备份同步:(重点)
语法结构:
Access via rsync daemon:
Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
实现守护进程方式,进行数据备份同步:
Pull:
rsync ---数据备份命令
[OPTION...] ---指定备份数据命令参数
[[email protected]]HOST:: ---指定认证用户身份信息,从相应主机,拉取数据信息
SRC... ---指定一个模块信息?
[DEST] ---将拉取过来的数据,保存到本地路径信息
Push:
rsync ---数据备份命令
[OPTION...] ---指定备份数据命令参数
SRC... ---将本地服务器上数据信息(文件或目录),推送到远端
[[email protected]]HOST:: ---指定认证用户身份信息,将本地主机数据,推送到远端
DEST ---指定一个模块信息?
1.5.8 rsync守护进程模式部署步骤:
1. 服务端部署:
1)检查软件是否存在
rpm -qa|grep rsync (如果不存在,yum install rsync -y安装一下即可)
2)编写rsync软件的配置文件(编辑后面的步骤可以根据配置文件操作)
vim /etc/rsyncd.conf(默认是没有这个配置文件)
全局配置:
#注释信息:谁写的,时间,干什么用的
uid = rsync #远端的用户使用rsync访问共享目录
gid = rsync #远端的用户组使用rsync这个组访问共享目录
use chroot = no #是否将用户锁定在当前目录
max connections = 200 #用户最大连接数
timeout = 300 #等待超时时间定义
pid file = /var/run/rsyncd.pid #存放进程对应的pid号(进程号)
注:杀死进程的三种方式:1. kill pid号(会提示信息)
如:kill `cat /var/run/rsyncd.pid` (杀死rsync进程号)
2. killall 进程名(会提示信息)
3. pkill 进程名,类似的都会一起杀掉(不会提示信息)
lock file = /var/run/rsyncd.lock #进程的锁文件(超过max connections就锁了,其他用户不能进了)
log file = /var/log/rsyncd.log #日志文件,存放出错信息等
局部配置:
[backup] #模块(类似于变量,调用里面的信息)
comment = “bakcup dir by oldboy” #说明信息
path = /backup #(模块对应的位置)
ignore errors #忽略错误程序
read only = false #bakcup目录是否为只读权限
list = false #是否可以列表*(显示出所有模块)
hosts allow = 172.16.1.0/24 #白名单
hosts deny = 0.0.0.0/32 #黑名单
auth users = rsync_bakcup,george #认证用户,不需要创建这个用户(通过这个用户拉或推数据)
secrets file = /etc/rsync.password #认证用户的密钥文件(将认证用户的密码存放进去)
3)创建rsync备份目录的管理用户
useradd -s /sbin/nologin -M rsync
4)创建认证用户密钥文件
echo "rsync_bakcup:[email protected]" /etc/rsync.password
chmod 600 /etc/rsyncd.password #更改权限600
5)创建备份目录
mkdir /backup
chown rsync.rsync /bakcup #让远程用户rsync可以访问
6)启动rsync 守护进程服务
rsync --daemon
注:rsync默认端口号:TCP 873
2. 客户端部署:
1)进行测试传输备份数据:
NFS推送数据到rsync: rsync -avz /etc/hosts [email protected]::backup
rsync守护进程模式数据传输原理:
如果把模块对应目录的属主改成root,是没有权限访问rsync服务器的(rsync服务器只认被认证的用户)
微信公众号:linux运维菜鸟之旅
以上是关于rsync远程同步备份的主要内容,如果未能解决你的问题,请参考以下文章