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服务,使得所有客户端主机(server2server3),可以把本地数据通过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 root@192.168.133.128::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 root@192.168.133.128::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 root@192.168.133.128::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 星期六的11分开始执行

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 -avzpv选项表示显示)

3.Server3server2相同




-exclude参数也可以添加到服务器端配置档里面 (用于下载)


exclude=1 2 3/2

man rayncd.conf 略