Remote Synchronize简称rsync,这是一款可以远程同步文件的软件,同步过程采用rsync加密算法保证了文件安全,并且同步的文件可保持原文件的属性(比如权限、时间等)不变。
服务器A:配置为rsync服务器(假设IP为192.168.61.130)
#安装rsync软件
[root@localhost ~]# yum install rsync
#安装xinetd
[root@localhost ~]# yum yum install xinetd
#配置xinetd、rsync开机自启动
[root@localhost ~]# chkconfig xinetd on
[root@localhost ~]# chkconfig rsync on
#手工创建rsync的配置文件/etc/rsyncd.conf
[root@localhost ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 10
strict mode = yes
port = 873
[backup]
path = /root
comment = Root Dir
ignore errors
read only = yes
list = no
auth users = john
secret file = /etc/rsync.sec
#配置密码文件/etc/rsync.sec并授予600权限
[root@localhost ~]# cat /etc/rsync.sec
john:wang001
[root@localhost ~]# chmod 600 /etc/rsync.sec
#重启xinetd以激活rsync
[root@localhost ~]# service xinetd restart
#确认rsync已经运行
[root@localhost ~]# netstat-a | grep rsync
tcp 0 0 *:rsync *:* LISTEN
服务器B:配置为rsync客户端(假设IP为192.168.61.131)
#安装rsync软件
[root@localhost ~]# yum install rsync
#配置rsync客户端密码文件并授予600权限
[root@localhost ~]# cat /etc/rsync.sec
wang001
[root@localhost ~]# chmod 600 /etc/rsync.sec
#创建目录/root/rsync_dir,用于同步服务器A[backup]模块中的文件
[root@localhost ~]# mkdir rsync_dir
#测试同步,把服务器A /root目录中的全部文件同步到本地/root/rsync_dir目录
[root@localhost ~]# rsync -vzrtopg --progress --delete john@192.168.61.130::backup /root/rsync_dir --password-file=/etc/rsync.sec
命令说明:从远程机器的backup目录备份到本地/root/rsync_dir,以rsync协议登录认证,以远程机器文件为主删除本地多余的文件。备份传输采用压缩,递归各个目录,保持文件的时间属性,属主,权限和用户组。
rsync命令格式
rsync 命令的基本格式有多种,分别是:
# 仅在本地备份
# rsync [OPTION] SRC DEST
# 本地数据备份到远程机器,登录认证使用ssh协议(push)
# rsync [OPTION] SRC [USER@]HOST:DEST
# 本地数据备份到远程机器,登录认证使用rsync协议(push)
# rsync [OPTION] SRC [USER@]HOST::DEST
# 远程机器的数据备份到本地机器,登录认证使用ssh协议(pull)
# rsync [OPTION] [USER@]HOST:SRC DEST
# 远程机器的数据备份到本地机器,登录认证使用rsync协议(pull)
# rsync [OPTION] [USER@]HOST::SRC DEST
其中,SRC:用来表示要备份的目标数据所在的位置(路径);DEST:用于表示将数据备份到什么位置。
ssh 协议和 rsync协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险。
OPTION参数说明
-v:显示输出过程
-z:压缩
-a:多参数集合 (-rtopgDl)
-r:递归
-t:保存修改时间属性
-o:保持属主不变
-p:保持权限不变
-g:保持用户组不变
-l:保持拷贝软连接
-q:安静的拷贝
--delete:删除DEST中SRC没有的文件
--exclude:排除
-P:等同于 --partial 断点续传
--bwlimit=KBPS:限速IO带宽,单位kb/s
※企业常用参数组合:
-avz 或者 -vzrtopg
脚步化实现
最后脚本化以上rsync过程,增加服务器是否存活的判断,并增加日志使rsync过程更加清晰,这样便于在运行出错时排查问题。
#!/bin/bash
RSYNC_SERVER=192.168.61.130
RSYNC_USER=john
RSYNC_MODULE=backup
RSYNC_PASS=/etc/rsync.sec
RSYNC_LOG=/var/run/rsync.log
LOCAL_DIR=/root/rsync_dir
RSYNC=/usr/bin/rsync
PING=/bin/ping
run_rsync() {
echo "Starting Rsync at `date`" | tee-a $RSYNC_LOG
$RSYNC -vzrtopg --progress --delete $RSYNC_USER@$RSYNC_SERVER::$RSYNC_MODULE $LOCAL_DIR --password-file=$RSYNC_PASS
echo "Rsync Finished at `date`" | tee-a $RSYNC_LOG
}
test_alive() {
$PING $RSYNC_SERVER -c 3-w 3
if [ $?-ne 0 ]; then
echo "Server down at `date`" >> $RSYNC_LOG
exit 1
fi
}
test_alive > /dev/null 2>&1
run_rsync
部分内容来自王军老师的《Linux系统命令及Shell脚本实践指南》
网友评论