`
jickcai
  • 浏览: 239017 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rsync

    博客分类:
  • sh
 
阅读更多

一、rsync 概述

rsync 是类 unix 系統下的数据镜像备份工具,一款支持快速完全备份和增量备份的工具,支持本地复制,远程同步等,类似于 scp 命令;rsync 命令在同步文件之前要先登录目标主机进行用户身份认证,认证过后才能进行数据同步,身份认证方式取决于所使用的协议类型,rsync 一般使用两种协议进行数据同步;ssh 协议 和 rsync 协议。

二、rsync 特性

 
能更新整个目录树和文件系統
有选择的保留符号链接、硬链接、文件属性、权限、设备、及时间等。
对于安装来说,无特殊权限要求。
对于多个文件来说,文件传输效率高。
能用 ssh 或自定义端口作为传输入口端口
 

三、rsync 工作原理

 
既然涉及到数据同步,必要的两个概念是:源地址(文件),目标地址(文件),以及以哪一方为基准。例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。
 
rsync 在进行数据同步之前需要先进行用户身份验证,验证的方式取决于使用的链接方式:
ssh 登录验证方式:使用 ssh 协议作为基础进行用户身份验证,然后进行数据同步。
rsync 登录验证方式:使用 rsync 协议进行用户身份验证(非系統用户),然后进行数据同步。
 
数据同步方式:推送(上传)、拉取(下载)
 

四、rsync 实验演示

 
我们一般使用 rsync 来进行单向数据同步,因此我们需要确定一个基数,比如:两台服务器,一台 NFS 作为网站数据服务器(基准服务器),另一台专门作为 rsync 数据备份服务器。

4.1 ssh 协议数据同步:将 NFS 服务器数据同步备份到 rsync 服务器

 
环境:一台 NFS 服务器,一台 rsync 服务器。
在两台服务器上分别创建目录( /filesrc 、/filedst )
 
下行同步(下载)
格式:rsync -avz 服务器地址:/服务器目录/* /本地目录
示例:rsync -avz user@ip:/filesrc/* /filedst
 
-z:传输时进行压缩提高效率
-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息
-P:显示文件传输的进度信息
-a --archive:归档模式,表示递归传输并保持文件属性,等同于"-rtopgDl"
-r --recursive:以递归模式拷贝目录
-R --relative:使用相对路径
-l --links:如果文件是软链接,则拷贝软链接本身而非软链接所指向的文件
-L --copy-links:如果文件是软链接,拷贝软链接指向的文件
-W --whole-file:拷贝文件时不进行增量检测
-t --times:保持 mtime 属性
rsync 默认用"quick check"算法决定哪些文件需要增量传输。此算法只比较文件的大小和 mtime,即使其它属性不同也会认为它们是完全相同的文件,从而不需要增量传输 建议任何时候都加上"-t",否则目标文件 mtime 会设置为系统时间,导致下次更新检查出 mtime 不同而导致增量传输无效
上行同步(上传)
格式:rsync -avz /本地目录/* 服务器地址:/服务器目录
示例:rsync -avz /filedst/* user@ip:/filesrc
 
 
注意:使用 root 在生产环境中不要使用 root 用户, 尽量使用单独创建的用户,减少权限溢出。
 
创建用来做数据同步的用户,并给予用户对目录的相应权限,一般是用 ACL 设置权限
useradd zhangsan
 
passwd zhangsan
setfacl -m u:zhangsan:rwx /filesrc
 
若要实现免密数据同步,只需要做好 ssh 密钥对登录即可(两台机器都要做)
ssh-keygen -t rsa -b 2048
 
ssh-copy-id user@IP

4.2 rsync 协议数据同步,将 NFS 服务器数据同步备份到 rsync 服务器

 
环境:一台 NFS 服务器,一台 rsync 服务器。
在两台服务器上分别创建目录( /filesrc 、/filedst )
 
 
1、搭建 rsync 服务(仅西需要在 NFS 服务器上搭建即可)
 
a.创建主配置文件( /etc/rsyncd.conf ) 默认没有自己创建
address = 10.145.81.212 #rsync 服务绑定
IP prot 873 #默认服务器端口 873
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #进程号文件位置
[web] #共享名:用来连接是写在 url 上的,切记。
comment = web directory backup #共享描述语句
path = /filesrc #实际共享目录
read only = no #是否仅允许读取
dont conpress = *.gz *.bz2 #哪些文件不进行压缩
auth users = zhangsan #登录用户名(非系統用户,需要自己创建)
secrets file = /etc/rsyncd_users.db #认证账户密码文件(需要自己创建-同上)
 
b.创建认证所需要的密码文件
# vim /etc/rsyncd_users.db
 
zhangsan:123456
# chmod 600 /etc/rsyncd_users.db #必须修改权限,否则登录报错
 
c.启动服务
# rsync --daemon # netstat -tunpl | grep 873
 
 
d.设置映射用户对共享目录有权限
# setfacl -m u:nobady:rwx /filesrc
注意:关闭服务可使用 kill 命令,但偶尔会造成服务结束但进程配置文件不被删除的问题,若遇到此类问题可以手动删除,再启动则正常(建议自己写一个 rsync 的服务管理脚本)
 
 
下行同步(下载)
格式:rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录
示例:rsync -avz rsync://zhangsan@IP/web /filedst
拓展 --delete :删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)
rsync -avz --delete rsync://zhangsan@IP/web /filedst
 
上行同步(上传)
格式:rsync -avz /本地目录/* rsync://用户名@服务器地址/共享模块名
示例:rsync -avz /filedst/* rsync://zhagnsan@IP/web
 
rsync 协议的免密可以借助一个环境变量来实现

 

# export RSYNC_PASSWORD=虚拟用户密码(客户端执行)

<iframe style="display: none !important;"></iframe>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics