rsync+inotify实现数据实时同步

在刚开始学习rsync时一直搞不清楚

客户端和服务端,特别容易将服务理解反。真的是头晕。

 

 rsync+inotify实现数据实时同步

 

 

 

 

rsync的使用方法

服务端上传(需要存储数据的设备)

rsync -avz  /本地目录 user@目标地址:/目标目录

客户端下载(用来存储数据的设备)

rsync -avz  user@目标地址:/目标目录 /本地目录

//在拉取数据时可以加--delete 实现完全同步,将本地多出来的文件全部删除(谨慎使用)

 

服务端(数据备份服务器):

可以直接拉进脚本配置:

/usr/sbin/useradd rsync -s /sbin/nologin -M

#创建rsync进程的用户

touch /etc/rsync.password

#创建虚拟登录用户的密码文件

mkdir /soft/lnmp -p

mkdir /soft/elk -p

 

#以下为/etc/rsyncd.conf中的内容

cat >/etc/rsyncd.conf <<EOF

##rsyncd.conf start##

uid = rsync

#运行进程的用户

gid = rsync

#运行进程的用户组

address = 自己的Ip地址

#rsync服务绑定ip

port = 873

#默认监听端口

use chroot = no

#关闭伪根

max connections = 100

#最大连接数

timeout = 600

#超市时间

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

#忽略错误信息

read only = no

#是否开启只读权限

list = false

#不允许查看模块信息

dont compress = *.gz *.bz2

#哪些文件不进行压缩

hosts allow = 允许进行连接rsyncd服务的ip地址

#允许进程使用的ip地址

auth users = rsync_backup

#指定登录用户名(不是系统用户,自己创建虚拟用户)

secrets file = /etc/rsync.password

#创建虚拟用户的密码文件

 

 

[lnmp]

comment = Nginx web backup

path = /soft/lnmp

 

[web]

comment = web backup

path = /soft/elk

 这里有一部分配置我直接写在了全局里面。如果需要单独进行权限配置的话,可以将全局配置里面的一些条件改到自定义模块中去

 

EOF

chown -R rsync.rsync 需要共享目录

echo "rsync_backup:123456">/etc/rsync.password

chmod 600 /etc/rsync.password

rsync --daemon

  

客户端(数据产生服务器):

一、

在/etc下创建一个密码文件/etc/rsync.passwd

文件内容只写密码。保存后修改文件权限为600

chmod 600 /etc/rsync.passwd

[root@localhost ~]# rsync -avz --password-file=/etc/rsync.passwd rsync://rsync_backup@192.168.138.128:/lnmp /databak/

 

二、

直接使用rsync拉取文件

rsync -avz rsync://user@目标地址:/自己定义的模块,不是目录 /本地目录

需要输入目标服务器rsync自定义虚拟用户的密码

我们可以直接定义一个环境变量

[root@localhost rsync]# export RSYNC_PASSWORD=虚拟用户的密码

在执行该命令时就不需要密码了。

利用inotify+rsync进行实时备份!

inotify(安装在数据产生服务器上,监控数据的变化,然后将需要备份的数据上传到rsyncd服务端)

 检测一下系统是否支持inotify

[root@localhost etc]# ll /proc/sys/fs/inotify/

总用量0

-rw-r--r-- 1 root root 0 1月 12 11:23 max_queued_events
-rw-r--r-- 1 root root 0 1月 12 11:23 max_user_instances
-rw-r--r-- 1 root root 0 1月 12 11:23 max_user_watches

则表示支持inotify,我感觉这一步应该可以省略吧。但是这样学来的就照着来一遍吧反正不差这几秒钟。

 

vi /etc/sysctl.conf 内核参数修改

fs.inotify.max_queued_events = 16384  设置inotify实例时间(event)队列可容纳的时间数量(这个我目前还没能理解是用来干嘛的)

fs.inotify.max_user_instances = 1024  同时运行的inotify的进程数

fs.inotify.max_user_watches = 1048576  设置inotify同时监视多少个文件 

sysctl -p 初始化内核参数

 

CentOS 6 上安装 inotify

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar -xf  inotify*.gz

cd 到解压目录下

./configure --prefix=/usr/local/inotify && make && make install

安装完成之后想要执行inotify命令就将inotifywait inotifywacth加入到PATH中

ln -s /usr/local/inotify/bin/inotifywait /usr/bin/

 

到这一步基本已经完成inotify的安装

开一个终端试一下

Inotifywait -mrq -e create,modify,delete /想要监控的目录

然后在相应的目录下进行操作以检测Inotify是否正常工作。

 vim /root/scripts/inotify.sh

#!/bin/bash

SRC='/需要监控的目录/'

#需要监控的目录

DEST='rsync://rsync_backup@192.168.240.129:/mod(自定义模块)'

#保存文件的服务器目录,后面写的是模块。模块里面定义目录

passwd='/etc/rsync.passwd'

#被监控端配置的数据存储服务器上rsyncd用户的密码文件

/usr/bin/inotifywait -mrq --format '%w%f' -e modify,delete,create,attrib $SRC \

| while read DATE TIME DIR FILE

do

  FILEPATH=/soft/lnmp/${file}

  rsync -avz /soft/lnmp/* --delete --password-file=$passwd $DEST

  echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log

done

 

 

然后后台执行脚本:

nohup bash /root/scripts/inotify.sh

 

CentOS 7 上安装inotify

root@syn[17:54:17]:~$ uname -a

Linux syn 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@syn[17:54:23]:~$ cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

 

我有一台实体机安装的是CentOS 7.5直接yum安装就可以了

yum -y install inotify*

inotifywait 命令可以直接使用

 

监控脚本同CentOS 6的一样用就可以了。

 

在使用中遇见的问题:

[root@localhost lnmp]# rsync -avz /soft/lnmp/* root@192.168.138.129:rsync

ssh_exchange_identification: Connection closed by remote host

rsync: connection unexpectedly closed (0 bytes received so far) [sender]

rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6]

 

网上也有出现这种问题的。说是

/etc/ssh/sshd-conf 配置文件中的MaxStartups 参数(默认为10)

为sshd服务支持的最大连接数修改为50.

我修改了但是没有成功。

 

最后发现自己是/etc/hosts.allow;/etc/hosts.deny文件中禁止了该ip的连接,

修改这两个文件之后错误消失。

 

然后虚拟机用的是

cat /etc/redhat-release

CentOS Linux release 7.7.1908 (Core)

就不能直接yum安装。那就按照centos 6安装一遍

上一篇:rsync+inotify[实现时时备份](带完整脚本及其配置安装步骤)


下一篇:rsync+inotify实时同步