阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

配置rsync+inotify实现站点文件实时同步

205次阅读
没有评论

共计 4560 个字符,预计需要花费 12 分钟才能阅读完成。

一、rsync 简介

  • rsync 是 Linux 系统下的数据镜像备份工具。可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
  • rsync 的官方站点为 http:rsync.samba.org/

二、使用 rsync 备份工具

2.1、rsync 命令的基本用法

  • 用法类似于 cp 命令,例如将文件 /etc/fstab 和目录 /boot/grub 同步备份到.opt 目录下,其中 - r 表示递归整个目录,- l 选项用来备份链接文件。

rsync /etc/fstab /opt
rsync -rl /etc/fstab /boot/grub /opt

常用命令格式及备份选项:
-v, –verbose 详细模式输出

-q, –quiet 精简输出模式

-c, –checksum 打开校验开关,强制对文件传输进行校验

-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD

-r, –recursive 对子目录以递归模式处理

-p, –perms 保持文件权限

-o, –owner 保持文件属主信息

-g, –group 保持文件属组信息

-z, –compress 对备份的文件在传输时进行压缩处理

-delete 删除那些 DST 中 SRC 没有的文件,保证两边文件同步对齐

  • 配置源的表示方法
  • 在执行远程同步时,rsync 需要指定同步源服务器中的资源位置。

rsync 同步资源的表示方式为“用户名 @主机地址:: 共享模块名”
或者,“rsync:// 用户名 @主机地址 / 共享模块名”
前者为两个冒号分割形式,后者为 URL 地址形式,例如
执行以下操作将访问 rsync 同步源,并下载到本地 /root 目录下进行备份
[root@localhost~]# rsync -avz backuper@192.168.144.110::abc /root
或者
[root@localhost~]# rsync -avz rsync://backuper@192.168.144.110/abc /root

执行以下操作访问源服务器中的 abc 共享模块,并下载到本地的 /opt 目录下:
[root@localhost~]# rsync -avzH –delete backuper@192.168.144.110::abc /opt

实际生产环境中通常都是计划性重复执行的,为了在周期性计划任务中不用输入密码交互式执行,
需要创建一个密码文件,保存用户的密码,如 /etc/server.pass,在执行 rsync 同步时使用选项
–password-file=/etc/server.pass, 指定即可。

crontab -e
30 22 * * * /usr/bin/rsync –delete –password-file=/etc/server.pass backuperA@192.168.144.110::abc /opt  // 每天 22:30 执行脚本
servevice crond restart
chkconfig crond on

三、配置 rsync+inotify 实时同步

  • notify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从 2.6.13 版本起,加入了对 inotify 的支持。通过 inotify 可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,inotify-tools 便可以监控文件系统下文件的各种变化情况了。

  • 查看内核版本

uname -r

1、系统环境

主机操作系统IP 地址所需软件
rsync 源服务器CentOS 7.0 x86_64192.168.144.110rsync+inotify-tools-3.14.tar.gz
rsync 备份服务器CentOS 7.0 x86_64192.168.144.120rsync+inotify-tools-3.14.tar.gz

2、软件安装

rpm -q rsync // 查询 rsync 是否安装,一般为系统自带安装
yum install rsync -y // 若没有安装,使用 yum 安装

  • 安装 inotify 软件包

tar zxzvf notify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14
./configuer
make && make install

3、调整 inotify 内核参数

vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384    // 监控事件队列数
fs.inotify.max_user_instances = 1024    // 最多监控实例数
fs.inotify.max_user_watches = 1048576    // 实例最多监控文件数

4、配置 rsync 源于备份服务器

vim /etc/rsyncd.conf

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:
 uid = nobody                  //rsync 服务 uid
 gid = nobody                  //rsync 服务 gid
 use chroot = yes              // 禁锢家目录
 pid file = /var/run/rsyncd.pid    // 进程文件目录
