配置rsync远程数据同步服务详解

简介:

rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适合于异地备份,镜像服务器等应用。

rsync的官方为http://rsync.samba.org,可以去官网下载最新版本的rsync。系统默认就已经安装好了rsync软件了,如果没装的可以使用yum或rpm安装即可。

1
2
[root@localhost /]#rpm -q rsync
rsync- 3.0 . 6 -5e16_0.i686

在远程同步任务中,负责发起rsync同步操作的客户机称为客户端,而负责响应来自客户端的rsync同步操作的服务器称为备份源。在下行同步(下载)中,备份源负责提供文档的原始位置,发起端应对该位置有读取权限;在上行同步中(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。如下图所示:

084608455.jpg

使用rsync同步工具时,备份源既可以是SSH服务器,也可以是以服务模式运行的rsync程序。下面分别讲解配置SSH备份源和rsync备份源的方法。


一、配置SSH备份源

1、创建备份用户rget,rput分别用来下载,上传。

1
2
3
4
[root@localhost /]#useradd rget
[root@localhost /]#passwd rget
[root@localhost /]#useradd rput
[root@localhost /]#passwd rput

2、确认sshd服务正常运行,允许用户rget,rput访问。

1
2
3
4
5
[root@localhost /]#vim /etc/ssh/sshd_config
... //省略部分内容
UseDNS no
AllowUsers rget rput    //启用此行,值允许用户rget和rput使用sshd服务。
[root@localhost /]#service sshd start

3、调整同步目录的权限,使rget有读取权限、rput有写入权限。

这里作者以网站根目录为例,讲解如何设置rsync备份源的权限设置。

在linux文件系统中,正常创建的目录权限为755,文件权限为644,因此对于rget用户来说,默认权限已经满足下行备份的要求了。但是对于rput用户来说,要能够写入才有权限做上行备份。建议将目录的属主修改为备份用户;另外,为了不影响网站服务器对相关目录的访问,需要为WEB服务的运行用户指定额外的权限。这时就需要使用“setfacl”了,有关于“setfacl”的详细文档请自行查阅相关文档,作者这里只做简单的介绍。

1
2
[root@localhost /]#chown -R rput:rput / var /www/html
[root@localhost /]#setfacl -R -m user:daemon:rwx / var /www/html  //设置ACL

“setfacl”命令常用的参数解释如下:

-R:表示递归操作

-m:指定用户以及设置的权限

-x:删除某一项ACL属性

-b:删除所有的ACL属性

如果希望建立的文件,子目录也具有相同的ACL属性,则应为指定目录设置默认ACL属性,即在“setfacl”权限模式中添加“default”参数。查看已设置好的ACL可以使用“getfacl”命令。

1
2
[root@localhost /]#setfacl -m  default :user:daemon:rwx / var /www/html  //设置默认ACl
[root@localhost /]#getfacl / var /www/html  //查看设置好的ACL


二、配置rsync备份源

rsync不仅仅用作远程同步发起端(客户端),也可以作为守护进程运行,为其他客户机提供备份源。配置rsync备份源需要建立配置文件rsync.conf,创建备份账号。然后将rsync程序以“--daemon”选项运行。

1、创建rsync.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost /]#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use  chroot = yes                                    //禁锢在源目录
address =  192.168 . 1.10                              //指定监听地址
port =  873                                          //指定监听的端口
log file = / var /log/rsyncd.kog                      //存放日志的位置
pid file = / var /run/rsyncd.pid                      //存放PID文件的位置
host allow =  192.168 . 1.0                            //允许访问的客户机地址
[wwwroot]                                           //共享模块名称
path = / var /www/html                                //源目录的实际路径
comment = Document Root of file.benet.com
read only = yes                                     //是否为只读
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z    //同步不压缩的类型
auth users = backup                                 //授权用户
secrets file = /etc/rsyncd_users.db                 //存放用户的数据文件

