Linux三阶段之二:备份服务(rsync)
二、备份服务(rsync)
(一)rsync服务介绍
rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。rsync软件适用于unix/linux/windows等多种操作系统平台。
rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。
(二)rsync服务命令简单应用
1、rsync复制同步数据原理
在同步备份数据时,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统cp,scp拷贝工具的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。
2、rsync备份软件7大特性总结:
支持拷贝普通文件与特殊文件如链接文件,设备等。 支持排除指定文件或目录同步的功能,类似tar命令排除功能。 支持保持原文件或目录的所有属性信息不变。 支持增量同步,既只同步变化数据,提升数据传输效率。 支持使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件。 支持使用通过socket(守护进程方式)传输文件或目录数据信息。 支持用户认证方式传输数据,提升数据同步安全性。
3、rsync服务命令在应用时,属于一个非常强大的命令,可以通过rsync一个命令,替换下面4个命令的操作:
①. 实现本地数据同步复制(等价命令cp)
[root@backup ~]# # rsync == cp效果 [root@backup ~]# cp -a /etc/hosts /tmp/ [root@backup ~]# ll /tmp/ total 4 -rw-r--r--. 1 root root 352 jan 27 01:15 hosts [root@backup ~]# rsync -a /etc/sysconfig/network /tmp/ [root@backup ~]# ll /tmp/ total 8 -rw-r--r--. 1 root root 352 jan 27 01:15 hosts -rw-r--r-- 1 root root 31 jan 26 18:16 network
②. 实现远程数据同步复制(等价命令scp)
rsync == scp [root@backup ~]# scp -rp /tmp/ 172.16.1.31:/tmp/ the authenticity of host '172.16.1.31 (172.16.1.31)' can't be established. rsa key fingerprint is 5b:9b:e6:79:a9:95:4f:be:06:41:e3:bb:7a:12:ee:b4. are you sure you want to continue connecting (yes/no)? yes warning: permanently added '172.16.1.31' (rsa) to the list of known hosts. root@172.16.1.31's password: network 100% 31 0.0kb/s 00:00 hosts 100% 352 0.3kb/s 00:00 [root@backup ~]# ll /tmp/ total 8 -rw-r--r--. 1 root root 352 jan 27 01:15 hosts -rw-r--r-- 1 root root 31 jan 26 18:16 network [root@backup ~]# rsync -rp /tmp/ 172.16.1.31:/tmp/ root@172.16.1.31's password: [root@backup ~]# 说明:同步数据时,/tmp/目录后有/信息,表示将目录下面的数据内容进行备份同步 同步数据时,/tmp目录后没有/信息,表示将目录及目录下面的数据内容进行备份同步
③. 实现数据信息删除功能(等价命令rm)
说明:rsync实现删除目录中数据内容过程,就将一个空目录和一个有数据的目录进行同步 最终,会将有数据的目录中的文件进行清空 [root@backup ~]# mkdir /null [root@backup ~]# rsync --delete /null/ /tmp/ rsync: --delete does not work without -r or -d. rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6] [root@backup ~]# [root@backup ~]# rsync -r --delete /null/ /tmp/ [root@backup ~]# ll /tmp/ total 0
④. 实现数据信息查看功能(等价命令ls)
[root@backup ~]# ls /etc/hosts /etc/hosts [root@backup ~]# ls -l /etc/hosts -rw-r--r--. 2 root root 352 jan 27 01:15 /etc/hosts [root@backup ~]# rsync /etc/hosts -rw-r--r-- 352 2018/01/27 01:15:59 hosts
(三)rsync软件工作方式
- 本地数据备份方式
local: rsync [option...] src... [dest] rsync --- 数据备份传输命令 option --- 可以输入一下和rsync传输数据有关的参数 src --- 要进行备份的数据(文件/目录) dest --- 将数据信息备份到什么位置(相应路径中) 实践练习: [root@backup ~]# rsync -a /etc/hosts /tmp/ok.txt [root@backup ~]# ll /tmp/ok.txt -rw-r--r-- 1 root root 352 jan 27 01:15 /tmp/ok.txt
- 远程数据备份方式
access via remote shell: pull: rsync [option...] [user@]host:src... [dest] push: rsync [option...] src... [user@]host:dest pull方式语法说明: rsync --- 数据备份传输命令 option --- 可以输入一下和rsync传输数据有关的参数 [user@]host: --- 需要指定以什么用户身份登录到远程主机, 如果省略user信息,表示以当前用户身份进行登录 登录主机地址或域名信息 src --- 指定远程主机要传输过来到本地的数据信息 dest --- 将数据保存到本地的什么路径中 push方式语法说明: rsync --- 数据备份传输命令 option --- 可以输入一下和rsync传输数据有关的参数 [user@]host: --- 需要指定以什么用户身份登录到远程主机, 如果省略user信息,表示以当前用户身份进行登录 登录主机地址或域名信息 src --- 指定本地主机要传输到远程主机的数据 dest --- 将本地数据保存到远端的什么路径中
- 守护进程传输模式
③. 守护进程传输模式 access via rsync daemon: pull: rsync [option...] [user@]host::src... [dest] rsync [option...] rsync://[user@]host[:port]/src... [dest] push: rsync [option...] src... [user@]host::dest rsync [option...] src... rsync://[user@]host[:port]/dest pull:rsync [option...] [user@]host::src... [dest] [user@]host:: --- 指定远程连接的认证用户 src --- 指定相应的模块信息 [dest] --- 将远程数据保存到本地的路径信息 push: rsync [option...] src... [user@]host::dest [user@]host:: --- 指定远程连接的认证用户 src --- 指定本地要进行推送的数据信息 [dest] --- 远程进行保存数据的模块信息
(四) rsync守护进程部署流程
1、服务端部署流程
第一里程:检查软件是否安装
[root@backup ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64
第二里程:编写配置文件
vim /etc/rsyncd.conf #rsync_config #created by hq at 2017 ##rsyncd.conf start## uid = rsync gid = rsync 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 read only = true [nfs] comment = "backup dir by oldboy" path = /nfs
第三个里程:创建备份目录管理用户
useradd rsync -m -s /sbin/nologin
第四个里程:创建备份目录
mkdir /backup chown -r rsync.rsync /backup
第五个里程:创建认证文件
echo "rsync_backup:oldboy123" >>/etc/rsync.password chmod 600 /etc/rsync.password
第六个里程:启动rsync服务
rsync --daemon
2、客户端部署流程
第一个里程:确认软件是否安装
[root@backup ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64
第二个里程:创建认证密码文件
echo "oldboy123" >>/etc/rsync.password chmod 600 /etc/rsync.password
第三个里程:进行数据备份测试
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list hosts sent 189 bytes received 27 bytes 432.00 bytes/sec total size is 352 speedup is 1.63
(五) rsync服务错误排查方法
1)检查错误日志
2)可以在模拟环境下。模拟练习一些错误
扩展说明:rsync启动服务扩展参数
--port 指定rsync服务端口号信息,默认是873
--config=xxx 指定识别的rsync服务配置文件信息
(六) rsync服务扩展应用
① 守护进程多模块功能配置
第一步:修改配置文件
vim /etc/rsyncd.conf [backup01] comment = "backup dir by oldboy" path = /backup [backup02] comment = "backup dir by oldboy" path = /backup02
第二步:创建多模块目录
mkdir /backup02 chown -r rsync.rsync /backup02
第三步:重启服务程序
killall rsync rsync --daemon
第四步:进行测试检查
② 守护进程的排除功能实践
第一种数据备份排除方式:--exclude rsync -avz /test_dir/ --exclude=b --exclude=d rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password rsync -avz /test_dir/ --exclude={b,d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password rsync -avz /test_dir/ --exclude={b..d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
第二种数据备份排除方式:--exclude-from=file rsync -avz /test_dir/ --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
③ 守护进程来创建备份目录
rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/sa/ --password-file=/etc/rsync.password rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dev/ --password-file=/etc/rsync.password rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dba/ --password-file=/etc/rsync.password
④ 守护进程的访问控制配置
三种情况: 1. 只有白名单,白名单网段或主机信息允许。其余阻止 2. 只有黑名单,黑名单网段或主机信息阻止,其余允许 3. 有黑名单也要白名单,白名单网段或主机信息允许,黑名单网段或主机信息阻止,其余允许 建议只选择前两种方式配置 hosts allow = 172.16.1.0/24 hosts deny = 0.0.0./32
⑤ 守护进程无差异同步配置(--delete)
我有的,你也有;我没有的,你也不能有 rsync -avz /test_dir/ --delete rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password 说明:一定要谨慎使用,否则可能会清空备份目录; 如果要快速清空目录数据,也可以使用无差异同步清空
⑥ 守护进程的列表功能配置
list = false 说明:表示是否列表显示rsync服务端所有模块信息 [root@nfs01 test_dir]# rsync rsync_backup@172.16.1.41:: backup01 "backup dir by oldboy" backup02 "backup dir by oldboy"
(七)rsync服务常见问题汇总
-
rsync服务端开启的iptables防火墙
【客户端的错误】 no route to host 【错误演示过程】 [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] 【异常问题解决】 关闭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] 【异常问题解决】 【客户端的错误】 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] 【异常问题解决】 1. 密码真的输入错误,用户名真的错误 2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致 3. /etc/rsync.password文件权限不是600 4. rsync_backup:123456密码配置文件后面注意不要有空格 5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
-
rsync服务位置模块错误
1. 【客户端的错误】 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] 【异常问题解决】 2. /etc/rsyncd.conf配置文件模块名称书写错误
-
rsync服务权限阻止问题
1. 【客户端的错误】 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] 【异常问题解决】 2. 备份目录的属主和属组不正确,不是rsync 3. 备份目录的权限不正确,不是755
-
rsync服务备份目录异常
1. 【客户端的错误】 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] 【异常问题解决】 2. 备份存储目录没有建立 3. 建立的备份存储目录和配置文件定义不一致 说明:如果没有备份存储目录
-
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解析 【错误日志信息】 错误日志输出 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 nfs02 (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 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