• rsync+inotify实现服务器数据同步


    一、什么是rsync

    rsync,remote synchronize是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

    二、rsync特点

    1、能更新整个目录和树和文件系统;
    2、有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
    3、对于安装来说,无任何特殊权限要求;
    4、对于多个文件来说,内部流水线减少文件等待的延时;
    5、能用rsh、ssh 或直接端口做为传输入端口;
    6、支持匿名rsync 同步文件,是理想的镜像工具;

    三、搭建rsync服务器:

    备份服务器信息:

    server:192.168.1.161

    系统环境:CentOS release 6.5 (Final)

    内核版本:2.6.32-431.el6.x86_64

    客户端信息

    rhel:192.168.1.162

    系统环境:Red Hat Enterprise Linux Server release 6.5 (Santiago)内核版本:2.6.32-431.el6.x86_64

    需要备份的目录:将客户端/backup中的内容备份到备份服务器的/backup中

    1、数据同步rsync

    2、本地打包脚本实现

    3、配置定时任务

    备份服务器的配置

    # yum -y install rsync

    rsync版本:rsync.x86_64 0:3.0.6-12.el6

    配置文件

      rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)

      服务器配置文件(/etc/rsyncd.conf),该文件默认不存在,请创建它。

    具体步骤如下:

    # touch /etc/rsyncd.conf #创建rsyncd.conf,这是rsync服务器的配置文件。
    # touch /etc/rsyncd.secrets #创建rsyncd.secrets ,这是用户密码文件。
    # chmod 600 /etc/rsyncd.secrets #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!
    # touch /etc/rsyncd.motd

    编辑/etc/rsyncd.conf文件

    # vim  /etc/rsyncd.conf

    pid file = /tmp/rsyncd.pid

    port = 873

    address = 192.168.1.161

    uid = root

    gid = root

    use chroot = yes

    read only = yes

    hosts allow=192.168.1.0/24

    hosts deny=*

    max connections = 5

    motd file = /etc/rsyncd.motd

    log format = %t %a %m %f %b

    syslog facility = local3

    log file = /tmp/rsync.log

    transfer logging = yes

    timeout = 300

    [mysqldate]

      path = /backup

      list=no

      ignore errors

      auth users = root

      secrets file = /etc/rsyncd.secrets

      comment = zhushi

    编辑/etc/ rsyncd.secrets文件

    # vim rsyncd.secrets

    root:fanjinbao

    编辑/etc/rsyncd.motd文件

    里面内容想写啥就写啥

    启动rsync的服务

    # /usr/bin/rsync -–daemon --config=/etc/rsyncd.conf

    --daemon参数方式,是让rsync以服务器模式运行

    --config用于指定rsyncd.conf的位置,如果在/etc下可以不写

    客户端配置:

    客户端基本不用配置,直接备份就ok啦

    # rsync -azP --delete /backup  root@192.168.1.161:/

    常见的选项:

    -a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD

    -z , --compress 表示压缩传输

    -P 显示传输进度

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

    具体选项及参数说明:

    rsync有六种不同的工作模式:

    1、拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。

    2、使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。

    3、使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。

    4、 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。

    5、从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。

    6、列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
    -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

     

    rsync中的参数

    -r 是递归;

    -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;

    -L 复制软链接文件的原文件

    -t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;

    -z 传输时压缩;

    -P 传输进度;

    -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
    -e ssh的参数建立起加密的连接。

    -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时

    --progress是指显示出详细的进度情况

    --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致

    --exclude不同步的文件

    --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

    四、使用ssh密钥实现无交互备份。做成脚本,将rhel上的数据,定期备份到server上。

    在rhel上生成密钥对

    # ssh-keygen

    查看生成的公钥和私钥:

    [root@rhel backup]# ls /root/.ssh/

    id_rsa  id_rsa.pub  known_hosts

    将公钥上传到server数据源

    # ssh-copy-id root@192.168.1.161

    或者

    # scp /root/.ssh/id_rsa.pub  root@192.168.1.161:/root/.ssh/authorized_keys

    注:如果使用scp命令必须两台机器都可以用scp命令,否则不能使用

    五、配置rsync+inotify实现实时同步

    inotify概述:

    Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

    使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

    安装inotify-tools-3.13.tar.gz

    # tar zxvf inotify-tools-3.13.tar.gz

    # cd inotify-tools-3.13

    ./configure --prefix=/usr/local/inotify-tools

    # make

    # make install

    设置inotify-tools的环境变量

    # vim .bash_profile

    加入imotify的路径/usr/local/inotify-tools/bin

    # source .bash_profile

    执行监控:

    # inotifywait -mrq -e create,move,delete,modify /backup

    报错:

    error while loading shared libraries: libinotifytools.so.0

    解决办法:

    # ln -sv /usr/local/inotify-tools/lib/libinotify* /usr/lib/

    # ln -s /usr/local/inotify-tools/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

    # cp /usr/lib/libinotifytools.so.0 /usr/local/lib

    然后在执行监控

    # inotifywait -mrq -e create,move,delete,modify /backup

    就可以了

    同步脚本:

    # vim backup.sh

    #!/bin/bash

    inotifywait -mrq -e create,move,delete,modify /backup  | while read a b c

    do

       rsync -azP --delete /backup root@192.168.1.161:/

    done

    # chmod 755 backup.sh

    ./backup.sh &

    六、利用服务方式同步数据

    编辑服务端的配置文件

    # vim /etc/rsyncd.conf不用怀疑就用这个命令,没有就增加

    添加如下内容:

    port=8730

    log file=/var/log/rsync.log

    pid file=/var/run/rsync.pid

    [fanjinbao]

    path=/backup

    use chroot=true

    max connection=4

    read only=yes

    list=yes

    uid=root

    gid=root

    auth users=root

    secrets file=/etc/rs.passwd

    hosts allow=192.168.1.162

    注意:修改文件后不需要重启服务

    创建密码文件:

    # vim /etc/rs.passwd

    # chmod 400 /etc/rs.passwd

    启动服务:

    # rsync --daemon

    去客户端测试:

    # rsync -avzP --port 8730 test@192.168.1.161::test/ .

    在客户端指定密码文件,无交互同步数据

    # vim /etc/rsync_passwd编辑密码文件

    # chmod 400 /etc/rsync_passwd设置为只读

    # rsync -avzP --port 8730 --password-file=/etc/rsync_passwd test@192.168.1.161::test/ .

  • 相关阅读:
    【视频】特别适合新手的运维利器ansible入门教程手册(附带视频演示和源代码)
    OSI,TCP/IP,TCP,UDP,Socket基础知识整理与回顾
    (语法基础)浅谈面向切面编程(AOP)
    Docker容器安装配置SQLServer服务(Linux)
    Asp Core部署到IIS服务器
    Tomcat:Commons Daemon procrun stdout initialized
    linux查看端口常用命令
    Linux下 Nginx安装与配置(Centos7)
    Linux下将.Asp Core 部署到 Docker容器中
    React Native Tips
  • 原文地址:https://www.cnblogs.com/fansik/p/5261244.html
Copyright © 2020-2023  润新知