在刚开始学习rsync时一直搞不清楚
客户端和服务端,特别容易将服务理解反。真的是头晕。
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 < ##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://[email protected]:/lnmp /databak/ 二、 直接使用rsync拉取文件 rsync -avz rsync://user@目标地址:/自己定义的模块,不是目录 /本地目录 需要输入目标服务器rsync自定义虚拟用户的密码 我们可以直接定义一个环境变量 [root@localhost rsync]# export RSYNC_PASSWORD=虚拟用户的密码 在执行该命令时就不需要密码了。 inotify(安装在数据产生服务器上,监控数据的变化,然后将需要备份的数据上传到rsyncd服务端) 总用量0 -rw-r--r-- 1 root root 0 1月 12 11:23 max_queued_events 则表示支持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 初始化内核参数 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://[email protected]:/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 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/* [email protected]: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安装一遍客户端(数据产生服务器):
利用inotify+rsync进行实时备份!
检测一下系统是否支持inotify
[root@localhost etc]# ll /proc/sys/fs/inotify/
-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
CentOS 6 上安装 inotify
CentOS 7 上安装inotify