一、简介1知道rsync(remotesynchronize)是一个远程数据同步工具,可以通过LAN/WAN在多台主机之间快速同步文件。Rsync使用所谓的“Rsync算法”在本地和远程主机之间同步文件。该算法只传输两个文件的不同部分,而不是每次都发送整个文件,因此速度相当快;rsync支持大多数类Unix系统,无论是Linux、Solaris还是BSD,都经过了很好的测试;另外在windows平台下也有相应的版本,比如cwRsync和Sync2NAS等工具2原理rsync最初是用来代替rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件;rsync可以通过rsh或者ssh使用,也可以运行在daemon模式rsyncserver运行在daemon模式时会打开一个873端口,等待客户端连接。连接时,rsync服务器会检查密码是否匹配,如果密码检查通过,则可以开始文件传输。当第一次连接完成后,整个文件会传输一次,以后只需要增量备份即可。3特点可以镜像保存整个目录树和文件系统;轻松维护原文件权限、时间、软硬链接等;无需特殊权限即可安装;优化流程,文件传输效率高;可以使用rsh、ssh等方式传输文件,当然也可以直接通过socket连接;支持匿名传输2、ssh方式1本地同步环境:172.16.22.11#mkdirsrc#touchsrc/{a,b,c,d}#mkdirdest#rsync-av172.16.22.12:/data/test/src/dest/--远程同步到本地,需要输入root密码#rsync-avsrc/172.16.22.12:/data/test/dest/--同步本地文件到远程#rsync-avsrc172.16.22.12:/data/test/dest/--整个目录同步过去#rm-rfsrc/d--删除一个文件d#rsync-av--deletesrc/172.16.22.12:/data/test/dest/--delete,从中删除无关文件目标目录2.局域网间同步环境:172.16.22.11#useraddgeorge#passwdgeorge#mkdir/home/george/test#touch/home/george/test/g{1,2,3,4}3.指定用户同步在局域网中—172.16.22.12#useraddgeorge#passwdgeorge#mkdir/home/george/test#touch/home/george/test/g{1,2,3,4}—172.16。22.11#rsync-avsrc'-essh-lgeorge'172.16.22.12:/home/george--本地同步到远程#rsync-av172.16.22.12:/home/george/test/g*'-essh-lgeorge-p22'dest/3.Daemon模式环境:192.168.22.111,服务启动方式1.1,对于负载较重的rsync服务器应该使用独立运行模式#yuinstallrsyncxinetd--服务安装#/usr/bin/rsync--daemon1.2,对于A轻负载的rsync服务器可以与xinetd一起运行操作方式#yuminstallrsyncxinetd--服务安装#vim/etc/xinetd.d/rsync--配置托管服务,将以下项改为nodisable=no#/etc/init.d/xinetdstart--启动托管服务xinetd#chkconfigrsyncon#netstat-ntpl|grep873--检查服务是否启动2.配置细节两种rsync服务运行方式都需要配置rsyncd.conf,其格式类似于samba的主配置文件。全局参数在全局参数中有些模块还可以定义模块参数。此时该参数的值为所有模块的默认值。--address选项覆盖默认的本地所有IP端口-指定rsync守护程序侦听的端口号。xinetd运行时忽略此参数,而是在命令行上使用–port选项。default873motdfile-指定一个消息文件,当客户端连接到服务器时向客户端显示其内容pidfile-rsync的守护进程将其PID写入指定文件rsyncdaemonprocessinsteadofSendlogstosyslogsyslogfacility—指定rsync向syslog发送日志消息时的消息级别socketoptions—指定一个自定义的TCP选项lockfile—指定rsync的锁文件存放路径timeout=600—timeoutmoduleparameters模块参数主要用来定义rsync服务器上哪些目录要同步。模块声明的格式必须是[module]的形式,这个名字就是在rsync客户端看到的名字,类似于Samba服务器提供的共享名。服务器真正同步的数据是path指定的基本模块参数路径——指定当前模块在rsync服务器上的同步路径。获取到模块列表后,会展示给客户端。模块控制参数使用chroot=-默认为true。传输文件前,先chroot到path参数指定的目录;优点,安全;缺点,需要root权限,不能备份指向路径外的符号连接指向的目录的文件uid=--指定模块传输指定UID的文件;defaultnobodygid=—指定模块传输具有指定GID的文件;defaultnobodymaxconnections——***并发连接数,0为无限制lockfile——指定一个支持maxconnections参数的锁文件。默认/var/run/rsyncd.locklist—指定当客户端请求可用模块列表时是否应列出此模块。默认为true,displayreadonly=--只读选择,即不允许客户端向服务器上传文件。defaulttruewriteonly=-只写选项,即不让客户端从服务器下载文件。默认false忽略错误—忽略IO错误。默认为trueignorenonreadable—指定rysnc服务器完全忽略用户无权访问的文件。如果要备份的目录中包含备份程序不应使用的文件,这将很有用。falsetimeout=-此选项可以覆盖客户指定的IP超时。这确保rsync服务器不会永远等待崩溃的客户端。匿名rsync服务器的理想数字是600(以秒为单位)。0(无限制)不压缩—用于指定文件在传输前不应压缩。该选项可以定义一个命令选项列表,客户不允许将其用于该模块。您必须使用完整的选项名称,而不是短名称。当一个选项被拒绝时,服务器将报告错误信息并退出。例如,要防止使用压缩,应该是:“dontcompress=”。.gz.tgz.zip.z.rpm.deb.iso.bz2.tbz模块文件过滤参数exclude-指定以空格分隔的多个文件或目录(相对路径)并将它们添加到排除列表中。这相当于在客户端命令中使用–exclude来指定模式excludefrom——指定一个包含exclude规则定义的文件名,服务器从文件中读取exclude列表定义include——指定多个文件,用空格或目录分隔(相对路径),并将其添加到包含列表中。这相当于在客户端命令中使用--include来指定模式includefrom--指定一个包含include规则定义的文件名,服务器从中读取include列表定义模块用户认证参数authusers--指定以空格或逗号分隔用户名列表,只有这些用户才能连接到这个模块(与系统用户无关)。用户名和密码以明文形式存储在secrets文件参数指定的文件中。默认为匿名机密文件—指定一个rsync身份验证密码文件。此文件仅在定义了auth用户时才有效。Filepermissionsmustbe600strictmodes—指定是否监控密码文件权限。如果为true,密码文件只能由作为rsync服务器运行的用户访问,其他用户不能访问该文件。默认为true模块访问控制参数hostsallow—指定允许哪些主机客户端使用主机列表连接到此模块。与主机列表不匹配的主机将被拒绝。默认值为*hostsdeny-使用主机列表指定哪些主机客户端不允许连接到此模块moduleloggingparameterstransferlogging-使rsync服务器将传输操作记录到传输日志文件中。默认值为false日志格式—指定传输日志文件的字段。默认为:“%o%h[%a]%m(%u)%f%l”当设置了“logfile”参数时,会在每个文件的开头加上“%t[%p]”日志行;您可以使用的日志格式定义器如下:%o—操作类型:“发送”或“接收”%h—远程主机名%a—远程IP地址%m—模块名%u—认证用户名(用于匿名是)%f-文件名%l-文件长度字符%p-此rsync会话的PID%P-模块路径%t-当前时间%b-实际传输的字节数%c-发送文件时,记录验证这个文件的代码3.服务器配置#vim/etc/rsyncd.conf--编辑rsyncd服务的配置文件,没有默认的,需要编辑uid=root--rsync操作权限为rootgid=root--rsyncoperation权限为rootusechroot=no-是否让进程离开工作目录maxconnections=5-并发连接数,0为无限制timeout=600-超时时间pidfile=/var/run/rsyncd.pid-指定rsync的pid存放路径lockfile=/var/run/rsyncd.lock--指定rsync锁文件存放路径logfile=/var/log/rsyncd.log--specifiesthersynclogstoragepath[web1]--modulenamepath=/data/test/src-模块存储文件的基本路径ignoreerrors=yes-忽略一些无关的I/O错误readonly=no-客户端可以上传writeonly=no—客户端可以下载主机allow=192.168.22.12—客户端主机允许连接iphostsdeny=—黑名单,意思是任何主机列表=yesauthusers=web—验证此模块的用户名secretsfile=/etc/web.passwd--指定以"用户名:密码"的格式存储文件#mkdir/data/test/src--创建一个基本目录#mkdir/data/test/src/george--创建另一个目录#touch/data/test/src/{1,2,3}#echo"web:123">/etc/web.passwd--创建密码文件#chmod600/etc/web.passwd#servicexinetdrestart4.测试1.客户端环境:192.168。22.12#yum-yinstallrsync#mkdir/data/test2,小测试参数#rsync-avzPweb@192.168.22.11::web1/data/test/--输入密码123;将服务器web1模块中的文件同步到/data/test,参数说明:-a——参数,相当于-rlptgoD,-r——递归-l——是链接文件,表示复制链接文件-i——列出rsync服务器中的文件-p——表示保持原文件权限-t-保持文件原时间-g-保持文件原用户组-o-保持文件原所有者-D-等价到块设备文件-z-compressduringtransmission-P-transferprogress-v-传输过程中的进度等信息与-P#rsync-avzP--deleteweb@192.168.22.11::web1/data/有关test/--保持客户端和服务器完全一致,--delete#rsync-avzP--delete/data/test/web@192.168.22.11::web1--上传客户端文件到服务器#rsync-avzP--delete/data/test/web@192.168.22.11::web1/george--上传客户端文件到服务器的george目录#rsync-ir--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1--递归列出服务端web1模块的文件#rsync-avzP--exclude="*3*"--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1/data/test/--同步除路径和文件名包含“3”以外的所有文件*3.通过密码文件同步#echo"123">/tmp/rsync.password#chmod600/tmp/rsync.password#rsync-avzP--delete--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1/data/test/--调用密码文件4、客户端自动同步#crontab-e100*rsync-avzP—delete—password-file=/tmp/rsync.passwordweb@192.168.22.11::web1/data/test/#crontab-l5、实时数据同步环境:rsync+inotify-tools1,inotify-tools是为inotify文件监控提供的一套c开发接口库函数tlinux下的ools,也提供了一系列命令行工具,可以用来监控文件系统事件inotify-tools是用c写的,除了要求内核支持inotify外,不依赖其他inotify-tools提供了两个工具:一个是inotifywait,用于监控文件或目录的变化,一个是inotifywatch,用于统计文件系统访问次数2.安装inotify-tools#yuminstall--ygcc--安装依赖#mkdir/usr/local/inotify#tar-xfinotify-tools-3.14.tar.gz#cdinotify-tools-3.14#./configure--prefix=/usr/local/inotify/#make&&makeinstall3,设置环境变量#vim/root/。bash_profileexportPATH=/usr/local/inotify/bin/:$PATH#source/root/.bash_profile#echo'/usr/local/inotify/lib'>>/etc/ld.so.conf--加载库文件#ldconfig#ln-s/usr/local/inotify/include/usr/include/inotify4,常用参数-m—一直保持监听,默认触发事件为退出-r—递归查询目录-q—打印监听事件-e—定义监听事件,可用参数:access--访问文件modify--修改文件attrib--属性改变open--打开文件delete--删除文件create--新建文件move--文件移动--fromfile--读取需要监控的文件或从中排除文件thefile,一个文件行,排除文件以@开头--timefmt--时间格式--格式--输出格式--exclude--正则匹配要排除的文件,区分大小写--excludei--正则匹配要排除的文件excluded,case%y%isignoredm%d%H%M-year,month,day,clock%T%w%f%e-timepathfilenamestatus5.测试1检查是否有如下动作源目录:修改、创建、移动、删除、属性;一旦发生,就会发布到目标机器上;该方法是sshsrc:192.168.22.11(rsync+Inotify-tools)dest:192.168.22.12两台机器需要做ssh免密码登陆#mdkir/data/test/dest/--destmachine#mdkir/data/test/src/--srcmachine#rsync-av--delete/data/test/src/192.168.22.12:/data/test/dest--测试命令#vim/data/test/test.sh#!/bin/bash/usr/local/inotify/bin/inotifywait-mrq-emodify,创建,移动,删除,attrib/data/test/src|whilereadeventsdorsync-a--delete/data/test/src/192.168.22.12:/data/test/destechcho"`date+'%F%T'`事件:$events">>/tmp/rsync.log2>&1done#chmod755/data/test/test.sh#/data/test/test.shecho'/data/test/test.sh&'>>/etc/rc.local--设置开机启动我们也可以在目标机器上写这样一个脚本:rsync-a--delete/data/test/dest/192.168.22.11:/data/test/来源;这样可以实现双向同步作者:小运维来源:https://www.cnblogs.com/george-guo/p/7718515.html
