1. 备份服务概念介绍:
Rsync是一款开源的、快速的、多功能的、可实现**全量**及**增量**的**本地**或**远程**数据同步备份的优秀工具
全量:将目录中所有数据都进行传输备份(可以包含已经备份过的数据)
增量:将目录中新增的数据进行传输备份(可以不用包含已经备份的数据,提高数据传输效率)
本地:相当于cp备份数据 将数据从一个目录备份到另一个目录(在一台主机上进行)
远程:相当于scp备份数据
scp命令用法:
scp -rp /oldboy/ 10.0.0.41:/
2. 备份服务原理概念:
1)增量备份数据原理
利用算法实现增量备份
1)根据checksum算法识别出增量数据,将增量数据进行传递
2)根据文件属性信息变化(修改时间/大小),进行数据传递
2) rsync守护进程方式备份数据原理
1)需要完成用户身份验证
2)需要将用户身份进行转换 rsync
3)需要将备份数据属主和属组进行改变 rsync
3. 备份服务搭建过程:
1. 服务端配置过程:
第一个历程:确认软件是否安装
yum install -y rsync
第二个历程:编写配置文件
cp /etc/rsyncd.conf /etc/rsyncd.conf.bak01
vim /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##
uid = rsync --- 指定转换用户身份/备份目录管理用户
gid = rsync --- 指定转换用户组身份/备份目录管理用户组
port = 873 --- 指定服务端口
fake super = yes --- 是否伪装成一个超级用户 (rsync)
保证文件权限信息不变/不再显示chgrp命令错误提示
use chroot = no --- 实现远程传输安全配置
max connections = 200 --- 最大连接数
timeout = 300 --- 连接超时时间
pid file = /var/run/rsyncd.pid --- 记录服务进程号码 只有服务启动才会有进程文件
lock file = /var/run/rsync.lock --- 控制最大连接数量
log file = /var/log/rsyncd.log --- rsync备份服务日志文件
ignore errors --- 忽略错误功能 保证传输数据效率
read only = false --- 针对于备份目录是否是只读
list = false --- ????
hosts allow = 172.16.1.0/24 --- 允许哪个主机地址或者网段可以和备份服务器建立连接 (白名单)
hosts deny = 0.0.0.0/32 --- 拒绝哪个主机地址或者网段可以和备份服务器建立连接 (黑名单)
auth users = rsync_backup --- 指定认证用户
secrets file = /etc/rsync.password --- 指定认证密码文件
[backup] --- 模块名称
comment = "backup dir by oldboy" --- 模块注释说明
path = /backup --- 指定备份目录路径
==================================================================
补充说明:rsync软件三种工作方式
1)本地备份数据工作方式 (类似cp命令功能)
2)远程备份数据工作方式 (类似scp命令功能)
3)守护进程备份数据方式 (服务端/客户端)
==================================================================
第三个历程:创建备份目录管理用户
创建一个虚拟用户
# useradd -M -s /sbin/nologin rsync
# id rsync
uid=1042(rsync) gid=1046(rsync) groups=1046(rsync)
第四个历程:创建一个备份数据目录
mkdir /backup
chown rsync.rsync /backup
第五个历程:创建一个访问认证文件
vim /etc/rsync.password
rsync_backup:oldboy123
chmod 600 /etc/rsync.password
第六个历程:启动备份服务程序
systemctl start rsyncd
# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 9114/rsync
tcp6 0 0 :::873 :::* LISTEN 9114/rsync
2. 客户端配置过程:
==========================================================================
rsync命令使用方法:
1)本地备份数据工作方式 (类似cp命令功能)
cp -r 备份数据信息 保存数据目录路径
rsync 参数 /oldboy/oldboy.txt /tmp
2)远程备份数据工作方式 (类似scp命令功能)
拉取数据:客户端将数据进行下载 <-- 备份服务器 还原
rsync 参数 远程主机地址或者名称:拉取的数据信息 本地保存数据目录信息
rsync 172.16.1.31:/oldboy/oldgirl.txt /tmp
推送数据:客户端将数据进行上传 --> 备份服务器 备份
rsync 参数 本地需要备份推送数据 远程主机地址或者名称:/备份数据路径信息
rsync /oldboy/oldboy.txt nfs01:/tmp
PS:rsync在推送目录数据时,目录后面有 / 和 没有/有本地区别
有 / 将目录下面数据内容进行推送传输
没有 / 将目录本身以及下面数据内容都进行推送传输
3)守护进程备份数据方式 (服务端/客户端)
拉取数据:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync 参数 认证用户名称@服务端主机名称或地址::模块信息 本地保存数据路径
rsync -r rsync_backup@172.16.1.41::backup /tmp/
推送数据:
rsync 参数 本地需要推送数据 认证用户名称@服务端主机名或地址::模块信息
rsync -r /oldboy rsync_backup@172.16.1.41::backup
==========================================================================
4. 备份服务常见问题:
01. 远程方式rsync 原理 借助SSH协议
[root@backup 19:14:39 ~]# rsync 172.16.1.31:/oldboy/oldgirl.txt /tmp
ssh: connect to host 172.16.1.31 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.2]
学生环境 和 讲师环境不一致
02.
[root@color~11:14:33]#rsync -r ~/01 10.0.0.41 /tmp
rsync: link_stat "/root/10.0.0.41" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
语法结构错误
[root@color~11:18:13]# rsync -r /01 rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
03.
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
认证用户名 或 密码出现问题
04.
rsync 172.16.1.31:/oldboy/oldgirl.txt /tmp
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:u9ckyJIp65sERvUFvyXl2ukmdzNLYIS3ARiEh+AKrJE.
ECDSA key fingerprint is MD5:93:02:47:a2:14:b9:f1:41:e5:ec:4c:28:68:bc:56:54.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '172.16.1.31' (ECDSA) to the list of known hosts.
root@172.16.1.31's password:
Permission denied, please try again.
root@172.16.1.31's password:
rsync: change_dir "/oldboy" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [Receiver=3.1.2]
rsync: [Receiver] write error: Broken pipe (32)
确认拉取或推送的数据是否存在
05.
root@sunhaoxu001 ~ 11:42:43]# rsync -avz rsync_backup@172.16.1.41::backup /backup/
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]
在编辑linux系统文件时, 如果使用了复制信息方法,需要从记事本中复制,不要从一些文档软件中复制
5. 备份服务命令参数:
-z, --compress(压缩)-----------compress file data during the transfer
将传输文件数据进行压缩处理
-v, --verbose-------------------increase verbosity
显示数据传输详细过程
-a, --archive-------------------archive mode; equals -rlptgoD
归档模式参数; -a参数等价于输入 -rlptgoD
-r, --recursive-----------------recurse into directories
远程传输目录信息
-l, --links---------------------copy symlinks as symlinks
是否可以将链接类型文件进行传输(没有什么意义)
-p, --perms---------------------preserve permissions
保持权限信息不变
-t, --times---------------------preserve modification times
保持修改时间不变
-o, --owner---------------------preserve owner (super-user only)
保持文件属主信息不变
-g, --group---------------------preserve group
保持文件属组信息不变
-q, --quiet---------------------suppress non-error messages
精简模式输出
-D------------------------------same as --devices --specials
是否可以将设备文件进行传输
-L, --copy-links----------------transform symlink into referent file/dir
将链接文件指向的源文件的真实数据进行传递
-P------------------------------same as --partial --progress
显示数据传输进度信息
-c, --checksum------------------skip based on checksum, not mod-time & size
打开校验开关,强制对文件传输进行校验
-R, --relative------------------use relative path names
使用相对路径信息
-b, --backup--------------------make backups(see--suffix&--backup-dir)
创建备份
-u, --update--------------------skip files that are newer on the receiver
仅仅进行更新,跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-d, --dirs----------------------transfer directories without recursing
不递归的转移目录
-k, --copy-dirlinks-------------transform symlink to a dir into referent dir
将指向目录的符号链接转换为引用目录
-K, --keep-dirlinks-------------treat symlinked dir on receiver as dir
将接收器上的符号链接目录视为目录
-H, --hard-links----------------preserve hard links
保留硬链接
-E, --executability-------------preserve the file's executability
保持文件的可执行性
-A, --acls----------------------preserve ACLs (implies --perms)
保存acl(暗指——perms)
-X, --xattrs--------------------preserve extended attributes
保存扩展属性
-O, --omit-dir-times------------omit directories from --times
省略——时间中的目录
-J, --omit-link-times-----------omit symlinks from --times
忽略——times中的符号链接
-S, --sparse--------------------handle sparse files efficiently
对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run-------------------perform a trial run with no changes made
现实哪些文件将被传输
-W, --whole-file----------------copy files whole (without delta-xfer algorithm)
拷贝文件,不进行增量检测
-x, --one-file-system-----------don't cross filesystem boundaries
不要跨越文件系统边界
-B, --block-size=SIZE-----------force a fixed checksum block-size
检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND---------------specify the remote shell to use
指定使用rsh、ssh方式进行数据同步
-C, --cvs-exclude---------------auto-ignore files the same way CVS does
使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
-I, --ignore-times--------------don't skip files that match in size and mod-time
不跳过那些有同样的时间和长度的文件
-T, --temp-dir=DIR--------------create temporary files in directory DIR
在DIR中创建临时文件
--rsync-path=PROGRAM------------specify the rsync to run on the remote machine
指定远程服务器上的rsync命令所在路径信息
--existing----------------------skip creating new files on receiver
仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--remove-source-files-----------sender removes synchronized files (non-dirs)
发送方删除同步文件(非dirs)
--del---------------------------an alias for --delete-during
删除期间的别名
--delete------------------------delete extraneous files from destination dirs
删除那些DST中SRC没有的文件
--delete-after------------------receiver deletes after transfer, not during
传输结束以后再删除
--delete-before-----------------receiver deletes before transfer, not during
接收端在传输之前删除,而不是传输期间
--delete-excluded---------------also delete excluded files from destination dirs
同样删除接收端那些被该选项指定排除的文件
--delete-during-----------------receiver deletes during the transfer
接收端在传输过程中删除
--delete-delay------------------find deletions during, delete after
查找删除期间,删除后
--ignore-errors-----------------delete even if there are I/O errors
及时出现IO错误也进行删除
--ignore-missing-args-----------ignore missing source args without error
忽略丢失的源参数没有错误
--delete-missing-args-----------delete missing source args from destination
从目标中删除丢失的源目标
--force-------------------------force deletion of directories even if not empty
强制删除目录,即使不为空
--max-delete=NUM----------------don't delete more than NUM files
最多删除NUM个文件
--progress----------------------show progress during transfer
显示备份过程
--numeric-ids-------------------don't map uid/gid values by user/group name
不将数字的用户和组ID匹配为用户名和组名
--size-only---------------------skip files that match in size
当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM-------------compare mod-times with reduced accuracy
决定文件是否时间相同时使用的时间戳窗口,默认为0
--compare-dest=DIR--------------also compare destination files relative to DIR
同样比较DIR中的文件来决定是否需要备份
--password-file=FILE------------read daemon-access password from FILE
从FILE中得到密码
--exclude=PATTERN---------------exclude files matching PATTERN
指定排除不需要传输的文件模式
--exclude-from=FILE-------------read exclude patterns from FILE
排除FILE中指定模式的文件
--include=PATTERN---------------don't exclude files matching PATTERN
指定不排除而需要传输的文件模式
--include-from=FILE-------------read include patterns from FILE
不排除FILE指定模式匹配的文件
--partial-----------------------keep partially transferred files
保留那些因故没有完全传输的文件,以是加快随后的再次传输
--address=ADDRESS---------------bind address for outgoing socket to daemon
绑定到特定的地址
--port=PORT---------------------specify double-colon alternate port number
指定其他的rsync服务端口
--blocking-io-------------------use blocking I/O for the remote shell
对远程shell使用阻塞IO
--stats-------------------------give some file-transfer stats
给出某些文件的传输状态
-8, --8-bit-output--------------leave high-bit chars unescaped in output
在输出中保留高位字符
-h, --human-readable------------output numbers in a human-readable format
以人类可读的格式输出数字
-i, --itemize-changes-----------output a change-summary for all updates
输出所有更新的更改摘要
-m, --prune-empty-dirs----------prune empty directory chains from the file-list
从文件列表中删除空的目录链
-M, --remote-option=OPTION------send OPTION to the remote side only
仅向远程端发送选项
-y, --fuzzy---------------------find similar file for basis if no dest file
如果没有dest档案,寻找相似的基础档案
-f, --filter=RULE---------------add a file-filtering RULE
添加文件过滤规则
-F------------------------------same as --filter='dir-merge /.rsync-filter'
与——filter='dir-merge /.rsync-filter'相同
-0, --from0---------------------all *-from/filter files are delimited by 0s
所有*-from/filter文件都用0分隔
-s, --protect-args--------------no space-splitting; only wildcard special-chars
没有空间分裂;只有通配符special-chars
--copy-unsafe-links-------------仅仅拷贝指向SRC路径目录树以外的链结
--safe-links--------------------忽略指向SRC路径目录树以外的链结
--timeout=TIME IP---------------超时时间,单位为秒
--config=FILE-------------------指定其他的配置文件,不使用默认的rsyncd.conf文件
--version-----------------------打印版本信息
--log-format=formAT-------------指定日志文件格式
--bwlimit=KBPS------------------限制I/O带宽
KBytes per second:k字节每秒
--max-size=SIZE-----------------don't transfer any file larger than SIZE
不要传输任何大于文件大小的文件
--min-size=SIZE-----------------don't transfer any file smaller than SIZE
不要传输任何小于文件大小的文件
--partial-dir=DIR---------------put a partially transferred file into DIR
将部分传输的文件放入DIR目录
--delay-updates-----------------put all updated files into place at transfer's end
将所有更新后的文件放在传输端
--usermap=STRING----------------custom username mapping
自定义用户名映射
--groupmap=STRING---------------custom groupname mapping
定制用户组名映射
--chown=USER:GROUP--------------simple username/groupname mapping
简单的用户名/ groupname映射
--timeout=SECONDS---------------set I/O timeout in seconds
设置I/O超时(以秒为单位)
--contimeout=SECONDS------------set daemon connection timeout in seconds
设置守护进程连接超时(以秒为单位)
--copy-dest=DIR-----------------and include copies of unchanged files
并包括未更改文件的副本
--link-dest=DIR-----------------hardlink to files in DIR when unchanged
当未更改时,硬链接到目录中的文件
--files-from=FILE---------------read list of source-file names from FILE
从文件中读取源文件名列表
--sockopts=OPTIONS--------------specify custom TCP options
指定自定义TCP选项
--out-format=FORMAT-------------output updates using the specified FORMAT
使用指定格式的输出更新
--log-file=FILE-----------------log what we're doing to the specified FILE
将我们正在做的事情记录到指定的文件中
--log-file-format=FMT-----------log updates using the specified FMT
使用指定的FMT进行日志更新
--list-only---------------------list the files instead of copying them
列出文件而不是复制它们
--bwlimit=RATE------------------limit socket I/O bandwidth
限制插座I/O带宽
--outbuf=N|L|B------------------set output buffering to None, Line, or Block
将输出缓冲设置为None、Line或Block
--write-batch=FILE--------------write a batched update to FILE
写一个批量更新到文件
--read-batch=FILE---------------read a batched update from FILE
从文件中读取批量更新
--protocol=NUM------------------force an older protocol version to be used
强制使用旧的协议版本
--iconv=CONVERT_SPEC------------request charset conversion of filenames
请求字符集转换文件名
--checksum-seed=NUM-------------set block/file checksum seed (advanced)
设置块/文件校验和种子(高级)
6. 备份服务企业应用:
1)备份服务多模块配置
需求:将开发人员 运维人员 数据库人员备份数据进行隔离
操作说明:
第一个历程:修改配置文件,添加多个模块信息
[sa_backup]
comment = "backup dir by oldboy"
path = /sa_backup
[dev_backup]
comment = "backup dir by oldboy"
path = /dev_backup
第二个历程:创建模块对应目录信息
mkdir /sa_backup /dev_backup
chown rsync.rsync /sa_backup /dev_backup
第三个历程:重启服务程序
systemctl restart rsyncd
2)备份服务模块目录中如何创建子目录
需求:将运维人员oldboy01数据 和 oldboy02数据进行区分
将不同主机数据进行区分
操作说明:
rsync -avz /etc/hosts rsync_backup@172.16.1.41::sa_backup/172.16.1.31/
PS: 默认不支持创建多级目录
3)实现排除指定数据信息进行备份
环境准备:
mkdir oldboy{01..03}
touch oldboy{01..03}/{a..c}.txt
├── oldboy01
│?? ├── a.txt
│?? ├── b.txt
│?? └── c.txt
├── oldboy02
│?? ├── a.txt
│?? ├── b.txt
│?? └── c.txt
└── oldboy03
├── a.txt
├── b.txt
└── c.txt
需求1:不想让oldboy01中的,a.txt文件进行备份
--exclude --- 排除指定数据不要进行传输同步
rsync -avz /oldboy/ --exclude=oldboy01/a.txt rsync_backup@172.16.1.41::sa_backup
需求2:需要排除多个文件或者目录数据信息时
第一种方法:直接在命令行添加
rsync -avz /oldboy/ --exclude=oldboy01/a.txt --exclude=oldboy02/b.txt --exclude=oldboy03/c.txt rsync_backup@172.16.1.41::sa_backup
第二种方法:利用--exclude-from --- 加载一个文件可以实现排除多个数据信息
第一个历程:编写一个排除文件
oldboy01/a.txt
oldboy02/b.txt
oldboy03/c.txt
PS:排除数据信息写成相对路径, 相对于传输目录而言
第二个历程:执行排除数据命令
rsync -avz /oldboy/ --exclude-from=/opt/exlude_file.txt rsync_backup@172.16.1.41::sa_backup
4)备份数据采用无差异同步数据 (慎用)
实现客户端和服务端数据一致
rsync -avz /oldboy/ --delete rsync_backup@172.16.1.41::sa_backup
意义:保证存储服务器用户数据信息和备份器数据信息高度一致
5)实现免交互自动备份数据功能
定时任务/实时同步
客户端操作:
第一个历程:创建密码文件
vim /etc/rsync.password
oldboy123
chmod 600 /etc/rsync.password
第二个历程:进行免密码传输数据测试
rsync -avz /oldboy/ rsync_backup@172.16.1.41::sa_backup --password-file=/etc/rsync.password
6)实现数据备份访问控制功能
hosts allow = 172.16.1.0/24 白名单:允许哪些主机或网段进行传输
hosts deny = 0.0.0.0/32 黑名单:拒绝内些主机或网段进行传输
访问控制原理:
参见图示:
企业应用: 只是选择一种名单即可, 不用白名单和黑名单同时存在
==========================================================================
备份范围全局配置和局部配置:
全局配置:配置文件中模块以外配置称为全局配置
影响所有模块功能
局部配置:配置文件中模块以内配置称为局部配置
只是影响指定模块功能 局部配置优先于全局配置
==========================================================================
7)数据传输限速功能
开发人员(家里) --- 互联网 -电信/联通/移动 100M- 路由器 ---- 网站备份服务器
网站用户 --- 互联网 ---- web服务器
--bwlimit=KBps limit socket I/O bandwidth
==========================================================================
补充:配置文件中list参数
当list参数配置为true时,客户端可以获取服务端所有模块列表信息
# rsync rsync_backup@172.16.1.41::
sa_backup "oldboy"
dev_backup "oldgirl"
==========================================================================
7. 备份服务常见问题:
01. 远程方式rsync 原理 借助SSH协议
[root@backup 19:14:39 ~]# rsync 172.16.1.31:/oldboy/oldgirl.txt /tmp
ssh: connect to host 172.16.1.31 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.2]
学生环境 和 讲师环境不一致
02.
[root@color~11:14:33]#rsync -r ~/01 10.0.0.41 /tmp
rsync: link_stat "/root/10.0.0.41" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
语法结构错误
[root@color~11:18:13]# rsync -r /01 rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
03.
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
认证用户名 或 密码出现问题
04.
rsync 172.16.1.31:/oldboy/oldgirl.txt /tmp
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:u9ckyJIp65sERvUFvyXl2ukmdzNLYIS3ARiEh+AKrJE.
ECDSA key fingerprint is MD5:93:02:47:a2:14:b9:f1:41:e5:ec:4c:28:68:bc:56:54.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '172.16.1.31' (ECDSA) to the list of known hosts.
root@172.16.1.31's password:
Permission denied, please try again.
root@172.16.1.31's password:
rsync: change_dir "/oldboy" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [Receiver=3.1.2]
rsync: [Receiver] write error: Broken pipe (32)
确认拉取或推送的数据是否存在
05.
root@sunhaoxu001 ~ 11:42:43]# rsync -avz rsync_backup@172.16.1.41::backup /backup/
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]
在编辑linux系统文件时, 如果使用了复制信息方法,需要从记事本中复制,不要从一些文档软件中复制