提到备份可以联想到cp、scp和ln等等这些命令,这并不是我们今天的主角,Rsync同样可以进行这些操作,比之这几个命令实现的备份功能更为强大,最重要的一点是能够实现增量备份,大量节省时间。大家需要记住的是rsync的端口是873!
================== 
               实验环境
==================
0)rsync  version 3.0.9 

1)rsync是C/S模式,一台服务端,可多台客户端。(至少两台).

2)配置为同一网段,C:192.168.1.10/24 ; S:192.168.1.20/24.

3)采用push模式,客户端需备份目录为/data,可以将数据打包放在这里.

4)服务端的模块为backup.

5)防火墙和Selinux处于关闭状态.

=====================


                服务端配置


=====================


1)安装rysncd,过程省略.


首先配置"/etc/rsyncd.conf"


锁文件:保持数据的安全性。


configure to /etc/rsyncd.conf


uid = rsync    #用户远端的命令访问rsync共享的目录.


gid = rsync    #用户组.


use chroot = no    #安全相关.


max connections = 200     #最大连接数.


pid file = /var/run/rsyncd.pid    #进程对应的进程号文件.


lock file = /var/run/rsync.lock    #锁文件,为了安全.


log file = /var/log/rsyncd.log    #日志文件.


timeout = 300     #超时时间.


ignore errors      #忽略I/O错误.


read only = false      #仅读为假,可读.


list = false    #不可以列表.


hosts allow = 10.0.0.0/24     #允许访问的网段.


#hosts deny = 0.0.0.0/32     #拒绝的网段,如果存在两个会出现优先于拒绝.


auth users = rsync_backup    #连接rsync的字符串,不算是一个用户.这个用户可以不存在.


secrets file = /etc/rsync.password    #上述的密码文件.


path = /backup      #服务器提供访问的服务目录.



->cp /etc/rsyncd.conf{,.bak} #对这个文件进行一个备份.

2)建立rsync虚拟用户


-> useradd rsync -s /sbin/nologin -M && chown -R rsync. /backup

3)创建密码文件

->echo "rsync_backup:123456" >/etc/rsync.password && chmod 600 /etc/rsync.password #安全机制文件必须为600.
4)rsysnc --daemon && lsof -i:873 #记住哦,rysnc端口是873!!


================


           客户端配置


================


1)配置密码文件


-> echo 123456 >/etc/rsyncd.password && chmod 600 /etc/rsyncd.password  #客户端不需要做过多的配置,与服务端不通的是只需要一个密码即可。


2)采用push方式

-> rsync --avzP --delete /data/ rsync_backup@192.168.1.20::backup --password-file=/etc/rsync.password 


or -> rsync --avzP --delete /data/ rsync://rsync_backup@192.168.1.20/backup --password-file=/etc/rsync.password


*rsync一些常用参数介绍


-v #输出


-vzrtopg #保持属性 等于“-avz"


-r #对子目录以递归模式,即目录下的所有目录都同样传输.


-t #保持文件时间信息.


-o #保持文件属主信息.


-p #保持文件权限.


-g #保持文件属组信息.


-P #保留因故障没传输完的文件,以加快随后的再次传输.


-z #对备份文件在传输时进行压缩.


-e #ssh方式传输.可以使用ssh key通过定时任务往服务器推.


eg. rsync -avz /etc/test.txt -e "ssh -p 22" root@192.168.1.10:/tmp/



差异化拷贝

--exclude={a..b}
--exclude=a --exclude=b



--delete #无差异同步,再推送的时候以客户端文件为标准。

--bwlimit=1000  #单位k,限速。




pull方式


-> rsync -avzP rsync_backup@192.168.1.20::backup /backup --password-file=/rsync.password 


rsync -avzP rsync://rsync_backup@192.168.1.20/backup /backup --password-file=/etc/rsync.password

小总结

rsync优点:

1)可以与inotify支持增量备份,以及结合定时任务,支持daemon,以客户端为参照物的推拉。



2)远程SHELL通道模式可以加密SSH传输,daemon可以通过VPN或ipsec服务进行加密传输。



缺点:


1)大量小文件同步的时候,对比时间比较长,rysnc进程可能会停止。



2)同步大文件,10G这样的大文件有时也会中断,未完整同步前是隐藏文件,通过续传参数实现传输。

==========================


        服务端做了一个脚本,供参考


==========================


刚学的shell不久,写了一个Rsync服务端的脚本,供大家使用!


#!/bin/bash
#E-mail :z.devop@gmail.com
user="rsync"
userchar="rsync_backup"
allow='10.0.0.0/24'
module1="backup"
path1="/backup"
module2="example"
path2='/example'
passfile="/etc/rsync.password"
password="123456"
red='\033[0;31m'
. /etc/init.d/functions
function usage(){
[[ $EUID -ne 0 ]] &&\
        echo -e "${red}Error:$0 This script must be run as root!" &&\
		exit 1
}
#comfirm ISO is CentOS!
function ISO(){
	if [ -f /etc/redhat-release ]; then
    		release="centos"
			action "IS CentOS" /usr/bin/true
    else
			action "Must be ISO as CentOS" /usr/bin/false
			exit 2
	fi
}
#install RSYNC
function install(){
	if [ `rpm -qa|grep rsync|wc -l` -eq 0 ] ;then
		yum install -y rsync & >/dev/null;
		action "RSYNC INSTALL SCUESS!" /usr/bin/true
	else
		echo  "rsync early install!" 
	fi
}
#create user
function user(){
	if [ `grep rsync /etc/passwd|wc -l` -eq 0 ];then
		/usr/sbin/useradd -s /sbin/nologin -M rsync & >/dev/null;
		action "rsync user create scuess!" /usr/bin/true
	fi
}
#declare /etc/rsyncd.conf
function config(){
#Configure for /etc/rsync.conf
cat >>/etc/rsyncd.conf<<-EOF
uid = $user
gid = $user
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
secrets file = $passfile
timeout = 300
ignore errors
read only = false
list = false
hosts allow = $allow
auth users = $userchar
#hosts deny = 0.0.0.0/32
[$module1]
path = $path1
[$module2]
path = $path2
	EOF
[ ! -d $path1 ] && mkdir -p $path1
[ ! -d $path2 ] && mkdir -p $path2
/usr/bin/chown rsync. $path1 $path2 -R
echo "$userchar:$password" >$passfile && chmod 600 $passfile
}
echo -------------------------------------------------
cat $passfile
#open rsyncd
function open(){
	if [ `netstat -tnlp|grep rsync|grep -v grep|wc -l` -eq 0 ];then
	rsync --daemon & >/dev/null
	action "rsync state" /usr/bin/true
else
	action "rsync has already started" /usr/bin/true
fi
}
function main(){
	usage
	ISO
	install
	user
	config
	open
}
main

===========================

希望我的文档对你有帮助,我会继续更新的

===========================