rsync详细部署过程及讲解

备份服务器讲解------rsync备份服务器(适用于unix linux windows)

##什么是rsync软件

是一款开源的,快速的,多功能,可实现全量及增量的本地或远程数据同步备份的优秀工具

 

全量及增量:

全量: 主机A有10G数据------>主机B接收10G数据

       主机A有10G又增加5G数据---->主机B又接收一遍10G数据和新增加的5G数据(效率太低)

 

增量:主机A有10G数据---->主机B接收10G数据

           (传之前会去对端看一下有没有之前传输的东西)主机A有10G又增加5G数据------>主机B本身有之前的10G数据继续接收新增加的5G数据(效率高,不用传输之前有的数据)

全量复制-----cpmv scp

增量复制-----rsync===可以替换cp  scp ls rm(1V4)

================================================

思考点:1)如何再windows上实现rsync部署#####

             2)研究xinetd服务,如何利用xinetd服务管理rsync进程####有帮助

 

================================================

 

提示信息:

man rsync:查看客户端

man rsyncd.conf:查看服务器配置

 

================================================

rsync===可以替换cp scp ls rm(1V4)【优于每个命令】

cp:

 

 

scp:远程复制

如果出现这个问题;

查看/etc/ssh  vim ssh_config /sshd_config

优化的时候禁止ROOT用户登陆了,所以要用普通用户传输,或者改为yes即可

/etc/ssh/sshd_config文件中的

                                PermitRootLogin prohibit-password

                               改为PermitRootLogin yes(或者删掉PermitRootLogin prohibit-password也可以,为了安全可以备份,注释掉就可以)

 

ls :查看

 

rm :删除

 

 

查看版本:rsync--version

rsync的特性:

1)支持拷贝普通文件与特殊文件如链接文件,设备等。

2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能:

###tar zcvf backup_1.tar.gz /opt/data -exclude=oldboy

3)可以做到保持文件或目录的权限/时间(访问时间,修改时间,创建时间)软硬链接,属主,属组,等所有属性均不改变-p

4)可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高(tar -N)

5)

a.可以使用rpc,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)

b.可以通过sorcket(进程方式)传输文件和数据(服务端和客户端)*******重点掌握

c.支持匿名的或认证(无需系统用户)的进程模式输出,可以实现方便安全的进行数据备份及镜像。

 

rsync的企业工作场景说明:

1)利用定时任务+rsync方式实现数据同步;

对于网站内部技术人员创建的数据文件,可以采取定时任务方式同步

 

2)利用实时任务+rsync方式实现数据同步;

对于网站外部访问用户传输的数据,可以采取实时同步方式

 

项目经验:

语法说明:

1)rsync:为同步的命令:

2)[OPTION...]为同步时的参数选项;

3)[USER@HOST....]为rsync同步的远程的链接用户和主机地址:USER表示数据传输 到远程服务器上,传输数据用户的身份信息

4)SRC为源,即待拷的分区/文件或目录等,和HOST之间用一个冒号:连接

远程服务器的数据资源(拉)

本地服务器的数据资源(推)

5)[DEST]为目的分区/文件或目录等。

表示本地目录或文件信息(拉)

表示远程目录或文件信息(推)

 

①:本地同步方式:rsync/etc/hosts /tmp/

      Local:  rsync [OPTION可选参数...] SRC同步的东西源... [DEST目的地] 

rsync /etc/hosts /opt/

 

目录带/和不带/的区别:#####

/tmp/:表示将tmp目录下的内容推送过去

/tmp:表示将tmp目录本身及下面的内容都推送过去

 

②:通过远程shell方式(远程隧道模式):

         Accessvia remote shell:

(拉)Pull:rsync [OPTION...] [USER(我以什么身份登陆到你的主机)@]HOST:SRC... [DEST目的地]

rsync -e 'ssh -p 52113' [email protected]:/tmp/shuai.txt /root/zhang_backup_shuai

(推)Push:rsync [OPTION...] SRC...[USER@]HOST:DEST

rsync -e 'ssh -p 52113' -rp /etc/[email protected]:/tmp

问题解决:

 

提示:如果是禁用了root用户登陆的话,用oldboy的身份传输,那么传输过去的文件必须都得传到oldboy用户下的目录中,因为root目录oldboy进不去

=========================================================

 

