第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 [email protected]:/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 [email protected]:/mnt 将backup服务器里的root目录下的file2文件 发送到172.16.1.31服务器的mnt目录下 [root@nfs ~]# cat /mnt/file2 This Rsync 推送目录(推送/root/目录下面的所有文件和目录,不会推送/root/目录本身) [root@backup ~]# rsync -avz /root/ [email protected]:/tmp 推送目录,推送目录本身以及目录下面的所有文件 [root@backup ~]# rsync -avz /root [email protected]:/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 [email protected]::backup 2.将rsync服务端模块[/backup]下载至本地 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] [root@nfs ~]# rsync -avz [email protected]::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 [email protected]::backup /opt --password-file=/etc/rsync.password
2.6.2 第二种方式写;脚本时使用
export RSYNC_PASSWORD=1 定义变量
[root@nfs ~]# export RSYNC_PASSWORD=1 [root@nfs ~]# rsync -avz [email protected]::backup /opt
2.7 强制一致性 (慎用!)
客户端与服务端保持一致(--delete)
--delete强制一致
[root@nfs ~]# rsync -avz /root [email protected]::backup --delete
2.8 限速
--bwlimit=1 限速为1M 工作中常用 不用限速 分分钟带宽占满
rsync -avzP --bwlimit=1 /opt/test.dosk [email protected]::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 [email protected]::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 [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]
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 [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]
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 [email protected]::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 [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]
4.5.2 异常问题解决
1. 共享目录的属主和属组不正确,不是rsync
2. 共享目录的权限不正确,不是755
4.6 chdir failed
4.6.1 客户端的错误现象
[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]
4.6.2 异常问题解决
1. 备份存储目录没有建立
2. 建立的备份存储目录和配置文件定义不一致
4.7 invalid uid rsync
4.7.1 客户端的错误现象
[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]
4.7.2 异常问题解决
rsync服务对应rsync虚拟用户不存在了,重新创建即可。
4.8 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
4.8.1 客户端的错误现象
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
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 [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]
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 [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