Linux 架构篇 知识心得03 rsync备份

Rsync 备份服务

一.备份

1.什么是备份?

备份就是把重要的数据或文件再次复制一份保存起来(给源文件增加一个副本)

2.为什么要备份?

数据很重要!!!
出现故障之后,需要恢复数据(软件服务出现问题几率很小,80%都是人为故障)

3.能不能不做备份?

对于不重要的数据,我们可以不做备份
对于不必要的数据可以选择定时清理

4.备份常用工具?

本地复制  cp
远程传输  scp  rsync

5.scp命令及参数

什么是scp?
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

选项参数:
-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、复制本地文件到远程目录
    scp /backup/dir/8.txt root@172.16.1.7:/tmp/
    
    分段解释:
    scp                            #命令
    /backup/dir/8.txt  		      #本地文件
    root                        #远端服务器的的系统用户    
    @                           #分隔符,以哪个用户身份登录服务器
    172.16.1.7                  #远程服务器的ip或域名
    :                           #分隔符,指定服务器的里面所在的目录
    /tmp				       #复制到远程服务器的目录地址
 
    2、复制本地文件到远程目录下,并重命名
    scp /backup/dir/8.txt root@172.16.1.7:/tmp/88.txt

    分段解释:
    scp                            #命令
    /backup/dir/8.txt		      #本地文件目录
    root                        #远端服务器的的系统用户    
    @                           #分隔符,以哪个用户身份登录服务器
    172.16.1.7                  #远程服务器的ip或域名
    :                           #分隔符,指定服务器的里面所在的目录
    /tmp				       #复制到远程服务器的目录地址并重命名88.txt
 
二、从本地复制目录到远程目录下
     scp -r /backup/dir/ root@172.16.1.7:/tmp/dir2
    
    分段解释:
    scp                           #命令
    -r							#递归复制整个目录
    /backup/dir/8.txt  		      #本地文件
    root                        #远端服务器的的系统用户    
    @                           #分隔符,以哪个用户身份登录服务器
    172.16.1.7                  #远程服务器的ip或域名
    :                           #分隔符,指定服务器的里面所在的目录
    /tmp/dir2				   #复制到远程服务器的目录地址(也可以重命名)
    
三、从远程复制到本地
	#文件类型
    [root@web01 tmp]# scp root@172.16.1.21:/backup/dir/8.txt /tmp/
    #目录类型
    [root@web01 tmp]# scp -r root@172.16.1.21:/backup/dir /tmp/

二、rsync服务概念

1.简介

	rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
 
rsync官方地址:https://rsync.samba.org/
rsync监听端口:873
rsync运行模式:C/S   client/server
 
rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量

2.rsync特性

支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rpc、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。

3.生产场景的备份方案

1.借助cron+rsync把所有客户服务器数据同步到备份服务器。
2.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
3.通过本地打包备份,然后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。
4.定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
5.实时同步,解决存储服务器等的单点问题。

4.rsync如何实现的备份(备份方式)

1)全备:将数据完全的备份下来

Linux 架构篇 知识心得03 rsync备份

2)增量备份:备份上一次备份后新增的数据

Linux 架构篇 知识心得03 rsync备份

5.rsync的传输方式

1)push 推 (上传)

客户端将数据从本地推送至服务端

Linux 架构篇 知识心得03 rsync备份

2)pull 拉取 (下载)

客户端将数据从服务端拉取到本地

Linux 架构篇 知识心得03 rsync备份

6.大量服务器备份的场景

解决方案:多server备份(类似于交作业,班长统一收班级的作业,然后再交给老师的形式)

Linux 架构篇 知识心得03 rsync备份

7.异地备份实现思路

实现步骤:客户端推送至本地备份(上传)->本地备份同步至云端 ->客户端拉取云端备份数据(下载)

Linux 架构篇 知识心得03 rsync备份

三、rsync传输模式

1.传输模式

1.本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
2.远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份
3.守护进程方式(客户端和服务端)

2.本地方式

# 1.本地方式
#语法:
rsync [OPTION]... SRC [SRC]... DEST
命令    选项         源文件    目标地址
 
#语法实例
[root@web01 ~]# rsync -avz   1.txt  /tmp/
                命令   选项  源文件  目标目录 
                
#类似于cp,但是cp是全量复制并且会修改文件属性,rsync是增量复制,会保证文件属性不变

3.远程方式

2. 远程方式

2.1 pull 拉取数据的命令
#语法:
rsync [OPTION]... [USER@]HOST:SRC [DEST]
 
#实例:将远程端/tmp/1.txt备份到本机
[root@web01 ~]# rsync -avz root@172.16.1.7:/tmp/1.txt ./
 
#语法拆分
rsync           #命令
-avz            #选项
root            #远端服务器的系统用户
@               #分隔符
172.16.1.7     #远程主机的地址
:               #分隔符,代表主机下的....
/tmp/1.txt      #远程主机的目录及文件
./              #当前主机的当前目录

2.2 push 推送数据的命令
#语法
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
 