基于安全性考虑,对于rsync的备份源最好仅允许只读方式做下行同步,若确实需要做上行同步时,建议改用SSH备份源。另外,下行备份可以采用匿名的方式,只要将其中的“autusers”和“secretsfile”配置记录去掉就可以了。

2、创建备份用户的数据文件

根据上一步的设置,创建账号的数据文件,添加一行用户记录,以冒号分。列如:用户名为“backup”,密码为“pwd@back”。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

1
2
3
[root@localhost /]#vim /etc/rsync_users.db
backup:pwd@back
[root@localhost /]#chmod  600  /etc/rsync_users.db

与配置SSH备份源类似,备份用户backup也需要对源目录/var/www/html/有相应的读取权限。实际上只要other组有读取权限就可以了。

3、启动rsync服务程序

执行“rsync--daemon”命令就可以启动rsync服务,以独立监听服务的方式运行。若要关闭rsync服务,可以采取kill进程的方式。

1
2
3
4
[root@localhost /]#rsync --daemon
[root@localhost /]#netstat -anpt | grep rsync
tcp     0     0  192.168 . 1.10 : 873     0.0 . 0.0 :*    LISTEN     21182 /rsync
[root@localhost /]#kill $(cat / var /run/rsync.pid)

4、将rsync进程交给超级服务xinetd管理

考虑到异地备份的特殊性,通常并不需要全天不间断运行,最好是在有客户练接的时候才启用。因此可将rsync交给超级服务xinetd管理,只要修改相应配置并启动xinetd服务,就可以提供rsync服务了。

1
2
3
4
5
6
7
8
9
10
11
[root@localhost /]#yum -y install xinetd      //安装xinetd软件包
[root@localhost /]#service xinetd start       //启动xinetd服务
[root@localhost /]#vim /etc/xinetd.d/rsync
service rsync
{
disable = no                             //将原有的yes改为no
... //省略部分内容
server            = /usr/bin/rsync
server_args       = --daemon             //确认有--daemon服务选项
log_no_failure    += USERID
}


三、客户端使用rsync备份工具

有了备份源服务器以后,就可以使用rsync工具来执行远程同步了。现在我们就在客户端执行备份命令。

1、rsync命令的基本用法

[root@localhost/]#rsync[选项][备份源地址][目标地址]

命令格式及备份选项解释如下:

-r:递归模式,包含目录及子目录中的所有文件。

-l:对于符号链接文件仍然复制为符号链接文件。

-v:显示同步过程的详细信息。

-a:归档模式,保留文件的权限,属性等信息,等同于组合选项“-rlptgoD”

-z:在传文件时进行压缩。

-p:保留文件的权限标记。

-t:保留文件的时间标记。

-g:保留文件的属组标记(仅root使用)。

-o:保留文件的属主标记(仅root使用)。

-H:保留硬链接文件。

-A:保留ACL属性信息。

-D:保留设备文件及其它特殊文件。

--delete:删除目标位置有而原始位置没有的文件。

--checksum:根据校验和(而不是文件大小,修改时间)来决定是否跳过文件。

2、配置源的表示方法

在执行远程同步任务时,rsync命令需指定源服务器中的资源位置,对于下行备份操作,备份源对应“原始位置”,对于上行备份操作,备份源对应“目标位置”,根据备份源的类型不同,其资源表示方法也不同。

SSH备份源:表示为“用户名@主机地址:目录路径”的形式,用一个冒号分隔,验证字串与SSH登录类似。

例如:ssh的下行备份语法如下:

1
[root@localhost /]#rsync -avz rget@ 192.168 . 1.1 :/ var /www/html /opt

例如:ssh的上行备份语法如下:

1
[root@localhost /]#rsync -avz / var /www/html rget@ 192.168 . 1.1 :/ var /www/html

rsyn备份源:表示为“用户名@主机地址::共享模块名”或者“rsync://用户名@主机地址/共享模块名的形式,前者为两个冒号分隔,后者为URL路径。

例如:rsync的下行备份语法如下:

1
[root@localhost /]#rsync -avz backup@ 192.168 . 1.1 ::wwwroot /opt

