centos7.4 Rsync配置和触发备份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7.4 Rsync配置和触发备份相关的知识,希望对你有一定的参考价值。

rsync是一个快速的备份工具,可以在不同主机间镜像同步整个目录树,简单来说就是备份一台服务器A数据到另一台B上,A有变化则同步到B,还可反向备份

本例:
192.168.80.81 rsync同步源(被备份)备份源服务器
192.168.80.82 rsync客户机(目标主机)发起端

1.备份源服务器80.81配置:
yum install -y rsync //7.4系统默认已安装,不需要额外安装
vi /etc/rsyncd.conf //以下配置rsync,原配置文件全删除,添加以下

uid = nobody //rsync默认使用nobody用户
gid = nobody
use chroot = yes //禁锢在源目录/var/www/html里(查看下面path配置)
address = 192.168.80.81 //自己的地址
port 873 //默认端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24 //允许的客户机网段
[wwwroot] //共享模块名称
path = /var/www/html //源目录实际路径
comment = Document Root of www.aa.com //描述备注信息
read only = yes //只读 no 可读可写则是yes
dont compress = .gz .bz2 .tgz .zip .rar .z //排除的压缩类型
auth users = backuper //授权登陆rsync的账户(不是系统用户)
secrets file = /etc/rsyncd_users.db //存放账户的文件

根据上面配置文件里建立虚拟用户配置文件并设置恰当的权限
vi /etc/rsyncd_users.db
backuper:abc123
chmod 600 /etc/rsyncd_users.db

启动、关闭rsync程序---
rsync --daemon
netstat -anpt | grep rsync
killall -3 rsync

2.192.168.80.82客户机(发起端)的同步测试:
这里分为两种模式:ssh源和rsync源

①客户机使用rsync源同步:
下行同步:(本机和80.81保持一致)
rsync -avz [email protected]::wwwroot /aaa
//把同步源服务器80.81分享的目录wwwroot下载到本机/aaa 提示输入backuper密码abc123

还可逆向(反向,上行)同步:(80.81和本机保持一致)
rsync -avz /aaa [email protected]::wwwroot
//把本机文件/aaa同步到同步源服务器80.81wwwroot目录下
(需要注意:在80.81配置里开启read only=no ,还有系统中wwwroot本身的写入权限:chown -R nobody /var/www/html)

把下面的命令加到/etc/profile里可以不交互
export RSYNC_PASSWORD=abc123

下面举几个备份同步的例子:
A例:
80.81里有a b c d e
80.82里空 执行rsync -avz [email protected]::wwwroot /aaa后
80.82里有a b c d e

B例:
80.81里有a b c d e f
80.82里有a b c d e g

执行rsync -avz [email protected]::wwwroot /aaa
80.82里有a b c d e f g (把本地没有的f同步过来了)

执行rsync -avz --delete [email protected]::wwwroot /aaa
80.82里有a b c d e f (delete参数是删除本地有但同步源没有的文件g)
这条命令就是将同步源和客户机文件完全保持一致了

rsync -avz --delete A B
将B完全同步和A一致 不管正向还是反向同步 和A一致

rsync -avz A B
把A同步到B里,A里有的全部同步到B

②客户机使用ssh源同步:
原理基本和rsync一致,但使用ssh源,同步源服务器80.81就不要配置配置文件了,直接启动rsync服务即可
下行同步:rsync -avz [email protected]:/bin/ /aaa
//把同步源服务器80.81分享的目录下载到本地/aaa,全部使用绝对路径,和scp命令相似
(注意使用的是root用户)

逆向同步:rsync -avz /aaa/ [email protected]:/opt/
//把本机文件/aaa同步到同步源服务器80.81/opt/目录下
(需要在80.81系统中/opt/开启写入权限)

如果避免交互的话需要配置公钥验证:
ssh-keygen -t rsa 本机80.82生成密钥
ssh-copy-id [email protected] 把私钥传给80.81服务器

举例同上rsync源

两种不同源的格式比较:
rsync -avz [email protected]:/bin/ /aaa ssh源
rsync -avz [email protected]::wwwroot /aaa rsync源

3.如何实现源80.81上面分享的文件wwwroot(/var/www/html/)里文件一有变动就实时同步到本机80.82的/aaa呢?
使用触发备份可解决这一需求:
在源80.81上:
①调整内核参数:
vi /etc/sysctl.d/te.conf //自己创建的te.conf文件
fs.inotify.max_queued_events = 16384 //监控队列大小
fs.inotify.max_user_instances = 1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数
sysctl -p

②编译安装inotify
tar xf inotify-tools-3.14 //需要自行下载
cd /opt/inotify-tools-3.14/
./configure
make && make install

③测试监控效果
inotifywait -mrq -e modify,create,move,delete /var/www/html/
//被监控目录/var/www/html/ 出现修改创建重命名删除等动作 会有输出显示
(这条命令是前台运行的,需要复制putty会话,来测试查看)
m(持续监控)r(递规整个目录)q(简化输入信息) -e(指定监控的事件)

④可通过脚本来自动触发备份
vi a.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/"
RSYNC_CMD="rsync -azH --delete [email protected]::wwwroot /aaa/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 5 ] ; then
$RSYNC_CMD
fi
done

sh a.sh & //默认前台运行,需要挂在后台运行

⑤测试触发备份:
在80.81的/var/www/html里创建或者删除文件,
到80.82上的/aaa/里查看相应变化,会实时同步

以上是关于centos7.4 Rsync配置和触发备份的主要内容,如果未能解决你的问题,请参考以下文章

Rsync + inotify 实现文件实时同步

Rsync 的备份

rsync服务教程

rsync服务教程

Centos7.4 搭建rsync+inotify 实现数据同步

sersync 同步