rsync备份服务器基本操作, 原理, 三种模式和企业应用

Rsync备份服务/服务器

  • 备份服务器概念介绍
    (1) 对网站服务器数据进行备份存储(恢复丢失/误修改数据)
    (2) 对网站数据进行对比分析 (新旧数据进行比对 分析那里不同)
    (3) 对数据进行批量/统一管理 (例如web集群服务器日志文件)

PS 备份服务器有多少台合适
同一个机房应有多台备份服务器,不同机房也要有多个备份服务器
不同地理位置有多个备份服务器
这种方式叫做两地三中心

  • 服务器备份的数据类型
  1. 内部人员产生的数据 (脚本文件,代码信息, 配置文件, 数据库文件, 日志文件) 备份这种信息使用定时任务进行备份
  2. 外部人员产生的数据(图片信息, 附件信息, 视频信息)这种信息使用实时备份
  • 实现备份服务器备份数据方法
    rsync软件 官方介绍
    快速的 多功能的 远程(本地)文件备份工具
    rsync软件实现快速备份
  1. 全量备份: 将所有数据进行备份 不论目标路径是否有一部分
  2. 增量备份: 匹配数据,将目标路径已有的数据排除 没有的进行备份传输
    原理:
    (1)比较数据属性信息,对比各项属性信息,有改动的进行备份(默认模式)
    (2)比较数据的指纹信息,比对文件指纹 ,判断是否备份(指纹不一样备份 一样跳过)
    默认为比对属性信息 可以用rsync -c 基于指纹信息判断
    Md5 查看文件/目录指纹信息

rsync 使用方式

rsync既是服务也是一个命令

rsync服务有三种模式

  1. 本地备份模式
  2. 远程备份模式
  3. 守护进程模式
  • 本地模式
    使用rsync实现本地备份 用法和cp一致
    rsync 参数 源文件 目标路径
[root@backup ~]# rsync person.txt /tmp/
[root@backup ~]# ls /tmp/
person.txt
  • 远程模式
    使用rsync实现不同主机之间远程备份 用法和scp一致
    scp -rp 源目录 目标IP地址:目标路径(存放地点)
  1. 远程推送模式(上传)
    rsync -avz(基本固定参数) 参照服务器源文件 目标IP地址:目标存放路径
    ip地址和路径之间必须用一个:隔开
    参照服务器: 在哪台服务器进行操作那台就是参照服务
[root@backup ~]# rsync -avz person.txt 172.16.1.7:/tmp/
                命令    参数  源文件     目标IP : 号隔开目标路径
[email protected]'s password:   #输入目标用户的密码
sending incremental file list
person.txt
检查目标地址是否已有此文件
sent 155 bytes  received 35 bytes  42.22 bytes/sec
total size is 70  speedup is 0.37
备份成功
  1. 远程拉取模式(下载)
    rsync -avz(基本固定参数) 目标IP地址:源文件存放路径 参照服务器存放数据路径
[root@backup ~]# rsync -avz 172.16.1.7:/tmp/person.txt /
[email protected]'s password:    当前用户为准传输并不一定是root用户
receiving incremental file list
person.txt

sent 43 bytes  received 155 bytes  44.00 bytes/sec
total size is 70  speedup is 0.35
[root@backup ~]# ls /
person.txt  

rsync守护进程部署流程

部署分为服务器端部署 客户端部署
服务端部署

  1. 确认软件是否安装rpm -qa rsync
    没有安装就进行安装yum install rsync
  2. 编写配置文件
    学习配置方法man rsynd.conf
    配置文件vim rsyncd.conf
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                      管理备份目录的属主信息
gid = rsync                      管理备份目录的属组信息
port = 873                       指定收获进程服务端口信息(默认873)
fake super = yes                 让服务的虚拟用户伪装成超级管理员
use chroot = no                  和远程传输安全有关参数
max connections = 200            最大连接数  
timeout = 300            连接超时时间(默认秒为单位) (无数据传输等待断开时间)
pid file = /var/run/rsyncd.pid   记录pid号 判断服务是否开启
lock file = /var/run/rsync.lock  当连接数超过最大连接数时 阻止新的连接  
log file = /var/log/rsyncd.log   指定程序的日志信息文件(排错用)
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                    模块指定备份路径

配置模板

