linux redhat rsync inotify 配置
??? rysnc是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能。?下面所讲的简单的rsync同步方法,依赖于SSH服务。一般rsync,ssh软件包都会默认安装的。检查方法:rpm -qa|grep -i rsync?注意:在实行备份方案前请用其他目录进行测试以防错误,切记!!?[root@mailsvr ~]# rsync -aSvH /home/* root@192.168.1.2:/home/ ?提示输入192.168.1.2机器的root用户密码,输入即可开始同步。?参数解释:a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
S 有效的处理零散文件
v verbose模式
H 保持hard links?上面这个表示 将本机的/home目录下所有的文件,同步到192.168.1.2机器的/home目录下。。
上面红色标记是源文件位置 蓝色标记是目的位置?如果想每次同步之后,两边的文件保持一致,需要添加参数--delete,添加这个参数时,一定要注意测试,否则会造成严重后果,删除了数据。?[root@mailsvr ~]# rsync -aSvH --delete /home/* root@192.168.1.2:/home/
? [root@mailsvr ~]# rsync -aSvH root@192.168.1.2:/home/* /home/
上面这条表示,将远程机器192.168.1.2机器上的/home目录下所有的文件,同步到本地的/home目录下,同步的时候注意源和目的,前面的是源文件位置,后面的目的文件位置?上面的命令,执行的时候,需要输入192.168.1.2机器的root用户密码,这样很烦,可以两台机器做个ssh信任,省去每次输入密码,在添加crontab自动执行。自动同步数据。?
比如要从node A上的abc用户, ssh到host B 上的def用户
那就要在A上的abc用户下面
#ssh-keygen -t rsa
把生成的 id_rsa.pub??放到B上def下的authorized_keys里
最好是 >> 而不是cp,这样不会抹掉之前的记录如:cat ?id_rsa.pub >>?authorized_keys
know_hosts 表示当前机器和其他多少机器建立了信任,能直接登录。
下面是2台主机建立ssh信任A机器 192.168.1.1
B机器 192.168.1.2?[root@mailsvr ~]# ssh-keygen -t rsa????? 创建证书
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
65:4a:68:cc:6c:23:2b:04:1a:3c:ee:d7:af:e7:e3:8d root@mailsvr
[root@mailsvr ~]#
然后把公匙传到B机的/root/.ssh中:
[root@mailsvr .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.2:/root/.ssh/authorized_keys
root@192.168.1.2's password:
id_rsa.pub?????????????????????????? ?100%? 219???? 0.2KB/s?? 00:00
[root@mailsvr .ssh]# ?验证一下,ssh登陆到B机,是否不需要输入密码,如果不用则建立成功[root@mailsvr .ssh]# ssh 192.168.1.2
Last login: Fri Jun? 6 09:59:28 2008 from 192.168.1.1
[root@mailsvr ~]#?
rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件
传递,但你也可以通过下列命令改变它的端口:??
rsync?--port?8730?otherhost::??
或者??
rsync?-e?'ssh?-p?2002'?otherhost:
?下面是rsync的另一种方法,服务器端和客户端使用。?两台机器都需要安装软件包,这里不罗嗦了。?服务器端配置:
?
?
?接下来编辑配置文件[root@mailsvr ~]?# cat /etc/rsyncd.confuid = root?? #root用户访问
gid = root?? #root组用户访问
use chroot = no???? #不能使用chroot
max connections = 9? #最大连接数
list = yes?? #允许列出文件清单
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.loghosts allow? = 192.168.1.2?? #只允许这个主机访问?[data]???? #发布项
path = /home/data/???? #发布的路径
ignore errors
read only = yes?? #只读
auth users = root?? #认证用户为root
secrets file = /etc/sery.pass??? #密码文件------------------------------------------------下面是密码文件[root@mailsvr ~]?# cat /etc/sery.pass
root:123456权限为600?服务器端配置完成,客户端只需要安装rsync包即可接下来创建密码文件[root@mailsvr ~]?# cat /etc/sery.pass
123456??????? #这里只需要输入服务器端密码文件中定义的密码即可。?使用命令开始同步?[root@mailsvr ~]?#? rsync -aSvH?--password-file=/etc/sery.pass root@192.168.1.2::data? /home/?解释:--password-file=/etc/sery.pass? 这段是密码文件,如果不加这段,需要手动输入服务器端定义好的密码。root@192.168.1.2::data?? 这里的:data是服务器端的发布项。?如果文件比较大,可以使用nohup将进城放在后台执行,[root@mailsvr ~]?#? nohup rsync -aSvH?--password-file=/etc/sery.pass root@192.168.1.2::data? /home/ >rsync.log &?上面的表示将远程机器192.168.1.2机器上发布的data目录,同步到本地机器的/home/目录下。? ? ? ? ? inotify 使用引用:
??? Inotify 是文件系统事件监控机制,计划包含在即将发布的 Linux 内核中作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。下面让我们一起学习如何安装 inotify 和如何构建一个示例用户空间应用程序来响应文件系统事件。??? 文件系统事件监控对于从文件管理器到安全工具的各种程序都是必要的,但是 dnotify(早期内核中的标准)存在一些局限性,这使我们期待出现一种更加完善的机制。抱着这种期待,我们发现了 inotify,一种更加现代化的文件系统事件监控替代品。??? 为什么使用 inotify???? 使用 inotify 取代 dnotify 的原因有很多。第一个原因是,dnotify 需要您为每个打算监控是否发生改变的目录打开一个文件描述符。当同时监控多个目录时,这会消耗大量的资源,因为有可能达到每个进程的文件描述符限制。??? 除此之外,文件描述符会锁定目录,不允许卸载(unmount)支持的设备,这在存在可移动介质的环境中会引发问题。在使用 inotify 时,如果正在监控被卸载的文件系统上的文件,那么监控会被自动移除并且您会接收到一个卸载事件。??? dnotify 不如 inotify 的第二个原因是 dnotify 有点复杂。注意,使用 dnotify 基础设施的简单文件系统监控粒度只停留于目录级别。为了使用 dnotify 进行更细粒度的监控,应用程序编程人员必须为每个受监控的目录保留一个 stat 结构的缓存。该用户空间的 stat 结构缓存需要用来明确确定当接收到通知信号时目录发生了什么变化。当获得通知信号时,生成 stat 结构列表并与最新的状态相比较。显而易见,这种技术是不理想的。??? inotify 的另一个优点是它使用文件描述符作为基本接口,使应用程序开发者使用 select 和 poll 来监控设备。这允许有效的多路 I/O 和与 Glib 的 mainloop 的集成。相反,dnotify 所使用的信号常常使程序员头疼并且感觉不太优雅。??? inotify 通过提供一个更优雅的 API 解决了这些问题,该 API 使用最少的文件描述符,并确保更细粒度的监控。与 inotify 的通信是通过设备节点提供的。基于以上原因,对于监控 Linux 2.6 平台上的文件,inotify 是您最明智的选择。??? linux/l-inotify.html#N10081">http://www-128.ibm.com/developerworks/cn/linux/l-inotify.html#N10081??? 正文:
??? sotfware: inotify-tools-3.13.tar.gz
??? OS:?????? ubuntu server 8.10
??? server1:? 192.168.6.2
??? server2:? 192.168.6.3??? 需求 server1 目录 /home/ludy/rsync 时时同步 server2 /home/ludy
??? 安装步骤:
??? 1.首先确认你的内核支持inotify,如果不支持对内核打补丁,一般情况内核在 2.6.3以上的都支持的。你可以确认下运行??? ludy@server1:~$ls -l /proc/sys/fs/inotify/
??? 总用量 0
??? -rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_queued_events
??? -rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_user_instances
??? -rw-r--r-- 1 root root 0 2008-12-16 09:07 max_user_watches
??? 如果没有的话,呵呵安装inotify~??? 2.安装软件 inotify-tools-3.13.tar.gz
??? ludy@server1:~$ tar zxvf inotify-tools-3.13.tar.gz??? ludy@server1:~$ cd inotify-tools-3.13??? ludy@server1:~$ ./configure --prefix=/usr/local/inotify
??? ludy@server1:~$ make
??? ludy@server1:~$ make install??? 2.生成SSH KEY 让 server1 ssh访问 server2不需要密码~
??? ludy@server1:~$ ssh-keygen
??? Generating public/private rsa key pair.
??? Enter file in which to save the key (/home/ludy/.ssh/id_rsa):?? //输入回车
??? Enter passphrase (empty for no passphrase):??????????????? //输入密码回车
??? Enter same passphrase again:?????????????????????????????? //再输入确认后回车
??? Your identification has been saved in /home/ludy/.ssh/id_rsa.
??? Your public key has been saved in /home/ludy/.ssh/id_rsa.pub.
??? The key fingerprint is:
??? f1:35:4e:88:11:f1:c4:5a:7a:c9:2a:90:d3:5e:0a:6f ludy@ludy
??? The key's randomart image is:
??? +--[ RSA 2048]----+
??? |??????? ++.????? |
??? |???????? =o.???? |
??? |???? o? o=o.+??? |
??? |??? = . +o++ .?? |
??? |???? * oSo. .??? |
??? |????? E .??????? |
??? |???? . .???????? |
??? |???????????????? |
??? |???????????????? |
??? +-----------------+
??? 3.然后把你用户目录下的 .ssh/id_rsa.pub 拷贝到 server2 的root下(我作的测试所以用的root,你最好不要用root很危险~)??? ludy@server1:~/.ssh$ scp id_rsa.pub root@192.168.6.3:~/.ssh
??? 拷贝过去后,进入server2 id_rsa.pub 把 名字改为 authorized_keys
??? root@server2:~/.ssh$? mv id_rsa.pub authorized_keys
??? root@server2:~/.ssh$ shown root:root authorized_keys???? //改变使用者 root
??? root@server2:~/.ssh$ chmod 600? authorized_keys????????? //改变权限??? 4.在server1编写shell脚本
??? cat inosync.sh??? #!/bin/sh
??? SRC=/home/ludy/rsync/
??? DST=root@192.168.6.3:/home/ludy
??? INWT=/usr/local/inotify/bin/inotifywait
??? RSYNC=/usr/bin/rsync??? $INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
??????????? rsync -aHqzt $SRC $DST
??? done
??? 我解释一下
??? $INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
??????????? rsync -aHqzt --delete $SRC $DST
??? -m 是保持一直监听
??? -r 是递归查看目录
??? -q 是打印出事件~
??? -e create,move,delete,modify
??? 监听 创建 移动 删除 写入 事件??? rsync -aHqzt $SRC $DST??? -a 存档模式
??? -H 保存硬连接
??? -q 制止非错误信息
??? -z 压缩文件数据在传输
??? -t 维护修改时间
??? -delete 删除于多余文件
??? 5.测试??? ludy@server1:~$ ./inosync.sh &??? ludy@server1:~$ cd rsync??? ludy@server1:~/rsync$ touch asdfa??? 在server2 机器查看??? root@server2:/home/ludy$ ls
??? asdfa??? 注意,可能第一次SSH 连接的时候需要输入一次密码,以后就不需要输入了~?? 6 删除进程:? pkill inotifywait查看进程:ps -ef|inotifywa 另外一个例子http://dodo.ideation-cn.cn/?p=615inotify 工具的下载地址http://wiki.github.com/rvoicilas/inotify-tools/http://www.lsxk.org/bbsanc.php?path=/groups/special.faq/FreeBSD/network123456789/M.1011552401.A