系统环境:CentOS 6.3 rsync服务器 CentOS 6.3 rsync客户端 IP地址分别为:10.1.4.44服务器、10.1.4.41客户端 所需软件包:rsync-3.0.9.tar.gz 1、rsync 服务器 rsync,remote synchronize思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,能够保持原来文件的权限、时间、软硬连接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,并且能够经过ssh方式来传输文件,这样其保密性也很是好,另外它仍是免费的软件。 rsync 包括以下的一些特性: 能更新整个目录和树和文件系统; 有选择性的保持符号连接、硬连接、文件属于、权限、设备以及时间等; 对于安装来讲,无任何特殊权限要求; 对于多个文件来讲,内部流水线减小文件等待的延时; 能用rsh、ssh 或直接端口做为传输入端口; 支持匿名rsync 同步文件,是理想的镜像工具; rsync 服务器架设比较简单,可能咱们安装好rsync后,并无发现配置文件,以及rsync服务器启动程序,由于每一个管理员可能对rsync 用途不同,因此通常的发行版只是安装好软件就完事了,让管理员来根据本身的用途和方向来本身架设rsync服务器;由于这个rsync应用比较广,能在同一台主机进行备份工做,还能在不一样主机之间进行工做。在不一样主机之间的进行备份,是必须架设rsync 服务器的。 2、 rsync服务器安装 rysnc的官方网站:http://rsync.samba.org能够从上面获得最新的版本。目前最新版是3.0.9。 [root@server ~]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz [root@server ~]# tar xvf rsync-3.0.9.tar.gz [root@server ~]# cd rsync-3.0.9 [root@server rsync-3.0.9]# ./configure --prefix=/usr [root@server rsync-3.0.9]# make [root@server rsync-3.0.9]# make install 注:在用源码包编译安装以前,您得安装gcc等编译开具才行 3、 rsync服务器的配置文件rsyncd.conf rsync的主要有如下三个配置文件: rsyncd.conf(主配置文件) rsyncd.secrets(密码文件) rsyncd.motd(rysnc服务器信息) 服务器配置文件(/etc/rsyncd/rsyncd.conf),该文件默认不存在,请建立: [root@server etc]# mkdir rsyncd 注:在/etc目录下建立一个rsyncd的目录,咱们用来存放rsyncd.conf 、rsyncd.secrets、rsyncd.mond文件 [root@server rsyncd]# touch rsyncd.conf 注:建立rsyncd.conf ,这是rsync服务器的配置文件 [root@server rsyncd]# touch rsyncd.secrets 注:建立rsyncd.secrets ,这是用户密码文件 [root@server rsyncd]# chmod 600 rsyncd.secrets 注:为了密码的安全性,咱们把权限设为600 [root@server rsyncd]# ls -lh rsyncd.secrets -rw------- 1 root root 12 9月 14 11:56 rsyncd.secrets [root@server rsyncd]# touch rsyncd.motd [root@server rsyncd]# ll 总用量 12 -rw-r--r-- 1 root root 643 9月 14 11:55 rsyncd.conf -rw-r--r-- 1 root root 172 9月 14 11:58 rsyncd.motd -rw------- 1 root root 12 9月 14 11:56 rsyncd.secrets 配置编辑: rsyncd.conf 、rsyncd.secrets 、rsyncd.motd 文件; 一、配置rsyncd.conf文件 rsyncd.conf 是rsync服务器主要配置文件,咱们来个简单的示例: 备份服务器上的/data/share目录下全部文件,手动添加内容以下: [root@server ~]# vim /etc/rsyncd/rsyncd.conf # Distributed under the terms of the GNU General Public License v2 # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中 port = 873 注:指定运行端口,默认是873,您能够本身指定 address = 10.1.4.44 注:指定服务器IP地址 #uid = nobody 注:服务器端传输文件时,要发哪一个用户和用户组来执行,默认是nobody #gid = nobody 注:服务器端传输文件时,要发哪一个用户和用户组来执行,默认是nobody uid = root gid = root use chroot = yes read only = yes #limit access to private LANs hosts allow=10.1.4.0/255.255.255.0 hosts deny=* max connections = 5 注:客户端最多链接数 motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log file log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync #transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [samba_data] 注:模块 path = /data/share 注:指定文件目录所在路径 list=no 注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。若是你不想列出来,就no ;若是是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你本身知道就好了 ignore errors 注:忽略IO错误,详细的请查文档 auth users = root 注:认证用户是root ,是必须在服务器上存在的用户 secrets file = /etc/rsyncd/rsyncd.secrets 注:密码存在rsyncd.secrets文件里 注: 关于 auth users 是必须在服务器上存在的真实的系统用户,若是你想用多个用户,那就以,号隔开;好比 auth users = root , user1 二、配置rsyncd.secrets文件 密码文件: rsyncd.secrets的内容格式 [root@server ~]# vim /etc/rsyncd/rsyncd.secrets root:111111 user:111111 用户名:密码 注:root:111111 而咱们在例子中rsyncd.secrets的内容以下相似的;在文档中说,有些系统不支持长密码,本身尝试着设置一下吧。另外 rsyncd.secrets文件权限对其它用户组是不可读的。若是你设置错了,可能rsync不工做。 注意: 一、将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 不然没法备份成功! 出于安全目的,文件的属性必需是只有属主可读。 #chown root.root rsyncd.secrets #修改属主 #chmod 600 rsyncd.secrets #修改权限 二、这里的密码值得注意,为了安全,你不能把系统用户的密码写在这里。好比你的系统用户 root 密码是 abcdefg ,为了安全,你可让rsync 中的root 为 111111 。这和samba的用户认证的密码原理是差很少的; 三、配置rsyncd.motd 文件 它是定义rysnc 服务器信息的,也就是用户登陆信息。好比让用户知道这个服务器是谁提供的等;相似ftp服务器登陆时,咱们所看到的提示信息……。 固然这在全局定义变量时,并非必须的,你能够用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为: [root@server ~]# vim /etc/rsyncd/rsyncd.motd ++++++++++++++++++++++++++++++++++++++++++++++ Welcome to use the mike.org.cn rsync services! 2002------2012 ++++++++++++++++++++++++++++++++++++++++++++++ 4、架设rsync服务器的说明 一、全局定义 在rsync 服务器中,全局定义有几个比较关健的,根据咱们前面所给的配置文件 rsyncd.conf 文件; pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中 port = 873 注:指定运行端口,默认是873,您能够本身指定 address = 10.1.4.44 注:指定服务器IP地址 uid = nobody gid = nobdoy 注:服务器端传输文件时,要发哪一个用户和用户组来执行,默认是nobody。 若是用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。因此我就偷懒,为了方便,用了root 。不过您能够在定义要同步的目录时定义的模块中指定用户来解决权限的问题。 use chroot = yes 注:用chroot,在传输文件以前,服务器守护程序在将chroot 到文件系统中的目录中,这样作的好处是可能保护系统被安装漏洞侵袭的可能。缺点是须要超级用户权限。另外对符号连接文件,将会排除在外。也就是说,你在rsync服务器上,若是有符号连接,你在备份服务器上运行客户端的同步数据时,只会把符号连接名同步下来,并不会同步符号连接的内容;这个须要本身来尝试 read only = yes 注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,本身尝试是作什么用的吧 #limit access to private LANs hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 注:在您能够指定单个IP,也能够指定整个网段,能提升安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开 max connections = 5 注:客户端最多链接数 motd file = /etc/rsyncd/rsyncd.motd 注:motd file 是定义服务器信息的,要本身写 rsyncd.motd 文件内容。当用户登陆时会看到这个信息。 log file = /var/log/rsync.log 注:rsync 服务器的日志 transfer logging = yes 注:这是传输文件的日志 log format = %t %a %m %f %b syslog facility = local3 timeout = 300 2 模块定义 模块定义什么呢?主要是定义服务器哪一个目录要被同步。每一个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点像Samba服务器提供的共享名。而服务器真正同步的数据是经过 path 来指定的。咱们能够根据本身的须要,来指定多个模块。每一个模块要指定认证用户,密码文件、但排除并非必须的; 咱们来个简单的示例: 好比咱们要备份服务器上的 /data/share 和/opt ,在/data/share中,我想把beinan和samba目录排除在外; [samba] 注:模块,它为咱们提供了一个连接的名字 path = /data/share 注:指定文件目录所在路径 auth users = root 注:认证用户是root ,是必须在 服务器上存在的用户 list=yes 注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。若是你不想列出来,就no ;若是是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你本身知道就好了 ignore errors 注:忽略IO错误,详细的请查文档 secrets file = /etc/rsyncd/rsyncd.secrets 注:密码存在rsyncd.secrets文件 comment =root home data 注:注释能够本身定义,写什么都行,写点相关的内容就行 exclude = beinan/ samba/ 注:exclude 是排除的意思,也就是说,要把/home目录下的beinan和samba 排除在外; beinan/和samba/目录之间有空格分开 [beinan] 注:模块,它为咱们提供了一个连接的名字 path = /opt 注:指定文件目录所在路径 list=no comment = data auth users = user1 注:是必段在服务器上存在的用户 secrets file = /etc/rsyncd/rsyncd.secrets ignore errors 5、启动rsync 服务器及防火墙的设置 一、启动rsync服务器 启动rsync 服务器至关简单,–daemon 是让rsync 以服务器模式运行; [root@server ~]#/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf 注: 若是你找不到rsync 命令,你应该知道rsync 是安装在哪了。好比rsync 可执行命令可能安装在了 /usr/local/bin目录;也就是以下的命令; [root@server ~]#/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf 固然您也能够写一个脚原本开机自动启动rysnc 服务器,你本身查查文档试试,这个简单。由于我用slackware 也有一个相似的脚本。我感受不如直接手工运行方面,或者把这个命令写入rc.local文件中,这样也同样能自动运行; [root@server ~]# netstat -anp |grep :873 tcp 0 0 10.1.4.44:873 0.0.0.0:* LISTEN 5696/rsync 2 、rsync服务器和防火墙 Linux 防火墙是用iptables,因此咱们至少在服务器端要让你所定义的rsync 服务器端口经过,客户端上也应该让经过。 [root@server ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT [root@server ~]#iptables -L 查看一下防火墙是否是打开了 873端口; 6、经过rsync客户端来同步数据 语法详解 在配置完rsync服务器后,就能够从客户端发出rsync命令来实现各类同步的操做。rsync有不少功能选项,下面就对介绍一下经常使用的选项: rsync的命令格式能够为: 1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST 2. rsync [OPTION]... [USER@]HOST:SRC DEST 3. rsync [OPTION]... SRC [SRC]... DEST 4. rsync [OPTION]... [USER@]HOST::SRC [DEST] 5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST 6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] rsync有六种不一样的工做模式: 1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工做模式。 2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。 3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。 4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。 5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。 6. 列远程机的文件列表。这相似于rsync传输,不过只要在命令中省略掉本地机信息便可。 -a 以archive模式操做、复制目录、符号链接 至关于-rlptgoD rsync中的参数 -r 是递归 -l 是连接文件,意思是拷贝连接文件; -p 表示保持文件原有权限; -t 保持文件原有时间; -g 保持文件原有用户组; -o 保持文件原有属主; -D 至关于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,本身试试。能够看文档; -e ssh的参数创建起加密的链接。 -u只进行更新,防止本地新文件被重写,注意二者机器的时钟的同时 --progress是指显示出详细的进度状况 --delete是指若是服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致 --password-file=/password/path/file来指定密码文件,这样就能够在脚本中使用而无需交互式地输入验证密码了,这里须要注意的是这份密码文件权限属性要设得只有属主可读。 1 、rsync 服务器上的所提供的同步内容 在rsync服务器上查看提供了哪些可用的数据源。 [root@server ~]# rsync --list-only root@10.1.4.44::samba_data ++++++++++++++++++++++++++++++++++++++++++++++ Welcome to use the mike.org.cn rsync services! 2002------2012 ++++++++++++++++++++++++++++++++++++++++++++++ Password: drwxr-xr-x 4096 2012/09/14 12:04:57 . drwxrwxrwx 4096 2012/09/14 12:04:57 caiwu drwxrwxrwx 4096 2012/09/14 12:24:54 jishu drwxrwxrwx 4096 2012/09/14 12:22:11 public drwxrwxrwx 4096 2012/09/14 12:04:57 yanfa 注: 前面是rsync 所提供的数据源,也就是咱们在rsyncd.conf 中所写的[samba_data]模块。而“linuxsir home data”是由[samba_data]模块中的 comment = root home 提供的;为何[samba_data] 数据源列出来呢?由于咱们在[samba_data]中已经把list=yes。 二、rsync客户端安装 rysnc的官方网站:http://rsync.samba.org能够从上面获得最新的版本。目前最新版是3.0.9。 [root@server ~]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz [root@client ~]# tar xvf rsync-3.0.9.tar.gz [root@client ~]# cd rsync-3.0.9 [root@client rsync-3.0.9]# ./configure --prefix=/usr [root@client rsync-3.0.9]# make [root@client rsync-3.0.9]# make install 注:在用源码包编译安装以前,您得安装gcc等编译开具才行 在rsync客户端上查看提供了哪些可用的数据源: [root@client ~]# rsync -avzP root@10.1.4.44::samba_data ++++++++++++++++++++++++++++++++++++++++++++++ Welcome to use the mike.org.cn rsync services! 2002------2012 ++++++++++++++++++++++++++++++++++++++++++++++ Password: receiving incremental file list drwxr-xr-x 4096 2012/09/14 12:04:57 . drwxrwxrwx 4096 2012/09/14 12:04:57 caiwu drwxrwxrwx 4096 2012/09/17 11:57:00 jishu drwxrwxr-x 4096 2012/09/17 11:31:59 jishu/技术IOS drwxrwxr-x 4096 2012/09/17 11:31:25 jishu/技术之星 drwxrwxr-x 4096 2012/09/17 16:05:04 jishu/技术备份 drwxrwxr-x 4096 2012/09/17 11:31:50 jishu/技术文档 drwxrwxr-x 4096 2012/09/17 11:31:40 jishu/技术资料完整 drwxrwxr-x 4096 2012/09/17 11:32:07 jishu/技术软件包 drwxrwxrwx 4096 2012/09/17 16:06:34 public drwxrwxrwx 4096 2012/09/14 12:04:57 yanfa sent 70 bytes received 489 bytes 74.53 bytes/sec total size is 0 speedup is 0.00 后面的root@ip中,root是指定密码文件中的用户名,以后的:: samba_data这是[samba_data]模块名 3 、rsync 客户端手动同步数据 [root@client ~]# rsync -avzP root@10.1.4.44::samba_data /data Password: 这里要输入root的密码,是服务器端提供的,在前面的例子中,咱们用的是 111111,输入的密码并不显示出来;输好后就回车; 注: 这个命令的意思就是说,用root 用户登陆到服务器上,把[samba_data] 数据,同步到本地目录/data上。固然本地的目录是能够你本身定义的,好比 /share也是能够的;当你在客户端上,当前操做的目录下没有/data这个目录时,系统会自动为你建立一个;当存在/data这个目录中,你要注意它的写权限。 说明: -a 参数,至关于-rlptgoD,-r 是递归 -l 是连接文件,意思是拷贝连接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 至关于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,本身试试。能够看文档; [root@client ~]# rsync -avzP --delete root@10.1.4.44::samba_data /data --delete 选项:表示客户端上的数据要与服务器端彻底一致,若是 [samba_data]目录中有服务器上不存在的文件,则删除。最终目的是让/data目录上的数据彻底与服务器上保持一致;用的时候要当心点,最好不要把已经有重要数所据的目录,当作本地更新目录,不然会把你的数据所有删除; [root@client ~]# rsync -avzp --delete --password-file=rsync.password root@10.1.4.44::samba_data /data --password-file=rsync.password选项:这是当咱们以linuxsir用户登陆rsync服务器同步数据时,密码将读取 rsync.password 这个文件。这个文件内容只是linuxsir用户的密码。咱们要以下作; [root@client ~]# touch rsync.password [root@client ~]# chmod 600 rsync.passwod [root@client ~]# echo "111111"> rsync.password [root@client ~]# rsync -avzp --delete --password-file=rsync.password root@10.1.4.44::samba_data /data 注: 这样就不须要密码了;其实这是比较重要的,由于服务器经过crond 计划任务仍是有必要的; 四、rsync 客户端自动与服务器同步数据 服务器是重量级应用,因此数据的网络备份仍是极为重要的。咱们能够在生产型服务器上配置好rsync 服务器。咱们能够把一台装有rysnc机器当作是备份服务器。让这台备份服务器,天天在早上2点开始同步服务器上的数据;而且每一个备份都是完整备份。有时硬盘坏掉,或者服务器数据被删除,完整备份仍是至关重要的。这种备份至关于天天为服务器的数据作一个镜像,当生产型服务器发生事故时,咱们能够轻松恢复数据,能把数据损失降到最低. 第一步:建立同步脚本和密码文件 注: 咱们在/etc/cron.daily.rsync中建立了一个文件名为:root.sh ,而且是权限是 755。 [root@client ~]# mkdir /etc/cron.daily.rsync [root@client ~]# cd /etc/cron.daily.rsync [root@client cron.daily.rsync]# touch root.sh [root@client cron.daily.rsync]# chmod 755 root.sh 编辑root.sh,内容是以下的: [root@client cron.daily.rsync]#vim root.sh #!/bin/sh #10.1.4.44 samba_data backup /usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncroot.password root@10.1.4.44::samba_data /data/$(date +'%m-%d-%y') :wq 执行一下配置的脚本语句: [root@client cron.daily.rsync]# sh root.sh 建立密码文件,root用户用的是 rsyncroot.password,权限是600; [root@client ~]# mkdir /etc/rsyncd/ [root@client ~]# cd /etc/rsyncd/ [root@client rsyncd]# touch rsyncroot.password [root@client rsyncd]# chmod 600 rsyncroot.password [root@client rsyncd]# ll total 4 -rw------- 1 root root 7 Sep 14 17:30 rsyncroot.password 接着咱们修改 rsyncroot.password的内容; [root@client rsyncd]# echo "111111" > rsyncroot.password 而后咱们再/目录下建立/data目录,意思是服务器端的/data/share数据同步到备份客户端上的/data下。并按年月日归档建立目录;天天备份都存档; [root@client ~]# cd / [root@client /]# mkdir /data 第二步:修改crond服务器的配置文件、加入到计划任务 [root@client ~]# crontab -e 加入下面的内容: # Run daily cron jobs at 02:30 every day backup samba data: 30 02 * * * /usr/bin/run-parts /etc/cron.daily.rsync 1> /dev/null 计划任务说明: # 基本格式 : # .----------------第1列表示分钟1~59 每分钟用*或者 */1表示 # | .------------- 第2列表示小时1~23(0表示0点 # | | .---------- 第3列表示日期1~31 # | | | .------- 第4列表示月份1~12 # | | | | .---- 第5列标识号星期0~6(0表示星期天)OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * 第一行是注释,是说明内容,这样能本身记住。 第二行表示在天天早上02点30分的时候,运行/etc/cron.daily.rsync 下的可执行脚本任务; 第三步:重启crond服务器; [root@client ~]# service crond restart Stopping crond: [ OK ] Starting crond: [ OK ] [root@client ~]# killall crond 注:杀死crond 服务器的进程; [root@client ~]# ps aux |grep crond 注:查看一下是否被杀死; [root@client ~]# /usr/sbin/crond 注:启动 crond 服务器; [root@client ~]# ps aux |grep crond 注:查看一下是否启动了? root 3872 0.0 0.1 5916 1192 ? Ss 12:02 0:00 crond root 3951 0.0 0.1 5912 1184 ? Ss 14:06 0:00 /usr/sbin/crond root 3953 0.0 0.0 4336 760 pts/0 S+ 14:06 0:00 grep crond 查看数据备份: [root@client ~]# ll /data total 24 drwxr-xr-x 6 root root 4096 Sep 14 12:04 09-17-12 drwxr-xr-x 6 root root 4096 Sep 14 12:04 09-18-12
实际操做 服务器端的文件 vi rsyncd.conf pid file = /var/run/rsyncd.pid port =873 address =0.0.0.0 hosts allow = ip/24 uid =root gid =root user chroot =yes read only =yes hosts deny=* max connections = 5 motd file = /etc/rsyncd/rsyncd.motd log file = /var/log/rsync.log log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [samba_data] path = /opt/htdocs/maideng8/upload/image list=no ignore errors auth users = root secrets file = /etc/rsyncd/rsyncd.secrets 同步 rsync -avzP root@ip::samba_data /webapp/cache.image/upload/image/