RSYNC数据备份

RSYNC=Remote Sync 远程同步   高效,一定要结合shell

官方网站:https://rsync.samba.org/

Author:     Andrew Tridgell, Wayne Davison, and others

Andrew Tridgell是Samba项目的领导者和主要开发人员,同时还在参与开发rsync、Linux Kernel。

#rsync --version                          #查看rsync版本,可以看到相关作者相信

rsync  version 3.0.6  protocol version 30

Copyright (C)1996-2009 by Andrew Tridgell, Wayne Davison, and others.

Web site: http://rsync.samba.org/

与SCP的比较:scp=无法备份大量数据,类似windows的复制

rsync=边复制 ,边统计,边比较

Rysnc特性和优点

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。

压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜象。

选择性保持:符号连接,硬链接,文件属性,权限,时间等

常见备份分类

完整备份,差异备份,增量备份

 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地

差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)

增量备份:备份上次备份以后有变化的数据.(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)

运行模式和端口

采用C/S模式(客户端/服务器模式)[ 就是一个点到点的传输,直接使用rsync命令 ]

端口873

发起端和备份源

四个名词的解释:

发起端:负责发起rsync同步操作的客户机叫做发起端,通知服务器我要备份你的数据

备份源:负责相应来自客户机rsync同步操作的服务器脚在备份源,需要备份的服务器

服务端:运行rsyncd服务,一般来说,需要备份的服务器

客户端:存放备份数据

数据同步方式

推push:一台主机负责把数据传送给其他主机,服务器开销很大,比较适合后端服务器少的情况

拉pull:所有主机定时去找一主机拉数据,可能就会导致数据缓慢

推:目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)

拉:源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)

两种方案,rsync都有对应的命令来实现

Xinetd管理Rsync工作原理

使用rsync来同步是先通过xinetd监听873号端口,如果rsync进来的是873号端口,那么xinetd就会通知它所管辖的rsync服务来做回应,接下来就是rsync俩服务于之间的通讯

Rsync服务安装

实验拓扑:

XueGod63(源主机192.168.1.63)====XueGod64(目标主机 192.168.1.64)

Rsync服务依赖Xinetd,是使用超级服务来管理的

需要在目标机器上安装rsync服务端

[root@XueGod64 ~]# yum -y install xinetd rsync

[root@XueGod64 ~]# rsync --daemon

[root@XueGod64 ~]# netstat -antup | grep 873

tcp        0      0:::873                      :::*                        LISTEN      2349/xinetd

Rsync命令

rsync命令和scp命令很相似

-a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等

-r, --recursive 复制所有下面的资料,递归处理

-p, --perms 保留档案权限 ,文件原有属性

-t, --times 保留时间点,文件原有时间

-g, --group 保留原有属组

-o, --owner 保留档案所有者(root only)

-D, --devices 保留device资讯(root only)

-l, --links 复制所有的连接 ,拷贝连接文件

-z, --compress 压缩模式, 当资料在传送到目的端进行档案压缩.

-H, --hard-links 保留硬链接文件

-A, --acls 保留ACL属性文件,需要配合--perms

-P,-P参数和 --partial --progress 相同.只是为了把参数简单化,表示传进度

--version, 输出rsync版本

-v , --verbose 复杂的输出信息

-u, --update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件

--port=PORT, 定义rsyncd(daemon)要运行的port(预设为tcp 873)

--delete, 删除那些目标位置有的文件而备份源没有的文件

--password-file=FILE ,从 FILE 中得到密码

--bwlimit=KBPS, 限制 I/O 带宽

--filter “-filename”,需要过滤的文件

--exclude=filname,需要过滤的文件

--progress,显示备份过程

常用的 –avz

使用rsync备份数据

对XueGod63网站根目录的/var/www/html目录备份到XueGod64的/web-back

源服务器:XueGod63

目标服务器:XueGod64

建立测试用户

[root@XueGod64 ~]# useradd rget1  ;    echo rget1:123456 | chpasswd

[root@XueGod63 ~]# useradd rget1   ; echo rget1:123456 | chpasswd

//测试用户,rget1用于下载

对目录赋予ACL权限

[root@xuegod63 ~]# mkdir /var/www/html/ -p

[root@XueGod63 ~]# setfacl -R -m user:rget1:rwx /var/www/html/                          //设置rget1的权限

[root@XueGod63~]# setfacl -R -m default:rget1:rwx /var/www/html/

[root@XueGod63 ~]# getfacl  /var/www/html

