rsync远程同步备份工具-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

rsync远程同步备份工具

简介:

rsync远程同步介绍

rsyncRemote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,切采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份,镜像服务器等应用。

rsync官方站点是http://rsync.samba.org/,由Wayne Davsion进行维护。作为一种常用的备份工具,rsync往往是LinuxUnix系统默认安装的基本组件之一。

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文档的原始位置,发起端应对改设置具有读取权限。

rsync作为同步源时以守护进程运行,为其他客户机提供备份源。配置rsync同步源需要建立配置文件rsyncd.conf,创建备份账号,然后将rsync程序以“--daemon”选项运行。

 

rsync的基本用法(加粗部分表示常用)

格式:rsync [选项原始位置 目标位置

-r:递归整个目录树

-l:用来备份链接文件

-v:显示同步过程详细信息

-a:归档模式,保留文件权限属性等。等同于-rlptgoD

-z:在传输文件时进行压缩

-p:保留文件权限标记

-P:显示更详细过程

-t:保留文件时间标记

-g:保留文件属组标记

-o:保留文件属主标记

-H:保留硬连接文件

-A:保留ACL属性

-D:保留设备文件及其它特殊文件

--delete:删除目标位置有而原始位置没有的文件

--checksum:根据校验和来决定是否跳过文件

 

首先确保如果要做rsync+inotify实时同步的话,要查看系统内核。Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况。

[root@root ~]# uname -r

2.6.32-431.el6.x86_64

注意:root用户是服务端lisi用户是客户端

第一步:安装xinetdrsync。由于rsync是非常实用的备份工具所以Linux都是默认安装好的,并启动服务。

[root@root ~]# rpm -ivh /mnt/Packages/xinetd-2.3.14-39.el6_4.x86_64.rpm 

[root@root ~]# rpm -q rsync

rsync-3.0.6-9.el6_4.1.x86_64

[root@root ~]# vi /etc/xinetd.d/rsync 启用xinetd

 

        disable = no   yes改为no

[root@root ~]# service xinetd start

正在启动 xinetd:                                          [确定]

[root@root ~]# netstat -natp | grep 873  rsync端口是tcp873

tcp        0      0 :::873                      :::*      LISTEN      28033/xinetd      

 

基于安全性考虑,对于rsync的同步源最好仅允许以只读方式做同步。另外,同步可以采用匿名的方式,只要将其中的“auth users”和“secrets file”配置记录去掉就可以。

第二步:为备份账户创建数据文件。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

[root@root ~]# useradd benet   

[root@root ~]# echo "123" | passwd --stdin benet  密码指定123

给用户对/var/www/html/设置权限

[root@root ~]# ls /var/www/html/

[root@root ~]# setfacl -R -m user:benet:rwx /var/www/html/

[root@root ~]# setfacl -R -m default:benet:rwx /var/www/html/

[root@root ~]# getfacl /var/www/html/   查看权限

getfacl: Removing leading '/' from absolute path names

# file: var/www/html/

# owner: root

# group: root

user::rwx

user:benet:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:benet:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

 

第三步:rsync备份操作

[root@root ~]# cp -R /boot/grub/ /var/www/html/ 拷贝一份测试文件到需要被备份的目录下

[root@root ~]# ls /var/www/html/  查看目录

grub

 

远程ssh有两种方式,第一种需要知道对方用户密码,另一种就是通过ssh-keygen生成秘钥。

(ssh远程管理openssh使用详解http://liqingwen.blog.51cto.com/9853378/1693597

第一种输入密码远程ssh登陆(默认密码验证方式)

[root@root ~]# ssh 192.168.100.200  远程ssh

The authenticity of host '192.168.100.200 (192.168.100.200)' can't be established.

RSA key fingerprint is c5:0c:2a:f9:56:53:0a:28:f1:60:c9:a7:37:0c:8c:bc.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.100.200' (RSA) to the list of known hosts.

root@192.168.100.200's password: 输入对方用户密码

Last login: Fri Aug 28 13:58:24 2015 from 192.168.100.1

虚拟用户

[root@lisi ~]# mkdir /web

[root@lisi ~]# rsync -azP --delete benet@192.168.100.100:/var/www/html/ /web/

从服务器上的用户备份文件到客户端

The authenticity of host '192.168.100.100 (192.168.100.100)' can't be established.

RSA key fingerprint is c5:0c:2a:f9:56:53:0a:28:f1:60:c9:a7:37:0c:8c:bc.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.100.100' (RSA) to the list of known hosts.

benet@192.168.100.100's password: 输入用户benet密码

有部分内容省略··· ···

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [generator=3.0.6]

 

rsync: send_files failed to open "/var/www/html/grub/grub.conf": Permission denied (13)

 

注释:/boot/grub/grub.conf 这个文件在发送时失败,原因是缺少权限。可以把文件权限改为644,再次执行就可以解决问题。

[root@lisi ~]# ls /web

grub

[root@lisi ~]# exit

logout

Connection to 192.168.100.200 closed.

[root@root ~]# cd /var/www/html/grub/

[root@root grub]# ls -l grub.conf

-rw-------+ 1 root root    761 8月  28 14:31 grub.conf

[root@root grub]# chmod 644 grub.conf  添加权限

[root@root grub]# ls -l grub.conf 

-rw-r--r--+ 1 root root 761 8月  28 14:31 grub.conf

[root@root grub]# ssh 192.168.100.200再次远程到客户端

root@192.168.100.200's password: 

Last login: Fri Aug 28 14:33:37 2015 from 192.168.100.100

 

第二种通过生成密钥方式进行无密码登录

[root@lisi ~]# ssh-keygen  生成密钥对

[root@lisi ~]# ssh-copy-id benet@192.168.100.100  上传公钥到服务器的benet用户

benet@192.168.100.100's password:  输入benet用户密码 

[root@lisi ~]# rsync -azP --delete benet01@192.168.100.100:/var/www/html/ /web/再次备份

benet@192.168.100.100's password: 

receiving incremental file list

grub/grub.conf

         761 100%  743.16kB/s    0:00:00 (xfer#1, to-check=11/18)

 

sent 31 bytes  received 878 bytes  259.71 bytes/sec

total size is 255280  speedup is 280.84

 

可以通过编辑脚本进行执行备份操作

[root@lisi ~]# vim /opt/rsync.sh

#!/bin/bash

rsync -az --delete benet01@192.168.100.100:/var/www/html/ /web/

[root@lisi ~]# chmod +x /opt/rsync.sh 

[root@lisi ~]# rm -rf /var/www/html/

[root@lisi ~]# rm -rf /web/*

[root@lisi ~]# ls /web/

[root@lisi ~]# cd /opt/

[root@lisi opt]# ./rsync.sh 

[root@lisi opt]# ls /web/

grub

计划备份

[root@lisi opt]# crontab -e

01 3 * * * /opt/rsync.sh &  每天3点10分运行脚本

 

配置rsync服务器及需要备份的目录,不使用系统用户

[root@root grub]# vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes   禁锢在源目录

address = 192.168.100.100  监听地址

port 873  监听端口

max connections = 5  

log file = /var/log/rsyncd.log   日志文件位置

pid file = /var/run/rsyncd.pid   存放进程ID的文件位置

lock file = /var/run/rsync.lock 

hosts allow = 192.168.100.0/24  允许访问的客户机地址

[wwwroot]

    path = /var/www/html/

    comment = Document Root of mail.benet.com

    read only = yes   是否为只读

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z  同步时不再压缩的文件类型

    auth users = back   授权账户

    secrets file = /etc/rsyncd_users.db   存放账户信息的数据文件

根据上述操作,创建账号数据文件,添加一行用户记录,以冒号分隔,虚拟账户名称back密码abc123

[root@root grub]# grep db /etc/rsyncd.conf 

    secrets file = /etc/rsyncd_users.db

[root@root grub]# vim /etc/rsyncd_users.db

back:abc123  设置密码

[root@root grub]# ssh 192.168.100.200

root@192.168.100.200's password: 

Last login: Fri Aug 28 14:45:18 2015 from 192.168.100.100

[root@lisi ~]# rsync -azP back@192.168.100.100::wwwroot /web/

Password:   输入back密码

receiving incremental file list

sent 58 bytes  received 440 bytes  110.67 bytes/sec

total size is 255280  speedup is 512.61

[root@lisi ~]# rm -rf /web/*  删除备份文件

[root@lisi ~]# rsync -azP back@192.168.100.100::wwwroot /web/

Password: 

./

@ERROR: auth failed on module wwwroot

rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]

[root@lisi ~]# ls /web/

[root@lisi ~]# rsync -azP back@192.168.100.100::wwwroot /web/  开始备份

[root@lisi ~]# ls /web/ 

Grub

192.168.100.200上输入变量,无需交互密码

[root@lisi ~]# export RSYNC_PASSWORD=abc123  在192.168.100.100上输入变量,无需交互密码

[root@lisi ~]# rm -rf /web/*

[root@lisi ~]# rsync -azP back@192.168.100.100::wwwroot /web/

receiving incremental file list

··· ···省略

sent 352 bytes  received 148758 bytes  298220.00 bytes/sec

total size is 255280  speedup is 1.71

 

进行rsync+inotify实时同步

[root@lisi ~]# cd /proc/sys/fs/inotify/

[root@lisi inotify]# ls

max_queued_events  max_user_instances  max_user_watches

[root@lisi inotify]# vim /etc/sysctl.conf  配合inotify触发备份、调整内核参数

 

# Kernel sysctl configuration file for Red Hat Linux

··· ···省略

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296

fs.inotify.max_queued_events = 16384  监控事件的队列

fs.inotify.max_user_instances = 1024   最多监控实例数

fs.inotify.max_user_watches = 1048576 每个实例最多监控文件数

[root@lisi inotify]# sysctl -p  立即生效

[root@root grub]# mkdir /abc  创建文件夹

[root@root grub]# cd /abc

通过软件工具直接将所需安装包移动到客户端中然后进行解压缩。

wKioL1XxdnXgZTUTAANNzlFlf48258.jpg 

[root@root abc]# ls

inotify-tools-3.14.tar.gz

[root@root abc]# tar zxvf inotify-tools-3.14.tar.gz 解压改软件

[root@root abc]# mv inotify-tools-3.14 /opt

[root@root abc]# cd /opt/inotify-tools-3.14/

[root@root inotify-tools-3.14]# yum -y install gcc gcc-c++  手工编译安装

[root@root inotify-tools-3.14]# ./configure

[root@root inotify-tools-3.14]# make && make install

进行监测

[root@root inotify-tools-3.14]#inotifywait -mrq -e modify,create,move,delete /var/www/html/

Inotifywait可监控、modify:修改、 create:创建、 move:移动、 delete:删除等操作。

在另打开一个连接,并创建一个文件

wKiom1XxdFexjnyVAAAwqjrp-To080.jpg


在回到监测的连接中,查看。你可以对里面进行创建、删除等操作。

wKiom1XxdFfg5lhWAABz7fdMu2Q701.jpg












本文转自白羊IT51CTO博客,原文链接:http://blog.51cto.com/000011211684/1693621,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章