③:通过rsync daemon方式(无差异备份)rsync守护进程方式,会创建守护进程从后台等着提供服务)

       Accessvia rsync daemon:

注意:设定好服务端和客户端后,推拉都在客户端上进行!

Pull(拉的格式):

方式1)rsync [OPTION...参数] [认证的用户信息USER@]HOST::SRC接模块信息... [DEST]

rsync [email protected]::backup/oldboy.txt /tmp/

 

Push(推的格式):

方式1)rsync [OPTION...参数] SRC本地的数据信息... [USER认证用户信息@]HOST::DEST

rsync -avz /[email protected]::backup

rsync守护进程方式数据同步原理:

看图说明:

(1)所做的是把本地的文件推到rsync服务端backup模块里对应目录下

(2)当和服务端进行连接的时候,客户端还没到达服务端的时候前面有一扇门,这扇门可以做判断(去/etc/rsyncd.conf看认证用户(如果又这个用户,会继续让你说出口令(然后再去服务端/etc/rsync.password 看认证密码文件)

(3)验证成功以后root会映射成rsync用户,利用rsync用户进行传输文件

 

守护进程部署

1)服务端的部署(rsync)

①里程碑:确定有没有rsync软件(rpm -aq rsync)

 

②里程碑:安装rsync软件(yum install -yrsync)

 

③里程碑:编写配置文件(特点;编写好配置文件,后续操作步骤可以按照配置文件进行)

 

④里程碑:创建备份目录的管理用户:useradd -s /sbin/nologin -M rsync

 

⑤里程碑:创建安全认证文件:

              1)echo "rsync_backup:oldboy123">/etc/rsync.password(往存放密码的文件里追加密码)

              2) chmod 600 /etc/rsync.password  (因为秘密是可见的所以要修改权限)

 

⑥里程碑:创建备份目录:

              1)mkdir -p /backup

              2)chown -R rsync.rsync /backup/  (因为要被rsync访问所以要改属主,属组信息)

 

⑦里程碑:启动rsync服务:rsync --daemon(启动rsync服务)

              1)ps -ef |grep rsync(查看rsync进程)

              2)netstat -lntup|grep rsync(查看rsync端口,端口号是;TCP协议的873

至此服务端配置的操作完成!

 

2)客户端的部署(web)

①里程碑:确定有没有rsync软件(rpm -aq rsync)

 

②里程碑:安装rsync软件(yum install -yrsync)

 

③里程碑:创建安全认证文件:

1)echo"oldboy123">/etc/rsync.password(往存放密码的文件里追加密码)

2) chmod 600/etc/rsync.password   (因为密码是可见的所以要修改权限)

==================================================================================================

脚本解释

==================================================================================================

uid = rsync                     #用户     用户端的命令使用rsync访问共享目录(指定rsync服务运行的时候向磁盘进行读取和写入操作的操作者)

gid = rsync                     #用户组

usechroot = no   (安全相关)

max connections = 200          #最大连接数(最多连接200台服务器)

timeout = 300                          #超时参数(也就是超时时间,如果300秒内没有传输文件,就断开链接(不定义的话会导致已经连接且传输完数据的服务器一直占用位置,导致后面的服务器连接不进来)

pid file= /var/run/rsyncd.pid        #进程号对应的文件(直接查看这个文件就可以看到进程号:kill `cat/var/run/rsyncd.pid`

lock file = /var/run/rsync.lock        #锁文件(如果两台机器同时传输一个hosts(名字一样,内容不一样)文件到备份服务器,在文件到达备份服务器的时候我先给一个hosts上锁,直到这个文件传输完成,在解锁,让下一个hosts文件再开始传输进来,防止相同文件名在并行传输的时候出错误!(不能并行处理)

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

 

模块是什么:(模块名就相当于我只说个名字就可以概括这个模块下面的内容l)

 

[backup]                                  #模块名称  (下面放着的叫局部变量

path= /backup                       #共享文件(服务器提供访问的目录,备份的位置)

ignoreerrors                           #忽略错误程序(在传输的过程中有的传输错误的文件先忽略掉等都传输完了,在回过来处理之前传输错误的文件)

readonly = false                    #可读写(只读为假)*****

list= false                                #不让列表(相当于ls)