或者

1
[root@localhost /]#rsync -avz rsync: //backup@192.168.1.1/wwwroot /opt


四:配置rsync+inotify实时同步

 Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取,删除,移动,修改等。利用这一机制,可以非常方便的实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。

 使用rsync工具与inotify机制想结合,可以实现触发式备份及实时同步,只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等待状态。这样一来,就避免了按固定周期备份时存在延迟性,周期过密等问题。

1、配置无密码自动登陆的SSH备份用户

真因为inotify通知机制有Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。因此使用SSH备份源比较合适,由于编写触发式脚本在后台运行,无法根据提示来输入密码。因此需要做无密码自动登录的SSH用户。对于SSH服务器来说,采用秘钥验证是避免交互式登录的最佳方法。例如:只要在客户机中创建无私钥短语的秘钥对,然后将公钥文件发送给服务器中的备份用户,就可以实现无密码自动登录了。

1
2
3
4
[root@localhost /]#ssh-keygen -t rsa             //创建秘钥对
[root@localhost /]#ssh-copy-id rput@ 192.168 . 1.1  //将公钥发送给服务器
[root@localhost /]#ssh rput@ 192.168 . 1.1          //无密码自动登录
[rput@localhost /]#

2、调整inotify内核参数

1
2
3
4
5
6
[root@localhost /]#vim /etc/sysctl.conf
...... //省略部分内容
fs.inotify.max_queued_events =  16384        //监控事件队列
fs.inotify.max_user_instances =  1024        //最多监控实例数
fs.inotify.max_user_watches =  1048576       //每个实例最多监控文件数
[root@localhost /]#sysctl -p

3、安装inotify-tools工具

使用inotify机制还需要安装inotify-tools,以便提供inotifywait,inotifywatch辅助工具程序,用来监控,汇总改动情况。inotify-tools可从http://inotify-tools.sourceforge.net下载。

1
2
3
4
[root@localhost media]#tar zxf inotify-tools- 3.14 .tar.gz -C /usr/src/
[root@localhost media]#cd /usr/src/inotify-tools- 3.14
[root@localhost inotify-tools- 3.14 ]#./configure
[root@localhost inotify-tools- 3.14 ]#make && make install

下面以监控网站目录“/var/www/html”目录为例,执行inotify命令,然后再另一个终端向“/var/www/html”目录下添加文件,移动文件,跟踪屏幕输出结果。

1
2
3
4
5
6
7
8
[root@localhost /]#inotify -mrq -e modify,create,move, delete  / var /www/html
Setting up watches.Beware:since -r was given, this  may take a  while !
Watches established.
/ var /www/html/ CREATE index.php            //创建index.php文件
/ var /www/html/ MODIFY index.php            //修改index.php文件
/ var /www/html/ MOVED_FROM index.php        //重命名index.php文件
/ var /www/html/ MOVED_TO test.php           //改名为test.php文件
...... //省略部分内容

上述命令中“-m”表示持续监控,“-r”表示递归整个目录,“-q”表示简化输出信息,“-e”表示指定监控事件(如:“modify”修改,“create”创建,“move”移动,“delete”删除,“attrib”属性更改)等各种事件,一有变动立即输出结果。

4、编写触发式同步脚本

使用inotifywait输出的监控结果中,每行记录中依次包括目录,事件,文件,据此可以识别变动情况。为了简单起见,只要检测到变动时执行rsync上行同步操作即可。需要注意的是,当更新较频繁时,应避免并发执行rsync备份——若rsync进程已经存在则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步。

1
2
3
4
5
6
7
8
9
10
11
[root@localhost /]#vim rsync.sh
#!/bin/bash
INOTIFT_CMD= "inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD= "rsync -azH --delete /var/www/html rput@192.168.1.1:/var/www/html"
$INOTIFY_CMD |  while  read DIRECTORY EVENT FILE
do
     if  [ $(pgrep rsync | wc -l) -le  0  ];then
         $RSYNC_CMD
     if
