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

CentOS 6.5 rsync+inotify实现数据实时同步备份

207次阅读
没有评论

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

rsync
  remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而 rsync 说白了跟复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复制,兼具了 cp 和 scp 的功能,但是在跨主机时不具备 scp 的加密功能。
  rsync 有个特点,就是当你用 rsync 复制或跨主机复制时如果另一端也有一个同名的文件,他会先比较这两个文件的特征码是不是一致,如果不一致就会复制,并覆盖,如果一致他将不会复制,所以说这是一个快速复制工具,尤其是同步目录时,特别好用。

rsync 命令的工作模式有四种:
  1、shell 模式,也称为本地模式,速度要比 cp 快
  2、远程 shell 模式,其可以借助于 ssh 协议承载其数据传输过程
  3、列表模式,其工作方式与 ls 相似,仅列出源的内容:-nv
  4、服务器模式,此时,rsync 可以工作为守护进程,能够接收客户端的数据传输请求,在使用时可以在客户端使用 rsync 命令发送给守护进程,也可以向服务器主获取文件。

rsync 命令的选项:
  -n: 如果担心命令执行不正确,一同步复制,可能这个复制的后果是致命的,那后果可就严重了,这里我们可以加 - n 先测试一下
  -v: –verbose, 详细输出模式、显示详细过程的
  -q: –quiet, 静默模式,尽可能输出少的信息
  -c: –checksum, 可以对传输的文件进行较验的,强制对文件传输进行校验
  -r: –recursive, 递归复制
  -a: –archives, 归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性、如访问控制列表
  -p: –perms, 保存文件的权限
  -t: –times, 保留文件的时间戳
  -l: –links,保留文件的符号链接
  -g: –group, 保留文件的属组
  -o: –owner, 保留文件的属主
  -D: –devices, 保留设备文件

  -e SSH: 远程复制时,表示使用 ssh 协议作承载
  -z: 基于网络时使用,对文件压缩后传输
  –progress: 显示压缩进度条的
  –stats: 显示如何执行压缩和传输的,也就是显示传输状态的

注意:rsync 命令使用中,如果源参数的末尾有斜线,就会复制指定目录内容,而不复制目录本身; 没有斜线,则会复制目录本身,因此有如下命令:
  # rsync -r /mydata/data /backups/: 会把目录 data 直接同步至 /backups 目录中去
  # rsync -r /mydata/data/ /backups/: 会把目录中的 data/ 中的内容同步至 /backups 目录中

rsync 本地用法:
  # cd /etc /tmp/
  # rsync /tmp/etc/passwd /tmp/test/passwd -nv
推送到远程主机上去,把本地的 etc 文件推送到 172.16.251.244 主机上去:
  # rsync -r -e ssh /tmp/etc root@172.16.251.244:/tmp/

拉取远程服务器上的文件:
  # rsync -e ssh -r -a root@172.16.251.244:/etc/pam.d ./ –stats

把文件推送到服务器端上去:
# rsync -auzv messages myuser@172.16.27.1::my_data_rsync

如果我们从服务器上拉取文件时必须要指定文件路径
# rsync myuser@172.16.27.1::my_data_rsync/messages /tmp/

Inotify

  Inotify 是一个 Linux 特性,是一种强大的、细粒度的、异步的文件系统事件监控机制,linux 内核从 2.6.13 起,加入了 Inotify 支持,通过 Inotify 可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 就是这样的一个第三方软件。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

=====================rsync+inotify 实现实时同步过程 ============================================
这里我们以两台服务器来做这个实验:

CentOS 6.5 rsync+inotify 实现数据实时同步备份

以下步骤在从服务上操作:
配置 rsync 以 daemon 的方式运行:也就是在服务器端以守护进程的方式运行
  1、设定 rsync 服务器端
      1) 安装相关的程序包,他是基于 xinetd 工作的,超级守护进程
      # yum -y install xinetd
      安装好之后在 /etc/xinetd.d/ 这个目录下有一个 rsync 的文件
      2) 为 rsync 服务提供配置文件,而他的配置文件在 /etc/rsyncd.conf, 这个配置文件大概由两部分组成,一部分定义全局的,另一部分可以定义多个 rsync 共享目录:

# Global Settings 全局设定
uid = nobody:以哪个用户的身份运行或获取数据的
gid = nobody:用户都以来宾帐号的方式运行
use chroot = no:在服务运行时要不要把他锁定在家目录
max connections = 10:做为服务器端最大并发连接数
strict modes = yes : 表示是否工作在严格模式下,严格检查文件权限等相关信息
pid file = /var/run/rsyncd.pid : 定义 pid 文件路径
log file = /var/log/rsyncd.log : 定义日志文件存放路径的
# Directory to be synced  定义共享目录的模块
[my_data_rsync] 要同步的目录名称,多个目录名称是不能重名的
path = /myrsync/data : 定义目录的路径
ignore errors = yes : 表示如果中间复制过程有一个文件出错了是要继续复制还是中止复制,yes 表示继续复制,no 表示中止复制
read only = no : 如果打算让别人仅仅是来拉取数据的,yes 就可以了,如果打算让别人推送过来做备份的那就为 no,表示客户端是否可以推送的
write noly = no:只允别人在里面写数据,但不可以拉取数据
hosts allow = 172.16.251.244: 做白名单的,是否允许哪些主机可以访问的
hosts deny = *:黑名单的
    说明:
    1、二者都不出现时,默认为允许访问
    2、只出现 hosts allow,定义白名单,但没有被匹配到的主机由默认规则处理,即为允许
    3、只出现 hosts deny,定义黑名单,出现在名单中的都被拒绝
    4、二者同时出现,先检查 hosts allow, 如果匹配就 allow,否则检查 hosts deny,如果匹配则拒绝,如是二者都不匹配,则由默认规则处理,即为允许
