rsync+inotify实现数据实时同步

一、rsync

(一)、rsync简介

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

(二)、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

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

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 hosts

(三)、rsync工作方式

1、本地备份方式

语法: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

2、远程数据备份方式

语法:
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.80

  • 小提示:如果不指定user信息表示以当前用户进行登陆

3、守护进程传输模式

语法:
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)检查软件是否安装
    [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
二、客户端部署流程
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

二、利用inotify实现实时同步

(一)、inotify简介

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

(二)、实时同步概念

一、为什么要使用实时同步

  • 因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失

    二、实时同步的工作原理

    1、 创建要存储数据的目录
    2、 利用实时同步的软件监控我们进行备份的数据目录
    3、 利用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++ 编写而成,他的优点:多线程方式工作,提高同步效率,使用方便,配置简单,感兴趣的小伙伴可以自行研究

转载于:https://blog.51cto.com/13268236/2289753

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值