一、配置rsync源服务器



   wKioL1hI9hjhE44SAABYBfOXqj0658.png

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

 

1.建立/etc/rsyncd.conf配置文件(同步源中)

该配置文件需要自行建立,下面将以原目录/var/www/html、备份账号backuper为例,介绍其配置方法。

 

[root@localhost ~]# vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes                                     //禁锢在原目录

address = 192.168.1.2                                //监听地址

port 873                                             //监听端口

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

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

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

[wwwroot]                                            //共享模块名称

path = /var/www/html                             //源目录的实际路径

comment = document root of www.benet.com

read only = yes                                  //仅允许以只读方式做同步

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

auth users = backuper                            //授权账户

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


注意:同步可以采用匿名方式。只需将auth userssecrets file配置记录去掉即可。


2.为备份账户创建数据文件

[root@localhost ~]# vim /etc/rsyncd_users.db

backuper:pwd123                                       //无须建立同名系统用户

[root@localhost ~]# chmod 600 /etc/rsyncd_users.db    //调整文件权限,避免账号信息泄露。未调整文件权限,会导致认证失败。


wKioL1hI-ALSggIVAAAErUOiin0351.png

注意:备份用户backuper需要对源目录/var/www/html有相应的读取权限。实际上只要other组有读取权限,则备份用户backuper和运行用户nobody也就有读取权限了。


1.启动rsync服务程序

[root@localhost~]# rsync --daemon                                  //启用rsync服务

[root@localhost~]# iptables -I INPUT -p tcp --dport 873 -j ACCEPT  //873端口开例外


wKiom1hI-AOQRJbcAAAFO2p6AYs836.png


如果需要结束rsync进程,可以执行:kill $(cat /var/run/rsyncd.pid)

 

二、使用rsync备份工具(在rsync客户机,发起端)

1.rsync命令的基本用法

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

常用选项:-r:递归模式,包含目录及子目录中的所有文件

  -l:对于符号链接文件任然复制为符号链接文件

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

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

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

  -p:保留文件的权限标记

  -t:保留文件的时间标记

  -g:保留文件的属组标记(仅超级用户使用)

  -o:保留文件的属主标记(仅超级用户使用)

  -H:保留硬链接文件

  -A:保留ACL属性信息

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

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

  --checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件

配置源的表示方法:  

  用户名@主机地址::共享模块名

或者      rsync://用户名@主机地址/共享模块名

 

注意:在本地使用rsync命令相当于cp命令


2.rsync备份操作

wKioL1hI-AOBbeMiAAANz7Wcf1U650.png

在发起端上发起远程同步


wKiom1hI-APxM00qAAADW80x3PM479.png

确认同步结果


wKiom1hI-ASgej6uAAAT8Z-1FwI380.png

加上选项--delete选项,会在目标位置中删除原始位置没有的文件。


可以结合crond服务来完成定期同步:

wKioL1hI-ASADa1oAAACmBc3diM487.png

wKiom1hI-ASRjIVzAAABStWuePA175.png

wKioL1hI-AWhrtIMAAAChwe1yMY896.png

创建密码文件


wKioL1hI-AWTxgkaAAABqzr1y3Y860.png

wKiom1hI-AXitJX8AAAFZRWduAo387.png

wKioL1hI-QvQpizhAAADEox6Ebs091.png

rsync命令指定密码文件,可以在同步过程中不用再输入密码。


三、配置rsync+inotify实时同步

rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作。

这里将在同步源上进行实时监控,如果有文件变动,便进行远程同步,将文件备份到客户机上。

注意:实现实时同步需要使用SSH秘钥对的方式验证身份

 

1.调整inotify内核参数

linux内核中,默认的inotify机制提供了三个调控参数:

max_queued_events             //表示监控事件队列(16384

max_user_instances            //最多监控实例数(128

max_user_watches              //每个实例最多监控文件数(8192


wKiom1hI-QyQyeR4AAACZkr5E6o776.png

wKioL1hI-Qzg6Z9eAAAEnyqnvuk879.png

wKiom1hI-Qzz1wX3AAABwPN7Pi0368.png

当要监控的目录、文件数量较多时,建议加大这三个参数值。


2.安装inotify-tools

wKioL1hI-QzivC83AAAG3ydzNPg894.png

inotify-tools软件包可以提供inotifywaitinotifywatch辅助工具程序,用来监控、汇总改动情况。

inotifywait命令格式(监控/var/www/html):

[root@localhost ~]# inotifywait -mrq -e create,delete,modify,move /var/www/html

选项:-m表示持续监控;

  -r表示递归整个目录;

  -q表示简化输出信息;

  -e表示用来指定要监控那些事件

 

3.编写触发式同步脚本

wKiom1hI-Q2yQNyTAAACj4qXDY8423.png

wKioL1hI-Q2CaFJWAAAQ1OsxTs4382.png


4.配置SSH密钥对验证

wKiom1hI-Q3gazubAAAB_y4WXQc030.png

在同步源上生成公钥文件


wKioL1hI-Q3wTDsNAAAfAkbZdcs319.png

将公钥文件传到发起端服务器,rput用户是发起端的用户,-i指定公钥文件。


wKiom1hI-Q6yzqeAAAACndLl0pk489.png

wKioL1hI-c_j_R30AAAB99sE7tY231.png

wKioL1hI-c_Dc7PEAAAEjAysKVo669.png

在发起端服务器上,修改配置文件/etc/ssh/sshd_conf,允许使用rput连接,并开启密钥对验证。


wKiom1hI-dCRZ-kQAAAFhaKJRqY167.png

测试SSH密钥对连接

 

最后,便可以在同步源上执行脚本文件,实时监控本服务器上的文件变化,并进行备份。