list = false : 是否允许用户列出文件列表的
uid = root : 以哪个用户身份去获取文件的
gid = root
auth users = myuser: 做用户验证的,只允许哪个用户来复制
secrets file = /etc/.rsync.passwd : 存放验证用户的密码的
# 配置密码文件 /etc/rsyncd.passwd, 文件格式是明文的, 所以文件权限设为 600:
# vim /etc/rsyncd.passwd
myuser:mypasswd
# chmod 600 /etc/rsyncd.passwd
# 配置服务能够启动, 监听在 873/tcp 端口上
# chkconfig rsync on
# service xinetd start
# ss -tnl

接下来在内容发布的服务器上操作:
  由于 inotify 特性需要 Linux 内核的支持,在安装 inotify-tools 前要先确认 Linux 系统内核是否达到了 2.6.13 以上,如果 Linux 内核低于 2.6.13 版本,就需要重新编译内核加入 inotify 的支持,也可以用如下方法判断,内核是否支持 inotify:
  # uname -r
  2.6.32-431.el6.x86_64
  查看内核是否支持 inotify API,如果有以下三项,表示系统已经默认支持 inotify,接着就可以开始安装 inotify-tools 了,我这里使用的是 inotify-tools-3.14.tar.gz。
  # ll /proc/sys/fs/inotify
  -rw-r–r– 1 root root 0 04-13 19:56 max_queued_events
  -rw-r–r– 1 root root 0 04-13 19:56 max_user_instances
  -rw-r–r– 1 root root 0 04-13 19:56 max_user_watches
简单介绍一下这三个文件是做什么用的:
  max_queued_evnets: 表示调用 inotify_init 时分配给 inotify instance 中可排队的 event 的数目的最大值,超出这个值的事件被丢弃,但会触发 IN_Q_OVERFLOW 事件。
  max_user_instances: 表示每一个 real user ID 可创建的 inotify instatnces 的数量上限。
  max_user_watches: 表示每个 inotify instatnces 可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:echo “9000000” > /proc/sys/fs/inotify/max_user_watches

查看完相关的安装环境后那接下来我们就可以安装 inotify-tools 这个程序包了,安装步骤很简单, 程序包获取方法这里不再提供:
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
安装好之后可以查看 /usr/local/bin 下生成两个二进制文件:
# ll /usr/local/bin
创建一个目录存放要同步的数据:
# mkdir /myrsync_data/mydata
# cd /myrsync_data/mydata
# vim inotifyrsync.sh
#!/bin/bash
host=172.16.27.1 #从服务器的主机地址
data_dir=/myrsync_data/data #内容发布服务器上创建的同步数的路径
dst=my_data_rsync #从服务器上导出的共享目录
username=myuser #从服务器上 /etc/rsyncd.passwd 这个文件中定义的用户名
# 决对路径执行 inotifywait 这个程序,
#-m,即 –monitor,表示始终保持事件监听状态。
#-r,即 –recursive,表示递归查询目录。
#-q,即 –quiet,表示打印出监控事件。
#-e,即 –event,通过此参数可以指定要监控的事件,常见的事件有 modify、delete、create、attrib 等。
#–timefmt:指定时间的输出格式。
#–format:指定变化文件的详细信息。
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e modify,delete,create,attrib $data_dir | while read files
        do
                /usr/bin/rsync -vzrtopg –delete –progress –password-file=/etc/rsyncd.passwd $data_dir $username@$host::$dst
                echo “${files} was rsynced” >> /tmp/rsync.log 2>&1 #写入日志
        done
# 保存退出
# chmod 755 /web/wwwroot/inotifyrsync.sh
# bash /myrsync_data/mydata/inotifyrsync.sh &

测试一下同步的效果:

CentOS 6.5 rsync+inotify 实现数据实时同步备份

CentOS 6.5 rsync+inotify 实现数据实时同步备份

CentOS 6.5 rsync+inotify 实现数据实时同步备份

CentOS 6.5 rsync+inotify 实现数据实时同步备份

CentOS 6.5 rsync+inotify 实现数据实时同步备份

CentOS 6.5 rsync+inotify 实现数据实时同步备份

结束:
  rsync+inotify 实验完成,测试完全没问���,成功完成了数据实时同步功能,这里要说的是如果多台从服务器的话重复从服务器的配置步骤即可,再配置内容发布服务上的多个从服务器的相关联的信息即可以完成一主多从数据实时同步的功能,相信这个也不是什么难事,对吧,好了,就说到这里吧,有什么做得不到位的欢迎大神留言交流。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137655.htm

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