备份服务器讲解------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目录直接清空!