提到备份可以联想到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
===========================
希望我的文档对你有帮助,我会继续更新的
===========================