Rsync备份服务/服务器
当使用守护进程的方式时 是增量备份 否则就是scp的传输方式
- 备份服务器概念介绍
(1) 对网站服务器数据进行备份存储(恢复丢失/误修改数据)
(2) 对网站数据进行对比分析 (新旧数据进行比对 分析那里不同)
(3) 对数据进行批量/统一管理 (例如web集群服务器日志文件)
PS 备份服务器有多少台合适
同一个机房应有多台备份服务器,不同机房也要有多个备份服务器
不同地理位置有多个备份服务器
这种方式叫做两地三中心
- 服务器备份的数据类型
- 内部人员产生的数据 (脚本文件,代码信息, 配置文件, 数据库文件, 日志文件) 备份这种信息使用定时任务进行备份
- 外部人员产生的数据(图片信息, 附件信息, 视频信息)这种信息使用实时备份
- 实现备份服务器备份数据方法
rsync软件 官方介绍
快速的 多功能的 远程(本地)文件备份工具
rsync软件实现快速备份
- 全量备份: 将所有数据进行备份 不论目标路径是否有一部分
- 增量备份: 匹配数据,将目标路径已有的数据排除 没有的进行备份传输
原理:
(1)比较数据属性信息,对比各项属性信息,有改动的进行备份(默认模式)
(2)比较数据的指纹信息,比对文件指纹 ,判断是否备份(指纹不一样备份 一样跳过)
默认为比对属性信息 可以用rsync -c
基于指纹信息判断
Md5
查看文件/目录指纹信息
rsync 使用方式
rsync既是服务也是一个命令
rsync服务有三种模式
- 本地备份模式
- 远程备份模式
- 守护进程模式
- 本地模式
使用rsync实现本地备份 用法和cp一致
rsync 参数 源文件 目标路径
[root@backup ~]# rsync person.txt /tmp/
[root@backup ~]# ls /tmp/
person.txt
- 远程模式
使用rsync实现不同主机之间远程备份 用法和scp
一致
scp -rp 源目录 目标IP地址:目标路径(存放地点)
- 远程推送模式(上传)
rsync -avz(基本固定参数) 参照服务器源文件 目标IP地址:目标存放路径
ip地址和路径之间必须用一个:
隔开
参照服务器: 在哪台服务器进行操作那台就是参照服务
[root@backup ~]# rsync -avz person.txt 172.16.1.7:/tmp/
命令 参数 源文件 目标IP : 号隔开目标路径
root@172.16.1.7'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
备份成功
- 远程拉取模式(下载)
rsync -avz(基本固定参数) 目标IP地址:源文件存放路径 参照服务器存放数据路径
[root@backup ~]# rsync -avz 172.16.1.7:/tmp/person.txt /
root@172.16.1.7'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守护进程部署流程
部署分为服务器端部署 客户端部署
服务端部署
- 确认软件是否安装
rpm -qa rsync
没有安装就进行安装yum install rsync
- 编写配置文件
学习配置方法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
- 创建虚拟用户
useradd -M -s /sbin/nologin rsync
创建虚拟用户 - 创建用户密码文件
echo rsync_backup:密码 >/etc/rsync.password
追加密码文件 - 创建备份目录 修改目录属主属组
mkdir -p /backup
创建目录
chown rsync.rsync /backup
修改属主属组 - 启动/重启服务
systemctl start rsyncd
启动服务
systemctl restart rsyncd
重启服务
systemctl enable rsyncd
永久开启(开机启动)
客户机测试是否设置成功
rsync -avz 源文件 rsync_backup@目标地址::backup(模块)
IP和模块之间必须用::
两个冒号隔开
[root@web01 ~]# rsync -avz /tmp/person.txt rsync_backup@172.16.1.41::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守护进程模式备份数据原理
- 第一 客户端向服务端发送请求传输数据信息, 命令中有认证用户信息,传输数据信息
- 第二 服务端接收到传输数据命令信息, 审核认证用户-->发送回复信息(需要认证密码)
- 第三 客户端发送认证密码信息
- 第四 服务端发送确认信息
- 第五 客户端用户携带数据通过网络进行传输,服务端将用户身份进行转换成配置文件中对应的用户(uid gid)
- 第六 服务端将数据存入指定目录 发送存储完毕确认信息,并且默认把存储的数据属主属组转换成rsync的用户(可修改)
Rsync参数说明
-a
归档参数等价 (-rlptgoD参数集合)
-z
传输时进行压缩传送
-v
传输时显示结果和基本过程
-q
传输时显示具体过程
--exclude=
指定排除文件/目录(排除数据时相对传输路径编写)
--exclude-from=编写好的排除文件
指定批量排除数据(排除数据时相对传输路径编写)
--detele
无差异同步传输数据,保证双方数据一致
--password-file=密钥文件
面交互传输数据
--bwlimit
限制传输速率 (限制每秒传输的字节数)
Rsync 免交互传输备份
创建密码文件实现无交互备份
配置备份服务器的rsync配置文件
[root@DaMoWang ~]# vim /etc/rsyncd.conf #修改rsync的配置文件</pre>
# 用户
uid = rsync
# 组
gid = rsync
# 程序安全设置
use chroot = no
# 客户端连接数
max connections = 200
# 超时时间
timeout = 300
# 本机ip
address = 192.168.94.29
# 监听端口
port 873
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
# 共享模块名称
[backup]
# 使用目录
path = /backup/
# 有错误时忽略
ignore errors
# 可读可写
read only = false
# 阻止访问远程列表
list = false
# 允许IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password
# 排除的压缩类型
dont compress = .gz .bz2 .tgz .zip .rar .z
# 共享模块名称
[nfsbackup]
# 使用目录
path = /data/
# 有错误时忽略
ignore errors
# 可读可写(true或false)
read only = no
# 阻止远程列表(不让通过远程方式看服务端有什么)
list = false
# 允许IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password
#保存退出
#把密码文件的权限改成600
[root@DaMoWang ~]# chmod 600 /etc/rsync.password
[root@DaMoWang ~]# echo “rsync_backup:475541270” > /etc/tc/rsync.password #设置密码到密码文件中
[root@DaMoWang ~]# useradd -M -s /sbin/nologin rsync
[root@DamOWang ~]# chmod +R rsync /backup
服务器端配置完成 , 下面把客户端里添加密码文件即可实现面交互
[root@DaMoWang ~]# echo "475541270" > /etc/rsync.password
[root@DaMoWang ~]# mkdir /backup #创建共享目录
[root@DaMoWang ~]# cd /backup [root@DaMoWang backup]# touch {1..5}.txt #创建测试文件 [root@DaMoWang backup]# rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
c/rsync.password #推送数据到备份服务器
sending incremental file list
./
1.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/6)
2.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/6)
3.txt
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/6)
4.txt
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/6)
Rsync企业守护进程模式应用
- 多模块配置
当多个部门要在备份服务器备份不同的数据 就要分开存储 这时就要配置多模块
vim /etc/rsyncd.conf (编写配置文件)
[backup1]
comment = "注释信息"
path = 模块指定目录
[backup2]
comment = "注释信息"
path = 模块指定目录
wq!
保存后修改目录属主属组
chown -R xxx.xxx 模块制定目录
重启服务
systemctl restart rsyncd
- 守护进程模式数据排除功能
将目录下某个文件进行排除
方法一 :
rsync -avz /oldboy/ --exclude=oldboy.txt(相对传输文件路径进程排除文件) rsync_backup@172.16.1.41::backup1 --password-file=密钥文件
排除多个文件/目录用空格隔开
方法二 :提前编写排除的数据名称文件 (相对传输备份路径)
rsync -avz /oldboy/ --exclude-from=编写好的排除文件路径rsync_backup@172.16.1.41::backup1 --password-file=密钥文件
- 守护进程模式数据无差异备份
企业应用保证数据同步一致 (存储服务器数据和备份服务器一致)
rsync -avz /oldboy/ --delete rsync_backup@172.16.1.41::backup1 --password-file=密钥文件
源目录和备份目录保持一致 (多的删除少的添加)
- 守护进程模式创建子目录功能
有时我们备份某些数据并不是都放在一个文件夹内 这时就要新的文件夹 但总不能每次都去更改备份服务器 这事就出现了子目录功能
rsync -avz /oldboy/ rsync_backup@172.16.1.41::backup1/oldboy/
在backup1模块规定目录下添加一个子目录 存储文件
守护进程模式访问策略 (白名单/黑名单)
(1) 当只有白名单时 访问地址会匹配白名单 符合的放行进行传输数据
当不符合时默认拒绝
(2) 当只有黑名单时 访问地址会匹配黑名单 符合的进行拒绝访问
当不符合时默认允许
(3) 当黑白名单都存在时 访问地址会都进行匹配
一 都不符合 默认放行
二 符合黑名单 不符合白名单 阻止链接
三 符合白名单也符合黑名单默认放行 (默认白名单大于黑名单)守护进程列表功能
默认为开启 (并不安全) 需要在配置文件内设置关闭(安全)
当开启时输入rsync rsync_backup@192.16.1.41::
会直接显示所有模块指定存储路径和默认存储路径
在配置文件添加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 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(1503) [sender=3.0.6]
【异常问题解决】
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
- rsync服务认证用户失败
【客户端的错误】
auth failed on module oldboy
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts 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(1503) [sender=3.0.6]
【异常问题解决】
- 密码真的输入错误,用户名真的错误
-
secrets file = /etc/rsync.password
指定的密码文件和实际密码文件名称不一致 信息复制粘贴 -
/etc/rsync.password
文件权限不是600 服务端 -
rsync_backup:123456
密码配置文件后面注意不要有空格
如何看出文件结尾空格信息:
方法一:在vim编辑中查看
底行模式---:set lis
t
方法二:在cat命令中查看
[root@backup ~]# cat -A /etc/rsync.password
rsync_backup:oldboy123 $
- rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
- rsync服务位置模块错误
【客户端的错误】
Unknown module 'backup'
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
- /etc/rsyncd.conf配置文件模块名称书写错误
- rsync服务权限阻止问题
【客户端的错误】
Permission denied
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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]
【异常问题解决】
- 备份目录的属主和属组不正确,不是rsync
- 备份目录的权限不正确,不是777
- rsync服务备份目录异常
【客户端的错误】
chdir failed
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
- 备份存储目录没有建立
- 建立的备份存储目录和配置文件定义不一致
说明:如果没有备份存储目录
- rsync服务无效用户信息
【客户端的错误】
invalid uid rsync
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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