rsync部分
目录
内容概述
1.备份相关
-1.1 什么叫备份?
-1.2 我们为什么要备份?
-1.3 可以不做备份吗?
-1.4 备份所使用的工具
-1.5 补充scp命令相关内容
-1.6 生产场景备份方案
2.rsync服务
-2.1 rsync服务介绍
-2.2 rsync的特性
3.rsync传输模式
-3.1 本地方式
-3.2 远程方式
-3.3 守护进程模式
-3.4 客户端推拉数据方法
-3.5 常见报错以及处理
4.rsync应用场景
-4.1 备份方式的分类以及区别
-4.2 rsync的传输方式
-4.3 针对传输方式的问题引出大量服务器备份方案
内容详细
1.备份相关
-
1.1 什么叫备份?
服务器每时每刻都会产生数据,对于一家互联网公司,数据以及代码是公司最宝贵以及核心的资产,因此需要把数据保管好.
备份就是把重要的数据或者文件复制一份保存到另一个地方,实现不同主机之间的数据同步.
-
1.2 我们为什么要备份?
1.因为数据对公司来说真的非常重要,关系到公司的存亡,所以必须要保护好数据.
2.一旦遭遇突发情况,数据丢失,备份就起到了恢复数据的作用.
-
1.3 可以不做备份吗?
数据也分重要的和不重要的
1.对于重要的数据我们一定要备份!
2.对于不重要的数据我们可以选择不备份,或者只备份一部分.
-
1.4 备份所使用的工具
1.本地备份 cp # 不推荐,也没有意义,一旦硬盘损坏,数据还是会丢失(如果硬盘做了raid磁盘阵列的话还是可以的)
2.远程备份 scp rsync # 远程备份才是经常使用的备份方式
-
1.5 补充scp命令相关内容
1.scp 命令是linux系统下基于 ssh 登录进行的安全远程文件拷贝命令.
scp是加密的
用法:
1.)复制本地文件到远程目录: # scp [选项] 本地文件 root@域名/ip地址: 文件路径
2.)远程目录复制到本地目录: # scp [选项] root@root@域名/ip地址: 文件路径 本地路径
2.scp命令选项:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限.
-q: 不显示传输进度条.
-r: 递归复制整个目录.
-v:详细方式显示输出.scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题.
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh.
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh.
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh.
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位.
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式.
-P port:注意是大写的P, port是指定数据传输用到的端口号 .
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项.
-
1.6 生产场景备份方案
1.借助cron+rsync把所有客户服务器数据同步到备份服务器.
2.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案.
3.通过本地打包备份,然后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果.
4.定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失.
5.实时同步,解决存储服务器等的单点问题.
2.rsync服务
-
2.1 rsync服务介绍
1.rsync简介
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝.
2.rsync监听端口: 873
3.rsync运行模式: c/s
4.rsync可以实现不同主机之间的数据同步,并且支持全量和增量备份.
-
2.2 rsync的特性
1.rsync本身不对数据加密,需要配合ssh,rcp,rsh等方式配合传输文件.
2.支持拷贝特殊文件,如连接文件、设备等.
3.可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能.
4.可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变.
5.可以通过socket(进程方式)传输文件和数据(服务端和客户端).
6.支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像.
3.rsync传输模式
-
3.1 本地方式
1.语法
rsync [OPTION]... SRC [SRC]... DEST
rsync [选项](中括号括起来代表可写可不写) 源文件 目标地址
# rsync -avz /etc/passwd /tmp
# 类似于cp命令,但是cp命令是全量复制,并且会修改文件属性,rsync是增量复制,会保证文件属性不变.
-
3.2 远程方式
1.pull拉取数据命令
语法:
rsync [OPTION]... [USER@]HOST:SRC [DEST]
# rsync [选项] 远程主机系统用户@远程主机域名/IP地址:路径 本地路径
# rsync -avz root@192.168.174.26:/tmp/shell007 /tmp
2.push推送数据命令
语法:
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
# 语法:rsync [选项] 源文件路径 远程主机:保存路径
# rsync -avz /etc/passwd root@192.168.174.26:/tmp
ps: rsync -avz root@172.16.1.41:/tmp/ ./a/
rsync -avz root@172.16.1.41:/tmp/ ./a
指定目录"/a"时,指的是"/a"这个目录及这个目录下的文件.而指定目录"/a/"时,指的是"/a/"目录下的文件但不包括目录.
-
3.3 守护进程模式
1.为什么要使用守护进程模式?
# rsync传输时,要用到系统用户和用户的密码,不够安全.
# 使用普通用户会遇到权限的问题.
2.守护进程传输模式的语法详解:
# pull拉取命令
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
# 1.拉取rsync备份服务的"backup模块"数据至本地/mnt目录
# rsync -avz rsync_backup@192.172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password
rsync # 命令
[OPTION...] # 选项
[USER@] # 远程主机用户(虚拟用户)
HOST:: # 远程主机地址
SRC... # 远程主机模块(不是目录)
[DEST] # 将远程主机数据备份至本地什么位置
# push命令
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
#2.将本地/mnt目录推送至rsync备份服务器的backup模块
# rsync -avz /mnt rsync_backup@192.172.16.1.41::backup/ --password-file=/etc/rsync.password
rsync # 命令
[OPTION...] # 选项
SRC... # 远程主机模块(不是目录)
[USER@] # 远程主机用户(虚拟用户)
HOST:: # 远程主机地址
[DEST] # 将远程主机模块备份至本地什么位置
3.守护进程模式实操:
# 准备主机:(均安装rsync)
web01----->rsync客户端
rsync----->rsync服务端
# 确保防火墙和selinux已经关闭 必须关!!!
# 在服务端创建一个用户
useradd -M -s /sbin/nologin rsync # 不登录,不创建用户家目录.
# 创建密码文件
echo "rsync_backup:666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd # 这一步千万不能忘...
# 服务端修改配置文件
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboy backup!
path = /backup
# 创建备份目录
mkdir /backup
# 为目录设置用户以及用户组
chown -R rsync.rsync /backup/
这里我们解释一下rsync用户和rsync_backup用户
rsync是启动rsync服务的用户,而rsync_backup用户是传输文件的用户(其实是一个虚拟用户)
# 启动服务
systemctl start rsyncd # systemctl enable --now rsyncd 设置开机自启
# 验证服务是否启动
netstat -lntp | grep 873
ps -ef | grep rsync
-
3.4 客户端推拉数据方法
rsync服务端启动后,客户端就可以进行数据的推拉了
1.自己输入密码
rsync -avz init.sh rsync_backup@rsync::backup
Password: 666
sending incremental file list
init.sh
sent 1,455 bytes received 43 bytes 2,996.00 bytes/sec
total size is 4,168 speedup is 2.78
2.设置文件密码,运行时读取密码
# 客户端创建密码文件
echo "666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
# 使用参数进行传输
rsync -avz init.sh rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
sending incremental file list
init.sh
sent 1,455 bytes received 43 bytes 2,996.00 bytes/sec
total size is 4,168 speedup is 2.78
3.添加环境变量
export RSYNC_PASSWORD=666 #临时添加
rsync -avz init.sh rsync_backup@rsync::backup
sending incremental file list
sent 55 bytes received 20 bytes 50.00 bytes/sec
total size is 194 speedup is 2.59
-
3.5 常见报错以及处理
1.报错内容:
rsync -avz 1.txt rsync_backu@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
# 原因:
1.)虚拟用户的用户名或者密码错误
2.)服务端密码文件权限不为600
2.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
# 原因:客户端密码文件权限不是600
3.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::backu
@ERROR: Unknown module 'backu'
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
# 原因:模块名字错误
4.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
# 原因:双冒号后面跟的是模块名字,而不是目录名字,不要加/
5.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:防火墙开启,没有配置防火墙规则
firewall-cmd --add-port=873/tcp
success
6.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
rewriteip.sh
rsync: mkstemp ".rewriteip.sh.vx4Cry" (in backup) failed: Permission denied (13)
sent 207 bytes received 128 bytes 44.67 bytes/sec
total size is 194 speedup is 0.58
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
# 原因:selinux没有关闭
7.报错内容:
rsync -avz 1.txt rsync_backup@172.16.1.41::backup
sending incremental file list
rsync: delete of stat xattr failed for "rewriteip.sh" (in backup): Permission denied (13)
sent 55 bytes received 114 bytes 338.00 bytes/sec
total size is 194 speedup is 1.15
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
# 原因:服务端备份目录权限不是rsync
8.报错内容
rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
# 原因:服务端服务没有启动
9.报错内容
rsync -avz 1.txt rsync_backup@10.0.0.41::backup
sending incremental file list
rsync: read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.2]
# 原因:服务端配置错误,导致启动问题
4.rsync应用场景
-
4.1 备份方式的分类以及区别
1.全量备份
将数据完整的复制一份保留下来. # 客户端有啥,就把啥全都推给服务端(不管服务端有没有,全推过去)
2.增量备份
只推送发生变化的数据备份(对上一次备份新增的数据进行备份) # 服务端缺啥,客户端就把啥推过去(增量备份之间一环套一环,一个环节出问题都会导致数据恢复失败.)
-
4.2 rsync的传输方式
push 推:
客户端将数据从本地推送至服务端
pull 拉:
客户端将数据从服务端拉取到本地
传输存在的问题:
1.推的问题:当客户端服务器数量过多,容易造成数据推送缓慢
2.拉的问题:当客户端服务器数量过多,容易造成服务端压力过大
-
4.3 针对传输方式的问题引出大量服务器备份方案
如果客户端服务器很多,怎么快速有效的缓解推拉存在的额问题?
# 我们来设想一下,一个老师管理了两个班,80名学生,如果她要一位一位同学收作业,她要收80次,很麻烦.但如果她指定了两位课代表,收齐作业交给她,这样就可以缓解她的压力.
同理,我们可以将客户端的数据推送至多个备份源,服务端再从多个备份源拉取数据.
# 异地备份实现思路
两个机房通过一个中间的云文件服务器进行实时数据同步