getfacl: Removing leading '/' from absolute path names

# file: var/www/html

# owner: root

# group: root

user::rwx

user:rget1:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:rget1:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

创建测试数据

[root@XueGod63 ~]# cp -r /boot/* /var/www/html/                  //boot目录下的所有数据作为测试数据

[root@xuegod64 ~]# mkdir /web-back

[root@xuegod64 ~]# chown rget1:rget1 -R /web-back/

[root@XueGod63 ~]# rsync -avz --delete /var/www/html/ rget1@192.168.0.64: /web-back/

非系统用户备份数据

使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,最后把rsync以deamon方式运行

rsyncd.conf配置文件

配置文件分为两部分:全局参数,模块参数

全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数生效

模块参数:定义需要通过rsync输出的目录定义的参数

常见的全局参数:

port          #→指定后台程序使用的端口号,默认为873。

uid            #→该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是" nobody"。

gid            #→该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为" nobody"。

max connections        #→指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

lock file                  #→指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。

motd file         #→" motd file"参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认

是没有motd文件的。

log file             #→" log file"指定rsync的日志文件,而不将日志发送给syslog。

pid file              #→指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”,存放进程ID的文件位置。

hosts allow =    #→单个IP地址或网络地址   //允许访问的客户机地址

常见的模块参数:主要是定义服务器哪个要被同步输出,其格式必须为“ [ 共享模块名 ]” 形式,这个名字就是在 rsync 客户端看到的名字,其实很像 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。

Comment         #→给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

Path                  #→指定该模块的供备份的目录树路径,该参数是必须指定的。

read only         #→yes为只允许下载,no为可以下载和上传文件到服务器

exclude             #→用来指定多个由空格隔开的多个文件或目录(相对路径),将其添加到exclude列表中。这等同于在客户端命令中使用―exclude或----filter来指定某些文件或目录不下载或上传(既不可访问)

exclude from   #→指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义,每个文件或目录需要占用一行

include             #→用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。

include from   #→指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users       #→该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果" auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在" secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file      #→该选项指定一个包含定义用户名:密码对的文件。只有在" auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

hosts allow      #→指定哪些IP的客户允许连接该模块。定义可以是以下形式:

单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,

整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0

*”则表示所有,默认是允许所有主机连接。

hosts deny      #→指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

list              #→该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,

可以创建隐藏的模块。默认值是true。

timeout   #→通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。

用配置文件定义目录输出

[root@XueGod64 ~]# vim /etc/rsyncd.conf                    //文件不存在,需要自己创建

uid = root                           #运行进程的身份

gid = root                           #运行进程的组

address =192.168.0.64                       #监听IP

port =873                               #监听端口

hosts allow =192.168.0.0/24                        #允许同步客户端的IP地址,可以是网段,或者用*表示所有 192.168.1.0/24或192.168.1.0/255.255.255.0

use chroot = yes                               #是否囚牢,锁定家目录,rsync被黑之后,黑客无法再rsync运行的家目录之外创建文件,选项设置为yes

max connections =5                             #最大连接数

pid file =/var/run/rsyncd.pid          #进程PID,自动生成

lock file =/var/run/rsync.lock         #指max connectios参数的锁文件

log file =/var/log/rsyncd.log          #日志文件位置

motd file =/etc/rsyncd.motd

          #客户端登陆之后弹出的消息,需要创建

 

[wwwroot]                              #共享模块名称

path =/web-back/                      #路径

comment = used for web-data root    #描述

read only = false                                 #设置服务端文件读写权限

list = yes                                         #是否允许查看模块信息

auth users = rsyncuser                        #备份的用户,和系统用户无关

secrets file =/etc/rsync.passwd        #存放用户的密码文件,格式是  用户名:密码

创建提示文件和用户密码

uid = root

gid = root

address =192.168.0.64   

port =873 

hosts allow =192.168.0.0/24   

use chroot = yes  

max connections =5

pid file =/var/run/rsyncd.pid

lock file =/var/run/rsync.lock 

log file =/var/log/rsyncd.log 

motd file =/etc/rsyncd.motd

[wwwroot]  

 path =/web-back/  

comment = used for web-data root

read only = false

list = yes 

auth users = rsyncuser

secrets file =/etc/rsync.passwd

    

 

 

 

   

     

[root@XueGod64 ~]# echo "Welcome to Backup Server" > /etc/rsyncd.motd

[root@XueGod64 ~]# vim /etc/rsync.passwd

rsyncuser:password123