hostsallow = 172.16.1.0/24              #允许的网段(白名单,准许访问rsync服务器的客户范围)

hostsdeny = 0.0.0.0/32                          #拒接的网段(黑名单,禁止访问rsync服务器的客户范围)

authusers = rsync_backup                     #连接的虚拟用户,非系统用户

secretsfile = /etc/rsync.password          #认证用户的认证账号密码文件

comment = “backup dirby oldboy”         #注释备注信息

#rsync_config_______end

 

==================================================================================================

参数解释

==================================================================================================

srync命令参数解释:(红色常用,蓝色为组合,黄色了解)

保持同步目录及文件属性:这里的-avzP相当于-vzrtopgDIP(还多了DI功能,生产环境常用的参数选项为-azvP或-vzrtopgP,如果时放入脚本中,也可以把-v和-P去掉,这里的--progress可哟用-P代替)

-v, --verbose 详细模式输出。传输时的数据等信息

-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。

--port=PORT 指定其他的rsync服务端口。、

--bwlimit=KBPS 限制I/O带宽,KBytes per second。(企业案例:某DBA做数据同步,带宽占满,导致用户无法访问网站(34天10节讲的案例)

-z, --compress 对备份的文件在传输时进行压缩处理提高传输效率。(局域网可以不用压缩)

-P 等同于 --partial,(显示同步的过程及传输时的进度等信息)

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。(一下就是包揽的参数)

-r, --recursive 对子目录以递归模式处理。

-l, --links 保留软链结。

-p, --perms 保持文件权限。

-o, --owner 保持文件属主信息。

-g, --group 保持文件属组信息。

-D, --devices 保持设备文件信息。

-t, --times 保持文件时间信息。

==================================================================================================

-q, --quiet 精简输出模式。

-c, --checksum 打开校验开关,强制对文件传输进行校验。

-R, --relative 使用相对路径信息。

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。

--backup-dir 将备份文件(如~filename)存放在在目录下。

-suffix=SUFFIX 定义备份文件前缀。

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

-L, --copy-links 想对待常规文件一样处理软链结。

--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。

--safe-links 忽略指向SRC路径目录树以外的链结。

-H, --hard-links 保留硬链结。

-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。

-n, --dry-run现实哪些文件将被传输。

-w, --whole-file 拷贝文件,不进行增量检测。

-x, --one-file-system 不要跨越文件系统边界。

-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。

--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。

-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。

--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。

--delete 删除那些DST中SRC没有的文件。

--delete-excluded 同样删除接收端那些被该选项指定排除的文件。

--delete-after 传输结束以后再删除。

--ignore-errors 及时出现IO错误也进行删除。

--max-delete=NUM 最多删除NUM个文件。

--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。

--force 强制删除目录,即使不为空。

--numeric-ids 不将数字的用户和组id匹配为用户名和组名。

--timeout=time ip超时时间,单位为秒。

-I, --ignore-times 不跳过那些有同样的时间和长度的文件。

--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。

--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。

-T --temp-dir=DIR 在DIR中创建临时文件。

--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。

--progress 显示备份过程。

--exclude=PATTERN 指定排除不需要传输的文件模式。

--include=PATTERN 指定不排除而需要传输的文件模式。

--exclude-from=FILE 排除FILE中指定模式的文件。

--include-from=FILE 不排除FILE指定模式匹配的文件。

--version 打印版本信息。

--address 绑定到特定的地址。

--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。

--blocking-io 对远程shell使用阻塞IO。

-stats 给出某些文件的传输状态。

--progress 在传输时现实传输过程。

--log-format=formAT 指定日志文件格式。

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

 

 

进程杀手三人组:

kill     : 进程pid号 (ps -ef|grep rsync查看一些pid号,然后kill 1822删除进程,会有提示说明(简便方法:kill `cat /var/run/rsyncd.pid`

killall:进程名字  killall rsync,会有提示说明)

pkill  :进程名字 (模糊杀手,要小心~)   (pkill rsync,不会有提示说明)

断开后Xshell连接不上主机了,到主机上查看sshd进程发现进程被杀死!

重新启动SSHD服务后Xshell连接上了

pkill缺点总结:指定的杀死sh进程把sshd进程杀掉了,原因是它杀的时候搜索到的是只要包括sh字符的进程都会杀掉!要小心使用,直接全名指定进程名!

 

复活进程:进程名+--daemon(守护进程)(rsync --daemon

================================================

rsync服务的扩展功能实践

================================================

第一个扩展:守护进程多模块功能配置:

vim 扩展操作,命令行模式

复制功能:10,12copy13(在目标行的前一行写入内容)

移动功能:10,12copy13

1、里程碑:编写配置文件配置多模块

vim /etc/rsyncd.conf

       18[backup]

      19 comment= "backup dir by oldboy"

      20 path =/backup

      21 [nfsbackup]   (添加一个新的模块)

      22 comment = "backup dir by oldboy"

      23 path =/nfsbackup

2、里程碑:重启rsync服务

killall rsync

rsync --daemon

3、创建新模块的备份目录

mkdir -p /nfsbackup

chown -R rsync.rsync

4、实践测试

 

rsync -avzP /etc [email protected]::nfsbackup--password-file=/etc/rsync.password

 

第二个扩展:进行排除测试

1)使用到的参数:--exclude

###rsync -avz --exclude=a --exclude=b --exclude=c/2.txt /home/oldboy/oldboy/ [email protected]::backup--password-file=/etc/rsync.password

2)使用到的参数:--exclude-from=文件

先建立一个文件,把排除的信息写入进去,不得有空格,空行,

###rsync -avz --exclude-from=/oldboy/paichu.txt /oldboy/ [email protected]::backup--password-file=/etc/rsync.password

第二种方法:--exclude={a..b}

###rsync -avz --exclude={a..c} /oldboy/[email protected]::backup --password-file=/etc/rsync.password

第三种方法:更改服务端的rsync模块配置脚本(更改完后杀死进程,重启rsync服务)

在backup里添加的只有backup模块可以使用,下面的nfsbackup模块不可以(这被称为局部变量)

第三个扩展:创建备份目录(各个部分都要往backup目录里发文件,入如果不管理会很杂乱)

1)rsync -avz /oldboy/[email protected]::backup/dev --password-file=/etc/rsync.password (直接在传输过去的时候创建dev目录)

