1、1 使用 Linux 的 rsync 命令实现 多服务器镜像同步实现功能:当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性,只要执行相同的 shell 脚本,rsync 就会自动找出有改动或删除的数据,将其传送到服务器上,使 Linux 服务器端某目录内的数据跟本地客户端某目录内的数据保持一致。方式一:一、服务器端(例:10.0.0.1*):1、创建用户和组groupadd www -g 48useradd -u 48 -g www wwwmkdir -p /opt/htdocschmod +w /opt/htdocschown www:www /opt/htdocs
2、2、编辑 rsync 的配置文件vi /etc/rsyncd.conf输入以下内容:uid=wwwgid=wwwmax connections=10use chroot=nolog file=/var/log/rsyncd.logpid file=/var/run/rsyncd.pidlock file=/var/run/rsyncd.lockzhangyanpath=/opt/htdocscomment = my htdocsignore errorsread only = nohosts allow=10.0.0.21 10.0.0.223、启动 rsync 服务器端/usr/bin/rs
3、ync -daemon二、客户端(例:10.0.0.21 和 10.0.0.22):1、创建一个 shell 脚本 push.shvi push.sh输入以下内容(10.0.0.1*为要推送到的目标服务器,zhangyan 为服务器端rsyncd.conf 配置文件中的模块名):引用#!/bin/sh/usr/bin/rsync -vzrtopg -delete $1 10.0.0.10:zhangyan/usr/bin/rsync -vzrtopg -delete $1 10.0.0.11:zhangyan/usr/bin/rsync -vzrtopg -delete $1 10.0.0.1
4、6:zhangyan/usr/bin/rsync -vzrtopg -delete $1 10.0.0.19:zhangyan/注:因为是内部局域网之间传输,这里没有设置密码。2、赋予 push.sh 执行权限chmod +x ./push.sh3、同步推送客户端某个目录中(例:/home/zhanguan/abc)的文件到服务器端的/opt/htdocs 目录:./push.sh /home/zhanguan/abc/注意:不要忘了 abc 后面的/。如果更改的文件太大,可以在上面语句的末尾加上空格和 make install2、 配置rsync 服务器的配置文件为/etc/rsyncd.c
5、onf,其控制认证、访问、日志记录等等。该文件是由一个或多个模块结构组成。一个模块定义以方括弧中的模块名开始,直到下一个模块定义开始或者文件结束,模块中包含格式为 name = value 的参数定义。每个模块其实就对应需要备份的一个目录树.更改服务器端的配置文件rootwinXP etc# vi rsyncd.conf (需要手动生成)uid = nobody 指定运行该服务的权限gid = nobodyuse chroot = nomax connections = 4 pid file = /var/run/rsyncd.pid 指定日志文件lock file = /var/run/rs
6、yncd.locklog file = /var/log/rsyncd.logtestpath = /testignore errorsread only = truelist = false#hosts allow = 192.168.3.0#hosts deny = 0.0.0.0/24uid = rootgid = rootauth users = love 该同步项目的认证用户名secrets file = /etc/backserver.pas 该同步项目的密码文件3、更改密码文件rootwinXP etc# vi backserver.pas love:love 用户名和密码4、更
7、改密码文件的权限chmod +600 /etc/rsync.pas5、启动 rsyncd 服务/usr/local/rsync/bin/rsync daemon 或者 #rsync -daemon加入 rc.local编辑/etc/rc.d/rc.local,在最后添加:/usr/local/bin/rsync -daemon四、 Rsync 客户端配置1、软件安装 同样需要安装 rsync 软件包2、编辑密码文件rootpxe etc# vi /etc/backserver.pas nibangjie #注意该文件只有密码部份。在同一台机器上做时,要将客户端的密码文件放在其他的目录中,在客户
8、端启动同步的-password-file 中指定他的路径就可以了。3、更改文件权限chmod +600 / etc/rsync.pas4、客户端启动同步: #rsync -vzrtopg -progress -delete nibangjie192.168.3.x:test -password-file=/etc/backserver.pas /var/test/ 把 3.x 的东西同步到了本机上了。(3.x 的/test 目录下的数据,同步到本机的/var/test 的目录下了 , 客户端密码位置-password-file=/etc/backserver.pas)五、 Rsync 详细参数
9、-v, -verbose 详细模式输出-q, -quiet 精简输出模式-c, -checksum 打开校验开关,强制对文件传输进行校验-a, -archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD-r, -recursive 对子目录以递归模式处理-R, -relative 使用相对路径信息-b, -backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为filename。可以使用-suffix 选项来指定不同的备份文件前缀。-backup-dir 将备份文件( 如filename) 存放在在目录下。-suffix=SUFFI
10、X 定义备份文件前缀-u, -update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)-l, -links 保留软链结-L, -copy-links 想对待常规文件一样处理软链结-copy-unsafe-links 仅仅拷贝指向 SRC 路径目录树以外的链结-safe-links 忽略指向 SRC 路径目录树以外的链结-H, -hard-links 保留硬链结-p, -perms 保持文件权限-o, -owner 保持文件属主信息-g, -group 保持文件属组信息-D, -devices 保持设备文件信息-t, -times 保持文件
11、时间信息-S, -sparse 对稀疏文件进行特殊处理以节省 DST 的空间-n, -dry-run 现实哪些文件将被传输-W, -whole-file 拷贝文件,不进行增量检测-x, -one-file-system 不要跨越文件系统边界-B, -block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节-e, -rsh=COMMAND 指定替代 rsh 的 shell 程序-rsync-path=PATH 指定远程服务器上的 rsync 命令所在路径信息-C, -cvs-exclude 使用和 CVS 一样的方法自动忽略文件,用来排除那些不希望传输的文件-existing
12、仅仅更新那些已经存在于 DST 的文件,而不备份那些新创建的文件-delete 删除那些 DST 中 SRC 没有的文件-delete-excluded 同样删除接收端那些被该选项指定排除的文件-delete-after 传输结束以后再删除-ignore-errors 及时出现 IO 错误也进行删除-max-delete=NUM 最多删除 NUM 个文件-partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输-force 强制删除目录,即使不为空-numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名-timeout=TIME IP 超时时间,单位为秒-I, -ignore-times 不跳过那些有同样的时间和长度的文件-size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间-modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0-T -temp-dir=DIR 在 DIR 中创建临时文件-compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份-P 等同于 -partial-progress 显示备份过程