[root@XueGod64 ~]# chmod 600 /etc/rsync.passwd                 //目录权限必须是700或者600,否则的话身份验证会失效,设置rsync user的时候

启动服务测试

启动rsync与xinetd服务

systemctl start xinetd  #启动xinetd服务

systemctl enable xinetd  #将xinetd服务加入开机项

rsync --daemon --config=/etc/rsyncd.conf  #加载配置文件rsyncd.conf启动rsync服务

[root@xuegod64  ~]# rsync --daemon --config=/etc/rsyncd.conf

[root@xuegod64  ~]# netstat -antup | grep :873

tcp        0      0:::873                      :::*                        LISTEN      45089/xinetd

测试,rsync语法:   rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录

     [root@XueGod63 ~]# rsync -avz --delete  /var/www/html rsyncuser@192.168.0.64:/web.back/:wwwroot

Welcome to Backup Server

Password:       #输入密码password123

密码处理

新建一个文件保存好密码,然后在rsync命令中使用--password-file指定此文件即可

[root@xuegod63 ~]# vim /etc/rsync.passwd 

password123

[root@xuegod63 ~]# chmod 600  /etc/rsync.passwd 

[root@xuegod63 ~]#rsync -avz --delete  /var/www/html rsyncuser@192.168.0.64::wwwroot --password-file=/etc/rsync.passwd  

脚本实现定时自动备份

[root@xuegod63 ~]# vim autobackup.sh

#!/bin/bash

rsync -avz --delete  /var/www/html rsyncuser@192.168.0.64::wwwroot --password-file=/opt/passfile

[root@xuegod63 ~]# chmod +x autobackup.sh

[root@XueGod64 ~]# rm -rf /web-back/*                       //测试脚本

[root@xuegod63~]# sh autobackup.sh

[root@XueGod64 ~]# echo "01 3 * * * sh /root/autoback.sh &" >> /var/spool/cron/root

 

Rsync+sersync实现数据实时同步

 

1、 sersync+rsync原理

2、inotify和sersync同步的区别

3、 配置sersync+rsync实现实时同步

 

一台装sersync一台装rsync服务

Sersync服务器(数据源,源机器):192.168.0.63

Rsync服务器(备份端,目标机器):192.168.0.64

 

一、为什么要用rsync+sersync架构?

1、sersync是基于inotify开发的,类似于inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录

 

二、rsync+inotify-tools与rsync+sersync架构的区别?

1、rsync+inotify-tools

 a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

 b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低

    

2、rsync+sersync

 a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;

 b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

 

同步过程:

1.  在同步服务器上开启sersync服务,sersync负责监控配置路径中的文件系统事件变化;

2.  调用rsync命令把更新的文件同步到目标服务器;

3.  需要在主服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务)

 

同步过程和原理:

1.  用户实时的往sersync服务器上写入更新文件数据;

2.  此时需要在同步主服务器上配置sersync服务;

3.  在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;

通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器

 

原机器上开始部署sersync服务

 

1、下载sersync

在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件

wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz有时下载失败,所有要本地留存才行

 

上传到服务器 /opt  目录下

tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz

mv GNU-Linux-x86 sersync

 

2、配置sersync

[root@xuegod63 sersync]# cp confxml.xml confxml.xml.bak

更改优化sersync配置文件:

 修改24--28行

<sersync>

        <localpath watch="/var/www/html">    #本地同步目录

            <remote ip="192.168.0.64" name="wwwroot"/>   #rsync模块名称

 

修改31--34行,认证部分【rsync密码认证】

<rsync>

            <commonParams params="-artuz"/>

            <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>

            <userDefinedPort start="false" port="874"/><!-- port=874 -->

            <timeout start="false" time="100"/><!-- timeout=100 -->

            <ssh start="false"/>

开启sersync守护进程同步数据

/root/sersync/sersync2  -d -r -o  /opt/sersync/confxml.xml

 

 

 

测试

在63 /var/www/html/ 目录 增删改目录文件,

看64 /web-back 目录的变化

[root@xuegod64 web-back]# watch ls -l

 

设置sersync监控开机自动执行

 

vi /etc/rc.d/rc.local  #编辑,在最后添加一行

/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml  #设置开机自动运行脚本

 

添加脚本监控sersync是否正常运行

 

vi  /opt/check_sersync.sh  #编辑,添加以下代码

#!/bin/sh

sersync="/opt /sersync/sersync2"

confxml="/opt /sersync/confxml.xml"

status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)

if [ $status -eq 0 ];