#实例 将本地端当前目录下1.txt备份到远程端的/tmp目录下
[root@web01 ~]# rsync -avz ./1.txt root@172.16.1.7:/tmp
 
#语法拆分
rsync               #命令
-avz                #选项
1.txt               #当前服务器的本地文件
root                #远端服务器的系统用户
@                   #分隔符
172.16.1.7         #远端主机的IP地址
:                   #分隔符,代表主机下的....
/tmp                #远程主机的目录

4.守护进程传输模式

1)为什么要使用守护进程模式
    1.rsync传输时,使用的是系统用户和系统用户的密码,非常的不安全
    2.使用普通用又会出现权限问题
2)守护进程传输模式语法
    ###################push 推送语法###########################
    # 语法:
    rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

    #实例:
    [root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::backup

    #语法拆分
    rsync               #命令 
    -avz                #选项
    1.txt               #当前服务器的文件
    rsync_backup        #rsync服务端配置的虚拟用户
    @                   #分隔符
    172.16.1.7         #远程主机IP地址
    ::backup            #模块名

    #推送过程中服务端目录必须是服务端配置的启动用户权限
    
    ###################pull 拉取语法###########################
    
    #语法:
    rsync [OPTION]... [USER@]HOST::SRC [DEST]

    #示例:
    [root@web01 ~]# rsync -avz rsync_backup@172.16.1.7::backup /tmp/

    #语法拆分:
    rsync               #命令
    -avz                #选项
    rsync_backup        #服务端定义的虚拟用户
    @                   #分隔符
    172.16.1.7         #远程主机IP地址
    ::backup            #模块名字
    /tmp/               #当前主机的目录

    #拉取过程中服务端目录不用设置rsync用户权限
    

5.注意事项

注意事项
    1)[root@web01 ~]# rsync -avz root@172.16.1.7:/tmp/1.txt ./8.txt    #将远程服务器1.txt文件全量备份到当前目录下并重命名为8.txt
    2)[root@web01 ~]# rsync -avz root@172.16.1.7:/tmp/ ./a/    #将远程服务器tmp目录全量备份到当前目录下并重命名为a
    3)指定目录"/a"时,意思是"/a"这个目录及这个目录下的文件。指定目录"/a/"时,意思是"/a/"目录下的文件不包括目录

四、守护进程模式实践

1.环境准备

IP	主机角色
web01	10.0.0.7	rsync客户端
rsync	10.0.0.21	rsync服务端

注意:
1、关闭防护墙(firewalld) 
	systemctl stop firewalld
2、关闭selinux
	vim /etc/sysconfig/selinux (enforcing > disabled)
3、安装rsync (客户端&服务端同时安装)
	yum install -y rsync

2.服务端rsync准备

服务端创建流程如下:
1、配置文件  # vim /etc/rsyncd.conf
uid = rsync                         #启动服务的用户id
gid = rsync                         #启动服务用户的组id
port = 873                          #服务默认监听端口
fake super = yes                    #无须使用root用户启动
use chroot = no                     #安全机制
max connections = 200               #最大连接数
timeout = 600                       #超时时间
ignore errors                       #忽略错误
read only = false                   #只读权限
list = false                        #查看模块列表
auth users = rsync_backup            #定义虚拟用户(rsync传输过程使用的用户)
secrets file = /etc/rsync.passwd     #定义虚拟用户的密码
log file = /var/log/rsyncd.log       #日志文件
#####################################
[backup]                                   #模块
comment = welcome to oldboyedu backup!     #模块的备注
path = /backup                             #服务器真实的路径

#模块名称阔以改动,也可以增加多个模块在配置文件中

2、给定一个上传与下载用户
[root@rsync backup]# useradd rsync -r -s /sbin/nologin -M

3、创建密码文件+授权
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

4、创建目录
mkdir /backup

5、设置目录用户及用户组
[root@rsync backup]# chown -R rsync.rsync /backup/
rsync --->  启动rsyncd服务的用户	
rsync_backup ---> 传输文件的用户
服务端   ->  客户端

6、启动rsync服务
[root@rsync backup]# systemctl start rsyncd

3.客户端rsync准备

客户端同步
1、输入密码的方式
	[root@web01 ~]# rsync -avz init.sh rsync_backup@rsync::backup

2、无密码同步
	a、先将密码写入本机
        echo '123456' > /etc/rsync.passwd
        chmod 600 /etc/rsync.passwd

	b、使用同步
		[root@web01 ~]# rsync -avz init.sh rsync_backup@rsync::backup --password-file=/etc/rsync.passwd

3、环境变量方式进入
    [root@web01 ~]# export RSYNC_PASSWORD=123456  #临时添加
    [root@web01 ~]# rsync -avz init.sh rsync_backup@rsync::backup

五、rsync常用参数

1.常用参数

-a           #归档模式传输, 等于-tropgDl    -t -r -o -p -g -D -l
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-P           #显示同步的过程及传输时的进度等信息
-D           #保持设备文件信息
-L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不需要传输的文件
--exclude-from=file #排除不需要的文件
--bwlimit=100       #限速传输
--partial           #断点续传
--delete            #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件
--port  #指定端口传输

