前言:

一台服务器,为了保证在热备服务或者负载均衡时,不同的机器间的服务相同。需要设定配置同步。

因此我们可以使用远程数据同步工具rsync来实现。

 

rsync介绍:

它具有以下特点:

1,可以镜像的保存整个目录树和文件系统。

2,可以保留文件的权限,时间,软硬连接等。

3,安全:可使用scp或ssh来传输,也可使用socket来传输。

4,快速:第一次同步会复制所有内容,之后同步就只会复制修改过的内容。而且同步的时候进行压缩解压缩,能够占用更少的宽带。

支持匿名传输。

 

安装rsync工具:

安装三步走。

 

通过防火墙:

 

我们要让服务器和客户端上的rsync端口都能够通过防火墙。rsync默认端口是873

因此执行如下命令:

 

#iptables -A INPUT -p tcp -dport 873 -j ACCEPT 
#iptables -L  注意:此句是检查防火墙是否打开873端口

 

 

创建配置文件:

 

touch rsyncd.conf

配置文件rsyncd.conf内容:

 

 

#global setting
uid = root
gid = root
use chroot = no
max connections = 0
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd.lock
log file = /var/log//rsyncd.log


#module setting
[sync_data]
path = /home/test/
read only =  no
list = yes
hosts allow = 0.0.0.0/0
hosts deny = 0.0.0.0/0
#auth users = sys
#secrets file = /etc/rsyncd.pas

 

 

服务开启:

假设rsync执行文件的路径是/home/bin/rsync,配置文件的路径是/home/conf/rsync.conf

先执行一次关闭操作,再执行下面的命令

 

/home/bin/rsync --daemon --config=/home/conf/rsyncd.conf

 

 

服务关闭:

获取/var/run/rsyncd.pid中的pid

kill -9 pid

rm -fR /var/run/rsyncd.pid

 

状态查询:

1,首先要看/var/run/rsyncd.pid是否存在,

若存在通过ps auxf | grep "/home/bin/rsync" | grep daemon | grep -v grep | wc -l命令看是否开启。若开启则开启,若关闭则关闭。

若不存在说明已关闭。

2,检查定时任务文件/var/spool/cron/root中是否含有/home/bin/rsync的行,若含有说明开启了定时配置,若不含有说明没有开启定时配置。

 

手动下载:

/home/bin/rsync -varz --delete --progress @目标IP::sync_data /home/test/

其中目标IP就是我们的要关联的IP

/home/test/就是我们要同步的目录

 

手动上传:

/home/bin/rsync -varz --delete --progress /home/test/ @目标IP::sync_data

 

定时下载:

1,将定时任务文件/var/spool/cron/root中的/home/bin/rsync行清空。

2,将 */1 * * * * /home/bin/rsync -aqz --delete --progress @目标IP::sync_data /home/test/ 2> /dev/null || true

这句命令加入到定时任务文件/var/spool/cron/root中

 

定时上传:

1,将定时任务文件/var/spool/cron/root中的/home/bin/rsync行清空。

2,将 */1 * * * * /home/bin/rsync -aqz --delete --progress /home/test/ @目标IP::sync_data

这句命令加入到定时任务文件/var/spool/cron/root中

 

关闭定时:

将定时任务文件/var/spool/cron/root中的/home/bin/rsync行清空。

 

###################################################################

###################################################################

 

rsyncd.conf配置文件详解:

 

A、全局定义

  在rsync 服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;

  pid file = /var/run/rsyncd.pid   注:告诉进程写到 /var/run/rsyncd.pid 文件中;
  port = 873  注:指定运行端口,默认是873,您可以自己指定;
  address = 192.168.1.171  注:指定服务器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 文件内容。当用户登录时会看到这个信息。比如我写的是:

  ++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the mike.org.cn rsync services!
           2002------2009
  ++++++++++++++++++++++++++++++++++++++++++++++

  log file = /var/log/rsync.log

  注:rsync 服务器的日志;

  transfer logging = yes

  注:这是传输文件的日志

  log format = %t %a %m %f %b
  syslog facility = local3
  timeout = 300

B、模块定义

   模块定义什么呢?主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path 指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的

  下面是前面配置文件模块的例子:

  [rhel4home]  #模块它为我们提供了一个链接的名字,在本模块中链接到了/home目录;要用[name] 形式

  path = /home    #指定文件目录所在位置,这是必须指定的 
  auth users = root   #认证用户是root  ,是必须在服务器上存在的用户
  list=yes   #list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
  ignore errors  #忽略IO错误
  secrets file = /etc/rsyncd.secrets   #密码存在哪个文件
  comment = linuxsir home  data  #注释可以自己定义
  exclude = beinan/ samba/     

  注:exclude是排除的意思,也就是说,要把/home目录下的easylife和samba排除在外; easylife/和samba/目录之间有空格分开

 

[rhel4opt]  
   path = /opt 
   list=no
   comment = optdir   
   auth users = beinan  
   secrets file = /etc/rsyncd/rsyncd.secrets
   ignore errors 
###################################################################
 
###################################################################