uid = rsync
gid = rsync
port = 873
fake super = yes
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
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
  1. 创建虚拟用户
    useradd -M -s /sbin/nologin rsync
    创建虚拟用户
  2. 创建用户密码文件
    echo rsync_backup:密码 >/etc/rsync.password
    追加密码文件
  3. 创建备份目录 修改目录属主属组
    mkdir -p /backup
    创建目录
    chown rsync.rsync /backup
    修改属主属组
  4. 启动/重启服务
    systemctl start rsyncd 启动服务
    systemctl restart rsyncd 重启服务
    systemctl enable rsyncd 永久开启(开机启动)
    客户机测试是否设置成功
    rsync -avz 源文件 rsync_backup@目标地址::backup(模块)
    IP和模块之间必须用::两个冒号隔开
[root@web01 ~]# rsync -avz /tmp/person.txt [email protected]::backup
Password: 
sending incremental file list
person.txt
rsync: chgrp ".person.txt.ZYlZXe" (in backup) failed: Operation not permitted (1)

sent 159 bytes  received 129 bytes  64.00 bytes/sec
total size is 70  speedup is 0.24
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

Rsync守护进程模式备份数据原理

  1. 第一 客户端向服务端发送请求传输数据信息, 命令中有认证用户信息,传输数据信息
  2. 第二 服务端接收到传输数据命令信息, 审核认证用户-->发送回复信息(需要认证密码)
  3. 第三 客户端发送认证密码信息
  4. 第四 服务端发送确认信息
  5. 第五 客户端用户携带数据通过网络进行传输,服务端将用户身份进行转换成配置文件中对应的用户(uid gid)
  6. 第六 服务端将数据存入指定目录 发送存储完毕确认信息,并且默认把存储的数据属主属组转换成rsync的用户(可修改)

Rsync参数说明

-a 归档参数等价 (-rlptgoD参数集合)
-z 传输时进行压缩传送
-v 传输时显示结果和基本过程
-q 传输时显示具体过程
--exclude= 指定排除文件/目录(排除数据时相对传输路径编写)
--exclude-from=编写好的排除文件 指定批量排除数据(排除数据时相对传输路径编写)
--detele 无差异同步传输数据,保证双方数据一致
--password-file=密钥文件 面交互传输数据
--bwlimit 限制传输速率 (限制每秒传输的字节数)

Rsync企业守护进程模式应用

  1. 多模块配置
    当多个部门要在备份服务器备份不同的数据 就要分开存储 这时就要配置多模块
vim /etc/rsyncd.conf (编写配置文件)
[backup1]
comment = "注释信息"
path = 模块指定目录
[backup2]
comment = "注释信息"
path = 模块指定目录
wq!

保存后修改目录属主属组
chown -R xxx.xxx 模块制定目录
重启服务
systemctl restart rsyncd
  1. 守护进程模式数据排除功能
    将目录下某个文件进行排除
    方法一 :

rsync -avz /oldboy/ --exclude=oldboy.txt(相对传输文件路径进程排除文件) [email protected]::backup1 --password-file=密钥文件

排除多个文件/目录用空格隔开

方法二 :提前编写排除的数据名称文件 (相对传输备份路径)

rsync -avz /oldboy/ --exclude-from=编写好的排除文件路径[email protected]::backup1 --password-file=密钥文件

  1. 守护进程模式数据无差异备份
    企业应用保证数据同步一致 (存储服务器数据和备份服务器一致)

rsync -avz /oldboy/ --delete [email protected]::backup1 --password-file=密钥文件
源目录和备份目录保持一致 (多的删除少的添加)

  1. 守护进程模式创建子目录功能
    有时我们备份某些数据并不是都放在一个文件夹内 这时就要新的文件夹 但总不能每次都去更改备份服务器 这事就出现了子目录功能

rsync -avz /oldboy/ [email protected]::backup1/oldboy/

在backup1模块规定目录下添加一个子目录 存储文件

  1. 守护进程模式访问策略 (白名单/黑名单)
    (1) 当只有白名单时 访问地址会匹配白名单 符合的放行进行传输数据
    当不符合时默认拒绝
    (2) 当只有黑名单时 访问地址会匹配黑名单 符合的进行拒绝访问
    当不符合时默认允许
    (3) 当黑白名单都存在时 访问地址会都进行匹配
    一 都不符合 默认放行
    二 符合黑名单 不符合白名单 阻止链接
    三 符合白名单也符合黑名单默认放行 (默认白名单大于黑名单)

  2. 守护进程列表功能
    默认为开启 (并不安全) 需要在配置文件内设置关闭(安全)
    当开启时输入rsync [email protected]::会直接显示所有模块指定存储路径和默认存储路径
    在配置文件添加list = falsa关闭列表功能

