一,使用rsync远程同步
1,简介:
rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同 部分(即支持增量备份),而不是每次都整份传送
rsync 包括如下的一些特性:
能更新整个目录树和文件系统;
有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
能用rsh、ssh 或直接端口做为传输端口;
支持匿名rsync 同步文件,是理想的镜像工具;
Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连 接。
Rsync的官方站点位于
rsync 服务器架设比较简单,可能我们安装好rsync后,并没有发现配置文件,以及rsync服务器启动程序,因为每个管理员可能对rsync 用途不一样,所以一般的发行版只是安装好软件 就完事了,让管理员来根据自己的用途和方向来自己架设rsync服务器;因为这个rsync应用比较广,能在同一台主机进行备份工作,还能在不同主机之间进行工作。在不同主机之间的进行备 份,是必须架设rsync 服务器的。
Rsync在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。在 下行同步(下载)中,备份源负责提供文档的原始 位置 ,发起端应对该位置具有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。
2.配置rsync同步
2.1 规划:服务节点(rsync服务端) 192.168.0.13 /rsync_test_dir
192.168.0.15 /rsync_test_dir
192.168.0.124 /rsync_test_dir
内容发布节点(rsync客户端) 192.168.0.14 /rsync_test_dir
PS: 这样设计的目的是为了方便后面使用inotify 实现自动同步
2.2 服务节点以192.168.0.13的配置为例(0.14和0.124的配置方法相同):
# yum -y install rsync
# vim /etc/rsyncd.conf (默认没有此文件,需要手动创建,也可以放在其他位置,启动服务时指定位置即可)
添加如下内容(仅供参考)
uid = root
gid = root
port = 873
use chroot = no
maxconnections = 100
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[rsync]
path = /rsync_test_dir/
ignore errors
read only = no
list = no
hosts allow = 192.168.0.0/24
auth users = rsync
secrets file = /etc/rsync.pwd
2.3 # vim /etc/rsync.pwd
添加 rsync:12345678
# chmod -R 600 /etc/rsync.pwd
2.4 启动rsync服务程序,执行”rsync --daemon”命令就可以启动rsync服务,以独立监听服务的方式运行,若要关闭rsync服务,可以采用 kill进程的方式
# rsync --daemon
# echo "rsync --daemon" >>/etc/rc.local
2.5 在发布节点(192.168.0.14)上进行同步测试
rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录
# vim /etc/rsync.pwd
12345678 (此处只写密码就可以了)
# chmod -R 600 /etc/rsync.pwd
# rsync -vzrtopg --delete --progress /rsync_test_dir/ rsync@192.168.0.124::rsync --password-file=/etc/rsync.pwd
出现 “sending incremental file list
./
1/
sent 46 bytes received 15 bytes 122.00 bytes/sec
total size is 0 speedup is 0.00” 则说明同步成功 ,也可以新建目录或文件测试能否同步过去
PS: sync命令的基本用法:
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
-r,–recursive 对子目录以递归模式处理
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
-u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
--port=PORT 指定其他的rsync服务端口
--delete 删除那些目标位置有而原始位置没有的文件
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes /second
--filter “- 文件名”需要过滤的文件
--exclude= :需要过滤的文件
-v 显示同步过程的详细信息
--exclude=files 指定名称的文件将不会被同步
--exclude-from=dir 指定的目录将不会被同步
二,安装inotify 配合rsync自动同步
1.inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布节点,服务节点无需安装inotify-tools
源码包下载地址
PS: 由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify 的支持,也可以用如下方法判断,内核是否支持inotify:
# uname -r
2.6.18-164.11.1.el5PAE
# ll /proc/sys/fs/inotify
总计 0
-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
如果有上面三项输出,表示系统已经默认支持inotify,接着就可以开始安装inotify-tools了。
1.1 # tar zxvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
./configure
make && make install
# ll /usr/local/bin/inotifywa*
-rwxr-xr-x 1 root root 37264 04-14 13:42 /usr/local/bin/inotifywait
-rwxr-xr-x 1 root root 35438 04-14 13:42 /usr/local/bin/inotifywatch
inotify-tools安装完成后,会生成inotifywait和inotifywatch两个指令,其中,inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树。
inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。
1.2 inotify相关参数
inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小。下面分别做简单介绍.
/proc/sys/fs/inotify/max_queued_evnets
表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:
echo 30000000 > /proc/sys/fs/inotify/max_user_watches
1.3 inotifywait相关参数
Inotifywait是一个监控等待事件,可以配合shell脚本使用它,下面介绍一下常用的一些参数:
-m, 即--monitor,表示始终保持事件监听状态。
-r, 即--recursive,表示递归查询目录。
-q, 即--quiet,表示打印出监控事件。
-e, 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
更详细的请参看man inotifywait。
1.4 编写脚本实现自动同步
# vim rsync.sh
#!/bin/bash
#Create Date: 2014-10-30
host1=192.168.0.13
host2=192.168.0.15
host3=192.168.0.124
user=rsync
src=/rsync_test_dir/
des=rsync
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} |while read file
do
rsync -vzrtopg --delete --progress ${src} ${user}@${host1}::${des} --password-file=/etc/rsync.pwd
rsync -vzrtopg --delete --progress ${src} ${user}@${host2}::${des} --password-file=/etc/rsync.pwd
rsync -vzrtopg --delete --progress ${src} ${user}@${host3}::${des} --password-file=/etc/rsync.pwd
echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
done
# nohup sh /usr/local/src/rsync.sh & (将脚本放在后台运行,脚本位置随意,注意一定要加nohup,否则断开ssh连接脚本就会停止运行)
# echo "/usr/local/src/rsync.sh &" >>/etc/rc.log (开机自动运行)
1.5 在/rsync_test_dir/ 创建或者删除文件,查看其他三个节点是否同步
PS: 菜鸟上路,不足之处请多指教,谢过先;