2)rsync -avz /oldboy/[email protected]::backup/sa  --password-file=/etc/rsync.password   (直接在传输过去的时候创建sa目录)

3)rsync -avz /oldboy/[email protected]::backup/dba --password-file=/etc/rsync.password (直接在传输过去的时候创建dba目录)

说明:利用rsync守护进程方式创建备份目录,只能穿件一级目录,不能创建多级目录!

 

第四个扩展:访问控制配置

rsync -avz /oldboy/ rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password

======================================================

脚本配置文件里:

hosts allow = 172.16.1.0/24 (允许172.16.1.0/24这个地址)

hosts deny = 0.0.0.0/32 (阻止0.0.0.0/32这个地址,剩下的都不管,相对于白名单来说黑名单权限要大的多!)

说明:白名单和黑名单同时存在是,权限为大者优先使用,(在rsyncd.conf配置文件中,白名单和黑名单的功能选择其一使用)

解决方法:

hosts allow = 172.16.1.0/24

###hosts deny = 0.0.0.0/32  (注释掉单独使用一个名单就可以了)

 

第五个扩展:无差异同步配置

无差异同步解释:   本地 苹果          远端 也得有一个苹果

                   本地 把苹果扔了    远端 也得把苹果扔了

在什么场合使用:

说明:使用无差异同步时要小心!!!

企业面试题:有一个目录(文件),存储空间占用了1T,请将这个目录(文件)下面的内容快速情空?

答:目录1)rsync-avz --delete /null/ (空目录)172.16.1.41:/data_1T/(目标目录)

       文件2)rsync -avz --delete /null/null.txt(空文件)172.16.1.41:/data_1T/file_1T.txt(目标文件)

 

第六个扩展:列表功能配置(建议不要轻易开启!)

说明:将配置文件中的所有模块都在客户端显示出来,通过模块里的列表功能:list =false---->(false:假,true:真)

测试:将服务端的脚步配置文件中把list= false改写成list = true

警告!!安全隐患:

如果有人想搞破环,通过上面列出来的模块信息,可以通过模块信息加上猜测的密码(一旦猜对了),直接可以使用--delete命令加空(null)文件,对其nfsbackup目录直接清空!

你可能感兴趣的:(Linux自动化运维)