前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置rsync+inotify实现站点文件实时同步

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

作者头像
星哥玩云
发布2022-07-14 09:45:10
4460
发布2022-07-14 09:45:10
举报
文章被收录于专栏:开源部署开源部署

一、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_64

192.168.144.110

rsync+inotify-tools-3.14.tar.gz

rsync备份服务器

CentOS 7.0 x86_64

192.168.144.120

rsync+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、源服务器端测试
  • 执行脚本后,当前终端会变成实时监控界面,需要重新打开终端操作。
  • 在源服务器端共享模块目录下进行文件操作,然后去备份服务器下,可观察到文件已经被实时同步。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、rsync简介
  • 二、使用rsync备份工具
    • 2.1、rsync命令的基本用法
    • 三、配置rsync+inotify实时同步
      • 1、系统环境
        • 2、软件安装
          • 3、调整inotify内核参数
            • 4、配置rsync源于备份服务器
              • 4.1、创建账户验证文件
              • 4.2、创建独立密码文件
              • 4.3、编写触发式同步脚本
              • 4.4、源服务器端测试
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档