2.--exclude-from=file 排除不需要的文件(文件中)

#创建多个文件
[root@web01 tmp]# touch {1..10}.txt
[root@web01 tmp]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  2 18:43 10.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 1.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 2.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 3.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 4.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 5.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 6.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 7.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 8.txt
-rw-r--r--. 1 root root 0 Aug  2 18:43 9.txt
 
#编辑文件写入要排除的文件名字
[root@web01 ~]# vim 10.txt 
2.txt
3.txt
7.txt
 
#指定排除文件推送内容
[root@web01 tmp]# rsync -avzP /tmp/ rsync_backup@rsync::backup --exclude-from=10.txt 
Password: 
sending incremental file list
./
1.txt
10.txt
4.txt
5.txt
6.txt
8.txt
9.txt

#发现没有传输10.txt中写入名字的文件

3.--bwlimit=100 限速传输

#创建一个1G的文件
[root@web01 ~]# dd if=/dev/zero of=./1.txt bs=10M count=100
 
#限速1M每秒推送
[root@web01 tmp]# rsync -avzP /tmp/2.txt rsync_backup@rsync::backup 
Password: 
sending incremental file list
2.txt
  1,048,576,000 100%   80.35MB/s    0:00:12 (xfr#1, to-chk=0/1)
 
#限速10M每秒推送
[root@web01 tmp]# rsync -avzP /tmp/2.txt rsync_backup@rsync::backup --bwlimit=10
Password: 
sending incremental file list
2.txt
  1,048,576,000 100%   10.64MB/s    0:01:34 (xfr#1, to-chk=0/1)

4.--delete 数据一致 (无差异同步)

#查看客户端数据
[root@web01 tmp]# ll
total 4
-rw-r--r--. 1 root root 19 Aug  2 18:44 10.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 1.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 2.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 3.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 4.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 5.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 6.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 7.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 8.txt
-rw-r--r--. 1 root root  0 Aug  2 18:43 9.txt
 
#删除数据
[root@web01 tmp]# rm -rf 1.txt 3.txt 5.txt 7.txt 9.txt 

#执行数据一致同步
[root@web01 tmp]# rsync -avzP ./ rsync_backup@rsync::backup --delete
Password: 
sending incremental file list
./
10.txt
2.txt
4.txt             
6.txt
8.txt
 
#查看服务端
[root@rsync backup]# ll
total 4
-rw-r--r-- 1 rsync rsync 19 Aug  2 18:44 10.txt
-rw-r--r-- 1 rsync rsync  0 Aug  2 18:43 2.txt
-rw-r--r-- 1 rsync rsync  0 Aug  2 18:43 4.txt
-rw-r--r-- 1 rsync rsync  0 Aug  2 18:43 6.txt
-rw-r--r-- 1 rsync rsync  0 Aug  2 18:43 8.txt
[root@rsync backup]# 

#注意:
拉取时:客户端数据与服务端数据一致,以服务端数据为准
推送时:服务端数据一客户端数据一致,一客户端数据为准

六、rsync常见报错

1.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backu@172.16.1.7::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.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::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.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::backu
@ERROR: Unknown module 'backu'
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:模块名字错误
 
4.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::/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.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::backup
rsync: failed to connect to 172.16.1.7 (172.16.1.7): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:防火墙开启,没有配置防火墙规则
[root@backup ~]# firewall-cmd --add-port=873/tcp
success
 
6.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::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.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::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.报错内容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.7::backup
rsync: failed to connect to 172.16.1.7 (172.16.1.7): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:服务端服务没有启动
 
9.报错内容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@10.0.0.7::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]
#原因:服务端配置错误,导致启动问题

作业:

实现nfs与rsync互连
思路:nfs机中新建的目录需要同步到rsync相同的目录
	 1.在nfs机中新建/rsync/ web 和 db
	 2.在rsync机中进行同样得动作,服务端授权  chown -R rsync.rsync /rsync/
	 3.修改服务端配置文件   vim /etc/rsyncd.conf 新增两个模块
	 4.重新启动rsyncd   systemctl stop rsyncd && systemctl start rsyncd
	 5.在客户端新建文件后同步到服务端测试
         [root@nfs rsync]# cd db/
         [root@nfs db]# dd if=/dev/zero of=nb.txt bs=10M count=10
         10+0 records in
         10+0 records out
         104857600 bytes (105 MB) copied, 0.717661 s, 146 MB/s
         [root@nfs db]# ll
         total 102400
         -rw-r--r--. 1 root root 104857600 Aug  2 20:37 nb.txt
         [root@nfs db]# rsync -r ./ rsync_backup@rsync::db
         Password: 
         在服务端检查:
         [root@rsync rsync]# cd db/
         [root@rsync db]# ll
         total 102400
         -rw-r--r-- 1 rsync rsync 104857600 Aug  2 20:38 nb.txt

上一篇:rsync备份服务器部署详情


下一篇:项目:全网数据脚本自动化备份!!!难道这就是……