> CentOS > CentOS服务器 > 文件同步 >

centos下面2台服务器文件同步,小例子

一、简介
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。

二、版本选择
目前CentOS5中自带的rsync版本都是2.6.x的版本,该版本存在的问题主要是性能方面的,比如,同步大量小文件时容易出现内存溢出或同步中断等现象,这主要与其2.6版本采用先列文件列表,再进行同步的处理机制有关,在处理大文件同步时也市场发生同步文件不完整的现象,所以我们在使用rsync之前,应该卸载老版本,安装最新的稳定版本,对各种已知bug修复还是挺有效的,比如3.0以后的版本处理机制上就改成了一边列表的同时进行文件同步,大大改善了性能和降低了出错几率。目前最新的版本是3.0.7。

三、升级步骤:
1。卸载当前rsync的安装包版本:可以直接用rpm -e rsync。
  当然,更好的方法是:
  a。首先查看rsync命令的所在位置:which rsync 。 witch命令会从$PATH环境变量中,按照先后顺序,找出最先搜索到的rsync命令所在路径,无论你的系统里有多少个rsync命令,这个which的结果才是你在命令行中使用rsync命令式时用到的那个一。例如:/usr/bin/rsync
  b。然后查看该命令属于哪个安装包:rpm -qf /usr/bin/rsync 。 例如:rsync-2.6.8-3.1
  c。卸载:rpm -e rsync-2.6.8-3.1

2。安装新版本:
  a。下载:通常我们都用wget命令,但其实有很多犹豫系统弱密码被攻破导致的攻击都是用这个命令来下载攻击包,所以,最好还是将这个命令移出$PATH所在的路径,放到一个只有你知道的地方,今后可以敲入完整路径使用,也不影响什么的
  #wget http://samba.anu.edu.au/ftp/rsync/src/rsync-3.0.7.tar.gz
  b。安装:很简单,不需要指定什么参数,默认就可以了
  #tar zxvf rsync-3.0.7.tar.gz
  #cd rsync-3.0.7
  #./configure && make && make install
这样就安装好了,默认rsync命令被安装在这里:/usr/local/bin/rsync

3。检查:
  #which rsync 。看看是否能找到rsync命令,通常情况下,linux的$PATH变量,会把/usr/local/bin置于/usr/bin之前,所以即使你不卸载旧版本,也会默认的使用新版本了,当然,我还是建议卸载掉旧版本,图个干净,呵呵
  #rsync --version 。看看是否是新版本了,如果提示找不到该命令,那是shell缓存的原因,重新登录一遍应该就好了

四、具体配置
一般有两种配置方法,一种是推,一种是拉。通常我们选择前一种,看你的情况了。
推:目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去
拉:源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来
1、服务器端配置:
主配置文件,/etc/rsyncd.conf :
  motd file=/etc/rsyncd.motd
  uid = root
  gid = root
  max connections = 0         # 最大连接数不限
  use chroot = no   # 不使用chroot
  log file = /var/log/rsyncd.log # 日志记录文件
  log format = %t %a %m %f %b # 日志记录格式
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsyncd.lock
  timeout = 300
  [optsoftware]      # 定义一个名为optsoftware的同步服务子项 (如有多个目录需要同步,本段可以逐个添加)
  path = /opt/software # 需要做镜像的目录,由于我们采用推的方式,所以这个目录代表源主机推过来的文件放在哪里
  list = yes  # 允许列文件
  comment = rsync software
  ignore errors = yes # 可以忽略一些无关的IO错误
  read only = no  # 关闭只读
  hosts allow = 192.168.1.37 # 允许哪些主机访问
  hosts deny = *  # 禁止哪些主机访问
  auth users = rsyncuser  # 验证用户名
  secrets file = /etc/rsyncd.secrets # 密码存放文件

密码验证文件,/etc/rsyncd.secrets:
  rsyncuser:rsyncuser
  A。前一个为用户名,后一个为密码
  B。该文件必须置为600权限

启动服务:
  rsync --daemon --config /etc/rsyncd.conf

开机自启动:
  两种不同的方法,效果一样,第二种会在指定的log和系统messagelog中都留下日志,其实也没什么必要了
    A、直接把启动命令添加到/etc/rc.local文件,放在最后一行。
    B、加入xinetd,将rsync服务端放入xinetd族中,进行配置和启动控制。
       编辑/etc/services,检查rsync的服务端口,默认是TCP和UDP的873
       编加/etc/rsync:
    service rsync
    {
            disable = no #开启服务
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/local/bin/rsync
            server_args     = --daemon --config /etc/rsyncd.conf
            log_on_failure  += USERID
    }
  C、自己写个service脚本,放到chkconfig中,这样就可以单独控制rsync服务,也可以灵活变动他的启动顺序
rc.local启动顺序是99,也就是说最后一个执行,xinetd族启动顺序是56,所以实际应用是看你的需要,如果需要在应用前启动,那么就要注意这个了

2、客户端(发起同步方)配置:
  执行下列命令即可,如果想周期执行,参见crontab
  推:rsync -vzrtopg --progress --password-file=/etc/rsyncd.secrets /opt/software/* rsyncuser@192.168.1.34::optsoftware
  拉:rsync -vzrtopg --progress --password-file=/etc/rsyncd.secrets rsyncuser@192.168.1.34::optsoftware /opt/software/

参数简介:
  v: --verbose               increase verbosity
  z: --compress              compress file data during the transfer
  r: --recursive             recurse into directories
  t: --times                 preserve times
  o: --owner                 preserve owner (super-user only)
  p: --perms                 preserve permissions
  g: --group                 preserve group
  --progress:     show progress during transfer
  --delete:     delete extraneous files from destination dirs。也就是源端如果删除文件,目的端也删除

特别注意事项:
  1。看到推的时候,命令中那个星号了吗?服务器端指定存放位置肯定是个目录,本例中,如果不加星号,会在服务器端指定目录中在创建一个software目录,所以加了星号,才是把源主机software目录下的文件进行同步。这个特别注意,要按实际情况操作,其实都有用。
  2。一定要注意同步方向,可别把源主机上的文件给删除了,切记切记!

(责任编辑:IT)