address = 192.168.144.110      // 源服务器监听地址         
port = 873                      // 服务端口号
log file = /var/log/rsyncd.log  // 指定日志文件位置
hosts allow = *                // 允许任意网段服务器可与之同步
# max connections = 4          // 最大链接数
# # exclude = lost+found/
# # transfer logging = yes
# # timeout = 900
# # ignore nonreadable = yes
# # dont compress  = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#
# # [ftp]
# # path = /home/ftp
# # comment = ftp export area
#
#
 [abc]                  // 共享模块名称,两台服务器可以不同
 path = /var/www/html  // 共享模块路径,两台服务器可以不同
 comment = www.linuxidc.com  // 模块描述,两台服务器可以不同 
 read only = no        // 关闭只读权限,不写或者注释为默认选择只读
 write only = no        // 关闭可写权限,不写或者注释为默认选择不可写
 uid = root            // 指定模块 uid
 gid = root            // 指定模块 gid
 hosts allow = *        // 允许任意网段服务器访问此模块
 auth users=test        // 模块访问验证用户名称
 secrets file = /etc/rsyncd_users.db        // 模块验证密码文件,键值对形式
 dont compress  = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  // 同步过程中遇到此类文件不进行压缩

  • 此处需要注意,上述配置文件中,备份服务器的配置需要和源服务器一模一样,除了备份服务器的否则在源服务器上行文件时会报错。尤其是密码文件权限和独立密码文件权限需要为 600,否则也会报错。

  • 启动服务

rsync –daemon

  • 结束服务,kill 进程即可。

4.1、创建账户验证文件

  • 根据配置文件中,按需创建,注意文件路径与名称。

vim /etc/rsyncd_users.db

test:abc123    //” 用户名: 密码 ” 的形式

chmod 600 /etc/rsyncd_users.db

  • 由于这种形式在执行命令时需要交互式验证,因此需要创建独立密码验证文件。

4.2、创建独立密码文件

vim /etc/server.pass

abc123    // 只含密码的文件

chmod 600 /etc/server.pass

4.3、编写触发式同步脚本

vim /opt/ino.sh

#!/bin/bash
DESIP=192.168.144.120    // 设置源服务器需要将文件上行 (发送) 到备份服务器 IP 地址
INOTIFY_CMD=”inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/”
RSYNC_CMD=”rsync -azH –delete –password-file=/etc/server.pass /var/www/html/ test@$DESIP::abc/”
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [$(pgrep rsync | wc -l) -gt 0 ] ; then
        $RSYNC_CMD
    fi
done

  • 此处需要注意,在两台服务器需要同步的目录之间,也需要将目录权限放到最大,避免因目录本身权限报错。

chmod +x /opt/ino.sh

4.4、源服务器端测试

  • 执行脚本后,当前终端会变成实时监控界面,需要重新打开终端操作。
  • 在源服务器端共享模块目录下进行文件操作,然后去备份服务器下,可观察到文件已经被实时同步。

更多 rsync 相关教程见以下内容:

CentOS 6.5 rsync+inotify 实现数据实时同步备份 https://www.linuxidc.com/Linux/2016-11/137655.htm
rsync+inotify 实现数据的实时同步 https://www.linuxidc.com/Linux/2017-01/139778.htm
rsync+inotify 实现服务器之间文件实时同步详解  https://www.linuxidc.com/Linux/2016-11/137659.htm
Rsync 结合 Inotify 实时同步配置  https://www.linuxidc.com/Linux/2017-02/140877.htm
RSync 实现数据备份  https://www.linuxidc.com/Linux/2017-06/144913.htm
inotify+rsync 实现数据实时同步  https://www.linuxidc.com/Linux/2017-10/147901.htm
rsync+inotify 实现数据的实时备份  https://www.linuxidc.com/Linux/2016-11/137630.htm
rsync+inotify 实现数据自动同步  https://www.linuxidc.com/Linux/2017-03/141717.htm
使用 rsync 实现数据实时同步备份  https://www.linuxidc.com/Linux/2017-05/143462.htm
unison+inotify 实现数据实时双向同步  https://www.linuxidc.com/Linux/2018-01/150468.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4560字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中