rsync+inotify实现数据实时同步

1、rsync

(一)、rsync简介

rsync是Linux和Unix下一款远程数据同步工具,rsync第一次会把数据全量同步到远端服务器,以后会对比两个文件的不一样,传输差别文件,实现增量同步
优势:安全性高、备份迅速,使用同步算法,只同步有变化的文件 备份文件保持原有文件的属性软硬链接,且支持排除备份等
缺点:在数据同步以前须要扫描全部的文件进行对比才能进行差别化同步,若是同步文件达到百万级或者千万级,扫描文件同步将变得很是的耗时,下降了同步的效率c++

(二)、rsync基本命令介绍(1V4)

rsync是一个强大的命令,他能够同时实现复制,删除,查看,远程同步等功能
1. rsync==cp
root@nfs01 test]# rsync -a aa.txt aa.txt.bak
[root@nfs01 test]# ls
aa.txt aa.txt.bak算法

二、 rsync==scp
[root@nfs01 test]# rsync -rp /test/ 10.0.0.41:/test/
root@10.0.0.41's password: vim

3rsync==rm安全

[root@nfs01 test]# mkdir /null
[root@nfs01 test]# rsync -r --delete /null/ /test/
[root@nfs01 test]# ls
4rsync==ls
[root@nfs01 test]# rsync /etc/hosts
-rw-r--r-- 352 2018/09/15 01:51:11 hostsbash

(三)、rsync工做方式

一、本地备份方式

语法:Local: rsync [OPTION...] SRC... [DEST]服务器

练习:[root@nfs01 test]# rsync -a /etc/hosts /tmp/hosts.bak
   [root@nfs01 test]# ll /tmp/hosts.bak
   -rw-r--r-- 1 root root 352 Sep 15 01:51 /tmp/hosts.bak网络

二、远程数据备份方式

语法:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
多线程

练习:[root@nfs01 test]# rsync -avz /backup/ root@10.0.0.41:/backup/
root@10.0.0.41's password:
sending incremental file list
./并发

sent 1703 bytes received 333 bytes 370.18 bytes/sec
total size is 1622 speedup is 0.80ide

  • 小提示:若是不指定user信息表示以当前用户进行登录

三、守护进程传输模式

语法:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

  • 小提示:这里的SRC与远程传输方式不一样,这里的指的是模块信息

    守护进程方式部署流程

    1、服务端部署流程
    1)检查软件是否安装
    [root@backup ~]# rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64
    2)编写配置文件(注意默认是没有的,须要手动建立)

    [root@backup ~]# vim /etc/rsyncd.conf
    #rsync_config
    #created by HQ at 2017
    ##rsyncd.conf start##
    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 200
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = jiang
    secrets file = /etc/rsync.password
    [backup]
    comment = "practice and use"
    path = /backup
    ~
    -- INSERT --

配置参数详细说明

配置参数 说明
uid = rsync 指定rsync服务运行的时候,向磁盘进行读取和写入操做的操做者
gid = rsync 指定rsync服务运行的时候,向磁盘进行读取和写入操做的操做组
use chroot = no 进行数据同步存储时,安全相关参数,默认内网进行数据同步,能够关闭
max connections = 200 定义向备份服务器进行数据存储的并发链接数
timeout = 300 定义与备份服务器创建的网络链接,在多长时间没有数据传输时,就释放链接
pid file = /var/run/rsyncd.pid 服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中
lock file = /var/run/rsync.lock 定义锁文件,主要用于配合max connections 参数,当达到最大链接就禁止继续访问
log file = /var/log/rsyncd.log 定义服务的日志文件保存路径信息
[backup] 指定备份目录的模块名称信息
path = /backup 指定数据进行备份的目录信息
ignore errors 在进行数据备份传输过程过程当中,忽略一些I/O产生的传输错误
list = false 确认是否能够将服务配置的模块信息,在客户端能够查看显示
hosts allow = 172.16.1.0/24 设置备份目录容许进行网络数据备份的主机地址或网段信息,即设置白名单
hosts deny = 0.0.0.0/32 设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单
auth users = jiang 指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不须要进行建立
secrets file = /etc/rsync.password 设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息

3)、建立备份服务管理用户
useradd rsync -M -s /sbin/nologin
4)建立备份目录
mkdir /backup
chown -R rsync.rsync /backup
5)建立认证文件
echo "jiang:jiang123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
6)启动rsync服务
rsync --daemon
2、客户端部署流程
1)确认软件是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2)建立认证密码文件
echo "jiang" >>/etc/rsync.password
chmod 600 /etc/rsync.password
3)、进行数据备份测试
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

2、利用inotify实现实时同步

(一)、inotify简介

Inotify 是一个 Linux 内核特性,它监控文件系统,而且及时向专门的应用程序发出相关的事件警告,好比删除、读、写和卸载操做等。要使用 inotify,必须具有一台带有 2.6.13 或更新内核的 Linux 机器

(二)、实时同步概念

1、为何要使用实时同步

  • 由于定时任务有缺陷,一分钟之内的数据没法进行同步,容易形成数据丢失

    2、实时同步的工做原理

    一、 建立要存储数据的目录
    二、 利用实时同步的软件监控咱们进行备份的数据目录
    三、 利用rsync服务进行数据推送传输备份

    (三)、实时同步软件部署

    1)、安装inotify软件
    yum install -y inotify-tools
    2)、编写实时同步的脚本
    #!/bin/bash
    ####################
    inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\
    while read line
    do
    rsync -az --delete /data/ jiang@172.16.1.41::backup --password-file=/etc/rsync.password
    done
    说明:在编写同步脚本以前须要保证rsyc守护进程方式同步正常

    (四)、inotify命令说明

    inotifywait -m|--monitor 始终保持事件监听状态-r 进行递归监控-q|--quiet 将无用的输出信息,不进行显示--timefmt <fmt> 设定日期的格式man strftime 获取更多时间参数信息--format <fmt> 命令执行过程当中,输出的信息格式 -e 指定监控的事件信息man inotifywait 查看全部参数说明和全部能够监控的事件信息总结主要用到的事件信息:create建立、delete删除、moved_to移入、close_write修改PS:由于rsync是单线程方式监控目录,因此若是文件数量达到百万级会下降实时同步的效率,这时候咱们能够考虑使用sersync+rsync的方式进行实时同步,sersync是国内开发者开发的一款软件,使用c++ 编写而成,他的优势:多线程方式工做,提升同步效率,使用方便,配置简单,感兴趣的小伙伴能够自行研究

相关文章
相关标签/搜索