第1章 Rsync概述
1.1 Rsync基本概述
rsync是一款开源的备份工具,可以在不同服务器(主机)之间进行同步备份,
可实现完全备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
rsync官方地址:http://rsync.samba.org/
rsync端口:873
rsync运行模式:C/S
拓展:
C/S 客户端/服务端
B/S 浏览器/服务端
1.2 Rsync常见的
两种备份方式
完全备份
增量备份
假设客户端的上有file1 file2 file3
文件
服务端上有file1
文件,现要将客户端上的数据备份至服务端
完全备份,将客户端所有的数据内容file1 file2 file3全部备份至服务端(效率低下,占用空间)
增量备份,将客户端的file2 file3增量备份至服务端(提高备份效率,节省空间,适合异地备份)
1.3 Rsync应用场景
1.3.1 数据同步的推和拉
数据同步的两种方式
推:所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
拉:rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
1.3.2 大量服务器备份场景
如果服务器多的话 所有服务器都用一台服务器备份 会导致同步的时候 备份服务器使用过多 所以使用多台备份服务器
1.3.3 异地备份实现思路
1.4 Rsync
命令对应选项
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
1.5 Rsync传输模式
Rsync大致使用三种主要的数据传输方式
本地方式
远程方式
守护进程
1.5.1 本地方式
本地方式相当于cp(复制) 本地略有些鸡肋 功能和cp是一样的
单个主机本地之间的数据传输(此时类似于cp
命令)
[root@backup ~]# rsync /etc/passwd /tmp/
[root@backup ~]# ls /tmp/passwd
/tmp/passwd
1.5.2 远程方式
通过ssh
通道传输数据,类似scp
命令
Access via remote shell: 远程传输
远程方式存在的缺陷:
1.需要使用系统用户(不安全)
2.使用普通用户(权限存在问题)
3.需要走ssh协议
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 下载(拉)
下载pull
[root@nfs ~]# pwd 查看当前路径 在nfs服务器下
/root
[root@nfs ~]# echo "This Nfs" > file
[root@backup ~]# rsync -avz root@172.16.1.31:/root/file /opt/
在backup服务器下 以root用户身份将172.16.1.31 root目录下file文件 传输到opt目录下
[root@backup ~]# cat /opt/file 查看内容
This Nfs
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 上传(推)
上传push(将backup的file2文件上传至NFS服务器的/mnt目录)
[root@backup ~]# pwd 查看当前路径 在backup服务器下
/root
[root@backup ~]# echo "This Rsync" > file2
[root@backup ~]# rsync -avz /root/file2 root@172.16.1.31:/mnt
将backup服务器里的root目录下的file2文件 发送到172.16.1.31服务器的mnt目录下
[root@nfs ~]# cat /mnt/file2
This Rsync
推送目录(推送/root/目录下面的所有文件和目录,不会推送/root/目录本身)
[root@backup ~]# rsync -avz /root/ root@172.16.1.31:/tmp
推送目录,推送目录本身以及目录下面的所有文件
[root@backup ~]# rsync -avz /root root@172.16.1.31:/tmp
1.5.3 守护进程
守护进程传输方式:rsync
自身非常重要的功能(不使用系统用户,更加安全)
第2章 Rsync服务配置
角色 | 外网IP(NAT) | 内网IP(LAN) | 主机名 |
Rsync的服务端 | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
rsync的客户端 | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs |
2.1 安装Rsync
[root@backup ~]# yum -y install rsync
2.2 配置rsync
查询配置文件存放的路径
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
配置/etc/rsyncd.conf (直接复制下面内容,将原有内容清空)
[root@backup ~]# cat /etc/rsyncd.conf
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.password
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
2.3 创建用户
2.3.1 运行rsync服务的用户
创建rsync账户,不允许登录不创建家目录
[root@backup ~]# useradd -M -s /sbin/nologin rsync
创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
2.3.2 创建虚拟用户
创建虚拟用户密码文件(用于客户端连接时使用的用户)
创建虚拟用户和密码,并赋予600权限
[root@backup ~]# echo "rsync_backup:1" >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
2.4 启动rsync服务
启动rsync服务,并加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
启动后检查
[root@bogon ~]# netstat -lntp|grep rsync
2.5 Rsync服务测试
客户端:
Access via rsync daemon: 守护进程方式传输
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 下载
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
1.将客户端的/etc/passwd 推送至 rsync服务端[backup]
rsync [OPTION...] SRC... [USER@]HOST::DEST
[root@nfs ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
2.将rsync服务端模块[/backup]下载至本地
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
2.6 同步时不输入密码
2.6.1 第一种方式sersync
适合终端执行指定用户密码文件
[root@nfs ~]# echo "1" >/etc/rsync.password 密码为1 将密码写入rsync.password文件
[root@nfs ~]# chmod 600 /etc/rsync.password
rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.password
2.6.2 第二种方式写;脚本时使用
export RSYNC_PASSWORD=1 定义变量
[root@nfs ~]# export RSYNC_PASSWORD=1
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
2.7 强制一致性 (慎用!)
客户端与服务端保持一致(--delete)
--delete强制一致
[root@nfs ~]# rsync -avz /root rsync_backup@172.16.1.41::backup --delete
2.8 限速
--bwlimit=1 限速为1M 工作中常用 不用限速 分分钟带宽占满
rsync -avzP --bwlimit=1 /opt/test.dosk rsync_backup@172.16.1.41::backup
第3章 Rsync备份案例
统一所有的目录站点是/backup
3.1 备份什么内容
系统重要的配置文件
建议备份的数据内容如下
1.配置文件
开机自启动配置文件 设备挂载配置文件 本地内网配置文件
如/etc/rc.local /etc/fstab /etc/hosts
2.重要目录
cron定时任务 firewalld防火墙 脚本目录
如/var/spool/cron/ /etc/firewalld /server/scripts
3.系统日志文件
如/var/log/ //系统安全日志、sudo日志、内核日志、rsyslog日志
4.应用程序日志 nginx、PHP、mysql、redis.....
工作中根据实际情况再想下还有什么需要备份的
3.2 怎么备份(格式)
备份在/backup目录下 /backup/日期为名的目录/
例如:
/backup/nfs_172.16.1.31_2018_09_05
/backup/nfs_172.16.1.31_2018_09_06
/backup/nfs_172.16.1.31_2018_09_07
编写脚本 写入定时任务
[root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)
nfs_172.16.1.31_2018-09-05
[root@nfs ~]# mkdir /server/scripts -p
3.3 客户端备份思路
[root@nfs01 backup]# cat /server/scripts/backup_rsync.sh
#!/usr/bin/bash
#1.定义变量
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Path}/${Host}_${Addr}_${Date}
#2.检查目录是否存在
[ -d $Dest ] || mkdir -p $Dest
#3.拷贝需要备份的文件至$Dest
# system backup
cp -rp /etc/passwd /etc/fstab /etc/rc.d/rc.local /var/spool/cron $Dest/
# user backup
cp -rp /server/ $Dest/
# config backup
cp -rp /etc/rsyncd.conf $Dest/
#4.推送至备份服务端
Rsync_User=rsync_backup
Rsync_Addr=172.16.1.41
Rsync_Module=backup
export RSYNC_PASSWORD=123456
rsync -avz $Path/ ${Rsync_User}@${Rsync_Addr}::${Rsync_Module}
#5.保留本地最近7天的文件
find $Path/ -type d -mtime +7 -exec rm -rf {} \;
第4章 Rsync常见问题
问题不限于CentOS 7
CentOS 7 以上 防火墙为 firewalld
CentOS 6 及以下 防火墙为 iptables
4.1 rsync服务端开启的iptables防火墙
4.1.1 客户端的错误现象
No route to host
4.1.2 错误演示过程
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
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]
4.1.3 异常问题解决
关闭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.
4.2 rsync客户端执行rsync命令错误
4.2.1 客户端的错误现象
[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]
1.2.2 异常问题解决
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
4.3 @ERROR: auth failed on module oldboy
4.3.1 客户端的错误现象
[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]
4.3.2 异常问题解决
1. 密码真的输入错误,用户名真的错误
2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
3. /etc/rsync.password文件权限不是600
4. rsync_backup:oldboy123密码配置文件后面注意不要有空格
echo "rsync_backup:oldboy123" >>/etc/rsync.password
5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
4.4 Unknown module 'backup'
1.4.1 客户端的错误现象
[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]
4.4.2 异常问题解决
/etc/rsyncd.conf配置文件模块名称书写错误
4.5 Permission denied
4.5.1 客户端的错误现象
[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]
4.5.2 异常问题解决
1. 共享目录的属主和属组不正确,不是rsync
2. 共享目录的权限不正确,不是755
4.6 chdir failed
4.6.1 客户端的错误现象
[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]
4.6.2 异常问题解决
1. 备份存储目录没有建立
2. 建立的备份存储目录和配置文件定义不一致
4.7 invalid uid rsync
4.7.1 客户端的错误现象
[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]
4.7.2 异常问题解决
rsync服务对应rsync虚拟用户不存在了,重新创建即可。
4.8 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
4.8.1 客户端的错误现象
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
4.8.2 异常问题解决
rsync客户端的秘钥文件也必须是600权限
4.9 rsync客户端连接慢问题
4.9.1 客户端的错误日志
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
4.9.2 客户端的正确日志
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
异常问题解决
查看日志进行分析
4.10 rsync服务没有正确启动
4.10.1 客户端的错误现象
Connection refused (111)
[root@CentOS ~]# 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]
4.10.2 异常问题解决
[root@CentOS ~]# rsync --daemon
[root@CentOS ~]# ss -lntup |grep rsync
tcp LISTEN 0 5 :::873 :::* users:(("rsync",1434,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",1434,4))
[root@CentOS ~]# 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