Rsync服务常见错误

  • rsync服务端开启的iptables防火墙
    【客户端的错误】
    No route to host
    【错误演示过程】
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

【异常问题解决】
关闭rsync服务端的防火墙服务(iptables)

[root@backup mnt]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@backup mnt]# /etc/init.d/iptables status
iptables: Firewall is not running.
  • rsync客户端执行rsync命令错误
    【客户端的错误】
    The remote path must start with a module name not a /
    【错误演示过程】
 [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::/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(1503) [sender=3.0.6]

【异常问题解决】
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

  • rsync服务认证用户失败
    【客户端的错误】
    auth failed on module oldboy
    【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: auth failed on module backup
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

【异常问题解决】

  1. 密码真的输入错误,用户名真的错误
  2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致 信息复制粘贴
  3. /etc/rsync.password文件权限不是600 服务端
  4. rsync_backup:123456 密码配置文件后面注意不要有空格
    如何看出文件结尾空格信息:
    方法一:在vim编辑中查看
    底行模式---:set list
    方法二:在cat命令中查看
[root@backup ~]# cat -A /etc/rsync.password 
rsync_backup:oldboy123 $
  1. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
  • rsync服务位置模块错误
    【客户端的错误】
    Unknown module 'backup'
    【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   @ERROR: Unknown module 'backup'
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

【异常问题解决】

  1. /etc/rsyncd.conf配置文件模块名称书写错误
  • rsync服务权限阻止问题
    【客户端的错误】
    Permission denied
    【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   sending incremental file list
   hosts
   rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13) 
   sent 196 bytes  received 27 bytes  63.71 bytes/sec
   total size is 349  speedup is 1.57
   rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]   

【异常问题解决】

  1. 备份目录的属主和属组不正确,不是rsync
  2. 备份目录的权限不正确,不是777
  • rsync服务备份目录异常
    【客户端的错误】
    chdir failed
    【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: chdir failed
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

【异常问题解决】

  1. 备份存储目录没有建立
  2. 建立的备份存储目录和配置文件定义不一致
    说明:如果没有备份存储目录
  • rsync服务无效用户信息
    【客户端的错误】
    invalid uid rsync
    【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: invalid uid rsync
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

【异常问题解决】
rsync服务对应rsync虚拟用户不存在了

  • 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
    【客户端的错误】
    password file must not be other-accessible
    【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
   password file must not be other-accessible
   continuing without password file
   Password: 
   sending incremental file list
   sent 26 bytes  received 8 bytes  5.23 bytes/sec
   total size is 349  speedup is 10.26

【异常问题解决】
rsync客户端的秘钥文件也必须是600权限

  • rsync客户端连接慢问题
    【错误日志信息】 名称或者域名 --- IP dns解析
  错误日志输出      IP  --- 名称或者域名 反向dns解析
   2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
   2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
   2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)
   2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
   2017/03/08 20:14:43 [3422] receiving file list
   2017/03/08 20:14:43 [3422] sent 76 bytes  received 83 bytes  total size 349
   正确日志输出
   2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
   2017/03/08 20:16:45 [3443] connect from nfs01 (172.16.1.31)
   2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
   2017/03/08 20:16:45 [3443] receiving file list
   2017/03/08 20:16:45 [3443] sent 76 bytes  received 83 bytes  total size 349

【异常问题解决】
查看日志进行分析,编写rsync服务端hosts解析文件
客户端 10.0.0.31 ---> 服务端 识别源地址 10.0.0.31 - RDNS(反向dns解析)

  • rsync服务没有正确启动
    【错误日志信息】
    Connection refused (111)
    【错误演示过程】
   [root@oldboy-muban ~]#  rsync -avz /etc/hosts [email protected]::backup
   rsync: failed to connect to 172.16.1.41: Connection refused (111)
   rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

【异常问题解决】

   [root@oldboy-muban ~]# rsync --daemon
   [root@oldboy-muban ~]# ss -lntup |grep rsync
   tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",1434,5))
   tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",1434,4))
   [root@oldboy-muban ~]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   sending incremental file list
   hosts  
   sent 196 bytes  received 27 bytes  49.56 bytes/sec
   total size is 349  speedup is 1.57

你可能感兴趣的:(rsync备份服务器基本操作, 原理, 三种模式和企业应用)