then

$sersync -d -r -o $confxml &

else

exit 0;

fi

 

chmod +x /opt /check_sersync.sh  #添加脚本执行权限

 

 

把这个脚本加到任务计划,定期执行检测

 

 

补充: 多实例情况

 1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)

 2、根据不同的需求同步对应的实例文件

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml

rsync服务实践的更多相关文章

  1. CentOS7下rsync服务的基本详解和使用

    第1章 Rsync基本概述 1.1 什么是Rsync rsync是一款开源,快速,多功能的可实现增量的本地或远程的数据镜像同步备份的优秀工具.适用于多个平台.从软件名称可以看出来是远程同步的意思(re ...

  2. rsync 服务部署详解

    第1章 rsync 软件介绍 1.1 什么是rsync rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. http://www.samba.org/ft ...

  3. rsync服务精讲 -- 视频

    rsync服务 开源数据同步工具rsync视频(老男孩分享) 浏览网址 01-rsync基础介绍 http://oldboy.blog.51cto.com/2561410/1216550 11-rsy ...

  4. backup服务器之rsync服务

    backup服务器之rsync服务   rsync是开源的.快速的.多功能的可实现全量及增量的本地或远程数据同步备份的优秀工具.它拥有scp.cp的全量复制功能,同时比scp.cp命令更优秀.更强大. ...

  5. Rsync 服务部署与参数详解

    Rsync 简介 rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作系统平台. 传统的 ...

  6. day28 rsync服务端配置和客户端

    2. rsync守护进程部署方式 客户端---服务端 上厕所 4 rsync守护进程服务端配置: 第一个历程: 下载安装软件 rpm -qa|grep rsync yum install -y rsy ...

  7. 配置rsync服务,数据同步。

    这部分设计服务器端和客户端. [服务器端] 如果服务器没有安装rsync服务则使用yum安装rsync服务. yum install rsync 然后 vim /etc/xinetd.d/rsync ...

  8. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  9. rsync服务架设(数据同步|文件增量备份)

        近期由于业务需要,需要将两台服务器数据保持同步.方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究.以下是本文提纲,供参考: rsy ...

随机推荐

  1. NDK undefined reference to 'rand'

    NDK 编译 结果报错undefined reference to 'rand' 最怪异的是armeabi-v7a armeabi的情况下有问题 但是arm64-v8a编译正常,用网上说的添加头文件s ...

  2. web开发中会话跟踪的方法

    1. 什么是会话 会话是指一个终端用户(服务器)与交互系统(客户端)进行通讯的过程. 2. 什么是会话跟踪 对同一个用户对服务器的连续的请求和接受响应的监视.(将用户与同一用户发出的不同请求之间关联, ...

  3. 分布式任务队列 Celery —— 详解工作流

    目录 目录 前文列表 前言 任务签名 signature 偏函数 回调函数 Celery 工作流 group 任务组 chain 任务链 chord 复合任务 chunks 任务块 mapstarma ...

  4. nohup后台运行

    1.信息输出 nohup java -jar xxxx.jar & 2.信息不输出 nohup java -jar xxxx.jar >/dev/null 2>&1 &am ...

  5. ES6标准入门 第三章:变量的解构赋值

    解构赋值:从数组和对象中提取值,对变量进行赋值. 本质上,这种写法属于“匹配模式”:只要等号两边的模式相同,左边的变量就会被赋予对应的值. 1.数组的结解构赋值 基本用法 let [foo, [[ba ...

  6. spring(二) AOP注入

    AOP概念 l  AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 l  经典应用:事务管理.性能监视.安全检查.缓存 .日志等 l  Spring AOP使用纯Java实现,不需要专门的编译 ...

  7. Jmeter中各种函数

    ${__functionName(var1,var2,var3)} 无参数时,可以直接写成${__functionName} Tips: 如果参数包含逗号,那么一定要使用 \ 来转义,否则 JMete ...

  8. ugui拖拽

    整理了下以前写的 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE ...

  9. 链路聚合teaming(网卡绑定技术)2

    一.sentos7网卡绑定技术之teaming 这里介绍两种最常见的双网卡绑定模式: (1) roundrobin - 轮询模式 所有链路处于负载均衡状态,这种模式的特点增加了带宽,同时支持容错能力. ...

  10. Mac021--编辑软件

    一.思维导图MindNode 知乎Mac常用的思维导图:https://zhuanlan.zhihu.com/p/37768277 MindNode下载地址:https://macblcom.ctfi ...