done
[root@localhost /]#chmod +x rsync.sh




本文转自yun5277 51CTO博客,原文链接:http://blog.51cto.com/dengqi/1304005,如需转载请自行联系原作者

相关文章
|
9月前
|
API 数据库 流计算
有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
【2月更文挑战第27天】有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
162 3
|
网络协议 大数据 Linux
案列分享-因netfilter包过滤规则配置错误造成datax数据同步作业运行失败
案列分享-因netfilter包过滤规则配置错误造成datax数据同步作业运行失败
|
6月前
|
监控 Unix Shell
Rsync+Inotify 实现数据同步
【8月更文挑战第25天】Rsync是一款适用于UNIX和类UNIX系统的高效数据备份工具,支持本地与远程数据复制。通过识别数据变更实现增量备份,减少网络传输量,提升效率。利用SSH加密保障数据安全,服务器负责定义源数据,客户端按需同步,确保双端一致性,常用端口为TCP-873。
78 3
|
6月前
|
前端开发 UED 开发者
无障碍设计的魔法:JSF让每个用户都能畅游数字世界!
【8月更文挑战第31天】本文介绍如何使用JavaServer Faces (JSF)构建无障碍Web应用,确保所有用户都能访问和使用。文章通过实际代码示例展示了如何利用ARIA属性增强组件、实现键盘导航、提供文本替代以及使用语义化标签等技术。无障碍设计不仅是道德责任,也是提升用户体验的关键。通过这些方法,JSF可以帮助开发者创建更加公平和包容的应用。
51 0
|
6月前
|
前端开发 数据处理 数据库
Angular与Firebase的完美联合:掌握实时数据同步技术——从环境配置到数据服务的详细实现指南
【8月更文挑战第31天】在现代Web应用中,实时数据同步对于提升用户体验至关重要。本文档详细介绍如何在Angular应用中集成Firebase实时数据库,包括准备工作、配置环境、实现实时数据同步及在组件中使用数据服务等步骤。通过本教程,开发者将掌握利用Angular与Firebase高效实现数据同步的方法,增强应用的实时互动性。
58 0
|
7月前
|
存储 NoSQL API
Redis问题之ETCD进行秒杀活动的配置数据同步如何解决
Redis问题之ETCD进行秒杀活动的配置数据同步如何解决
|
8月前
|
Java 关系型数据库 流计算
实时计算 Flink版操作报错合集之配置cats进行从MySQL到StarRocks的数据同步任务时遇到报错,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
377 0
|
9月前
|
Cloud Native 关系型数据库 OLAP
高效易用的数据同步:阿里云瑶池 Zero-ETL服务来啦!
在大数据时代,企业有着大量分散在不同系统和平台上的业务数据。OLTP数据库不擅长复杂数据查询,不具备全局分析视角等能力,而OLAP数据仓库擅长多表join,可实现多源汇集,因此需要将TP数据库的数据同步到AP数据仓库进行分析处理。传统的ETL流程面临资源成本高、系统复杂度增加、数据实时性降低等挑战。为了解决这些问题,阿里云瑶池数据库提供了Zero-ETL服务,可以快速构建业务系统(OLTP)和数据仓库(OLAP)之间的数据同步链路,将业务系统的数据自动进行提取并加载到数据仓库,从而一站式完成数据同步和管理,实现事务处理和数据分析一体化,帮助客户专注于数据分析业务。
699 0
阿里云DTS(数据同步服务)的链路中断
阿里云DTS(数据同步服务)的链路中断,排查过程
392 1
|
算法 Linux
Linux系统【文件传输】rsync命令 – 远程数据同步工具
rsync命令来自于英文词组“remote sync”的缩写,其功能是用于远程数据同步。rsync命令能够基于网络(含局域网和互联网)快速的实现多台主机间的文件同步工作,并与scp或ftp发送完整文件不同,rsync有独立的文件内容差异算法,会在传送前对两个文件进行比较,只传送两者内容间的差异部分,因此速度更快。
224 2

热门文章

最新文章