rsync 备份方案
要求:以守护进程的方式传输数据(socket)
一.部署前准备工作:
1.部署环境
[root@server1 ~]# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m
2.内核版本
[root@server1 ~]# uname -r
2.6.32-279.el6.i686
3.主机网络参数设置:
主机名 |
网卡eth0 |
默认网关 |
用途 |
Server1 |
10.0.0.165 |
10.0.0.1 |
Rsync服务端 |
Server2 |
10.0.0.166 |
10.0.0.1 |
Rsync节点 |
Server3 |
10.0.0.167 |
10.0.0.1 |
Rsync节点 |
提示:如果无特殊说明子网掩码均为255.255.255.0
二.具体要求
要求在server1上以rsync守护进程的方式部署rsync服务,使得所有客户端主机(server2,server3),可以把本地数据通过rsync的方式备份到数据备份服务器server1上。
三.开始部署rsync服务--rsync服务端操作过程:
1.配置rsynd.conf
首先确认软件是否安装:
[root@server1 ~]# rpm -qa rsync
rsync-3.0.6-9.el6.i686
增加如下配置:
[root@server1 etc]# vi /etc/rsyncd.conf
####rsync_conf start#####
uid = rsync 使用系统用户
gid = rsync 使用系统组
use chroot = no
max connections = 20 最大连接数
timeout = 300 超时时间
pid file = /var/run/rsyncd.pid 进程id
#lock file = /var/run/rsync/lock 锁档
locl ifle = rsyncd.lock
log file = /var/log/rsync.log 日志
[S1_back] 模块
path = /home/backup 模块存放路径
ignore errors 错误提示
read only = false 是否只读
list = false 可以列表档
hosts allow = 10.0.0.0/24 允许可连地址
hosts deny = 0.0.0.0/32 拒绝可连地址
auth users = rsync_backup 虚拟用户
secrets file =/etc/rsync.password 虚拟用户名密码存放地点
####rsync_conf end #####
特别声明:
1)模块中的参数项可以拿到全局配置中使用。
2)以上配置档中的参数。
3)以上配置档中没有提到的参数,可参照man rsyncd.conf
创建任务执行用户
[root@server1 ~]# useradd -srsync /sbin/nologin -M
创建配置中的path = /home/backup
[root@server1 ~]# mkdir -p/home/backup/
修改path的权限
[root@server1 ~]# chown -Rrsync:rsync /home/backup/
2.配置rsync虚拟服务器同步账户名密码档并修改密码档权限
配置密码档
[root@server1 ~]# echo "rsync_backup:rsyncpassword" >/etc/rsync.password
设置密码档600权限
[root@server1 ~]# chmod 600 /etc/rsync.password
[root@server1 ~]# ll /etc/rsync.password
-rw------- 1 root root 12 Jul 417:26 /etc/rsync.password
3.rsync服务管理
启动rsync服务
[root@server1 ~]# rsync --daemon
重启rsync命令
pkill rsync #关闭rsync服务
Killall -9 rsync
Kill -9 1195
rsync --daemon #启动rsync服务
检查服务
[root@server1 ~]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1195 root 3u IPv4 9557 0t0 TCP *:rsync (LISTEN)
rsync 1195 root 5u IPv6 9558 0t0 TCP *:rsync (LISTEN)
[root@server1 ~]# ps -ef |grep rsync
root 1195 1 009:12 ? 00:00:00 rsync --daemon
root 1650 1482 014:01 pts/0 00:00:00 grep rsync
[root@server1 ~]#
[root@server1 ~]# netstat -natpl
4.设置rsync服务开机启动
[root@server1 ~]# echo "rsync --daemon " >>/etc/rc.local
注意:当然还可以使用chkconfigrsync on命令,但是必须要编写适合chkconfig操作的脚本才行.
四.开始部署rsync服务--rsync客户端(server2/server3节点)操作过程:
1.检查软件是否安装
[root@server2~]# rpm -qa |grep rsync
rsync-3.0.6-9.el6.i686
2.配置客户端密码档
[root@server2 ~]# echo "rsync" >> cat/etc/rsync.password
注意:客户端的密码档格式与服务器端不同,客户端密码档只包括虚拟用户密码,不包括虚拟账户账户名
3.修改密码档权限
[root@server2~]# chmod 600 /etc/rsync.password
4.打开rsync端口
iptables -A INPUT -p tcp -m state --stateNEW -m tcp --dport 873 -j ACCEPT
iptables -L
五.测试
1.测试
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
拉取测试(将服务器上面模块S1_back里面的档1000拉到本地home下)
[root@server2 ~]# rsync -zavp rsync_backup@server1::S1_back/1000 /home/
Password:
receiving incremental file list
1000
sent 84 bytes received 1019826bytes 55130.27 bytes/sec
total size is 1048576000 speedup is 1028.11
[root@server2 home]# rsync -zavprsync://rsync_backup@server1/S1_back/1000 /tmp/ \
--password-file=/etc/rsync.password
receiving incremental file list
sent 65 bytes received 113bytes 356.00 bytes/sec
total size is 1048576000 speedup is 5890876.40
推送测试(将节点服务器上面的档dmesg.old上传到服务器S1_back模块中)
[root@server2 etc]# rsync -avzp /var/log/dmesg.oldrsync_backup@server1::S1_back
Password:
sending incremental file list
dmesg.old
sent 13346 bytes received 27bytes 2057.38 bytes/sec
total size is 69828 speedup is5.22
2.错误提示
问题一: @ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 原因: 服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。 问题二: @ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 原因: 服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。 提供正确的用户名密码解决此问题。 问题三: @ERROR: Unknown module ‘tee_nonexists' rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 原因: 服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。 问题1: 在client上遇到问题: rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/ rsync: could not open password file "/etc/rsync.pas": No such file or directory (2) Password: @ERROR: auth failed on module backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 遇到这个问题:client端没有设置/etc/rsync.pas这个档,而在使用rsync命令的时候,加了这个参数-- password-file=/etc/rsync.pas 问题2: rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/ @ERROR: auth failed on module backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 遇到这个问题:client端已经设置/etc/rsync.pas这个档,里面也设置了密码111111,和服务器一致,但是 服务器段设置有错误,服务器端应该设置/etc/rsync.pas ,里面内容root:111111 ,这里登陆名不可缺少 问题3: rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/ @ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 遇到这个问题,是因为服务器端的/home/backup 其中backup这个目录并没有设置,所以提示:chdir failed 问题4: rsync: write failed on "/home/backup2010/wensong": No space left on device (28) rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7] rsync: connection unexpectedly closed (2721 bytes received so far) [generator] rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7] 磁盘空间不够,所以无法操作。 可以通过df /home/backup2010 来查看可用空间和已用空间 |
3.rsync中的参数
Options: options: -v,--verbose 详细模式输出 -q,--quiet 精简输出模式 -c,--checksum 打开校验开关,强制对文件传输进行校验 -a,--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r,--recursive 对子目录以递归模式处理 -R,--relative 使用相对路径信息 -b,--backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir将备份文件(如~filename)存放在在目录下。 -suffix=SUFFIX定义备份文件前缀 -u,--update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l,--links 保留软链结 -L,--copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links仅仅拷贝指向SRC路径目录树以外的链结 --safe-links忽略指向SRC路径目录树以外的链结 -H,--hard-links 保留硬链结 -p,--perms 保持文件权限 -o,--owner 保持文件属主信息 -g, --group 保持文件属组信息 -D,--devices 保持设备文件信息 -t,--times 保持文件时间信息 -S,--sparse 对稀疏文件进行特殊处理以节省DST的空间 -n,--dry-run现实哪些文件将被传输 -W,--whole-file 拷贝文件,不进行增量检测 -x,--one-file-system 不要跨越文件系统边界 -B,--block-size=SIZE 检验算法使用的块尺寸,默认是700字节 -e,--rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 --rsync-path=PATH指定远程服务器上的rsync命令所在路径信息 -C,--cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete删除那些DST中SRC没有的文件 --delete-excluded同样删除接收端那些被该选项指定排除的文件 --delete-after传输结束以后再删除 --ignore-errors及时出现IO错误也进行删除 --max-delete=NUM最多删除NUM个文件 --partial保留那些因故没有完全传输的文件,以是加快随后的再次传输 --force强制删除目录,即使不为空 --numeric-ids不将数字的用户和组ID匹配为用户名和组名 --timeout=TIMEIP超时时间,单位为秒 -I,--ignore-times 不跳过那些有同样的时间和长度的文件 --size-only当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 --modify-window=NUM决定文件是否时间相同时使用的时间戳窗口,默认为0 -T--temp-dir=DIR 在DIR中创建临时文件 --compare-dest=DIR同样比较DIR中的文件来决定是否需要备份 -P等同于 --partial --progress显示备份过程 -z,--compress 对备份的文件在传输时进行压缩处理 --exclude=PATTERN指定排除不需要传输的文件模式 --include=PATTERN指定不排除而需要传输的文件模式 --exclude-from=FILE排除FILE中指定模式的文件 --include-from=FILE不排除FILE指定模式匹配的文件 --version打印版本信息 --address绑定到特定的地址 --config=FILE指定其他的配置文件,不使用默认的rsyncd.conf文件 --port=PORT指定其他的rsync服务端口 --blocking-io对远程shell使用阻塞IO -stats给出某些文件的传输状态 --progress在传输时现实传输过程 --log-format=formAT指定日志文件格式 --password-file=FILE从FILE中得到密码 --bwlimit=KBPS限制I/O带宽,KBytes per second -h,--help 显示帮助信息
六.备份案例
1.将server2 & server3的/home目录下面除了app目录之外的的所有档同步到server1上面
2.指定crontab任务,每周6备份一次
[root@server2 jiaoben]# crontab -l
1 1 * * 6 /etc/rsync_backup.sh 星期六的1点1分开始执行
Vi /etc/rsync_backup.sh
#!/bin/sh
/usr/bin/rsync -zap --exclude=/home/app /home rsync://rsync_backup@server1/S1_back/\
--password-file=/etc/rsync.password --delete 2>/dev/null &
(--exclude=pattern --exclude-from=file)
注意:当任务作为脚本运行的时候最好不要出现显示的选项(rsync -avzp,v选项表示显示)
3.Server3同server2相同
-exclude参数也可以添加到服务器端配置档里面 (用于下载)
exclude=1 2 3/2
man rayncd.conf 略