rsync

rsync服务器地址172.16.249.100  node3

rsync客户端地址172.16.249.242  node4


rsync配置文件

rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)

rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)
[root@node3 /]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 2000  注:客户端最多连接数
timeout = 600
pid file=/var/run/rsyncd.pid  注:告诉进程写到/var/run/rsyncd.pid文件中
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log  注:rsync 服务器的日志;
log format=%t %a %m %f %b 注:设定日志格式
ignore errors
read only=false  注:read only 是只读选择,如果为yes就是不让客户端上传文件到服务器上。
list = false
hosts allow = 172.16.0.0/16
hosts deny = 0.0.0.0/32
#auth users = rsync_backup
#secrets file = /etc/rsync.password
###################################
[backup]
comment = back server by zhoushuyu 22:00 2016-3-3
path = /backup

模块定义:主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path 指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的。
[rhel4home]  注:模块它为我们提供了一个链接的名字,在本模块中链接到了/home目录;要用[name] 形式
path=/home #指定文件目录所在位置,这是必须指定的
auth users=root #认证用户是root  ,是必须在服务器上存在的用户
list=yes #list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
ignore errors
secrets file=/etc/rsync.password  #密码存在哪个文件
comment= zhoushuyu home data  #注释可以自己定义
##############rsyncd.conf stop###########

设定密码文件
[root@node3 /]# cat /etc/rsync.password
rsync_backup:123456
root:123456
[root@node3 /]# chmod 600 /etc/rsync.password
[root@node3 /]# chown root.root /etc/rsync.password


启动rsync服务

#/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf  #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写
由于rsyncd.conf在/etc下,故可以使用如下命令来启动rsync
/usr/bin/rsync --daemon

关于防火墙的问题
Linux的防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。
#iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
#iptables -L  查看一下防火墙是不是打开了 873端口
如果你不太懂防火墙的配置,可以先service iptables stop 将防火墙关掉。


rsync客户端同步

[root@node2 ~]# rsync -avzP [email protected]::rhel4home rhel4home 
Password: 这里要输入root的密码,是服务器端/etc/rsync.password提供的。输入的密码并不回显,输好就回车。
注: 这个命令的意思就是说,用root用户登录到服务器上,把rhel4home数据,同步到本地当前目录rhel4home上。当然本地的目录是可以你自己 定义的。如果当你在客户端上当前操作的目录下没有rhel4home这个目录时,系统会自动为你创建一个;当存在rhel4home这个目录中,你要注意 它的写权限。

在客户端执行如下命令:

[root@node2 ~]# rsync -avzP --delete [email protected]::rhel4home rhel4home
Password: 
receiving incremental file list
deleting x.sh

sent 60 bytes  received 166 bytes  64.57 bytes/sec
total size is 0  speedup is 0.00
这回我们引入一个--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;用的时候要 小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除。

设定密码文件

[root@node2 ~]# rsync -avzP --delete --password-file=/etc/rsync.password [email protected]::rhel4home rhel4home
receiving incremental file list
deleting x.sh
./

sent 63 bytes  received 169 bytes  464.00 bytes/sec
total size is 0  speedup is 0.00
在客户端 
touch /etc/rsync.password
chmod 600 /etc/rsync.password
echo 123456 >  /etc/rsync.password  密码为123456
在服务器端
[root@node3 mageedu]# ls -l /etc/rsync.password
-rw------- 1 root root 32 3月   4 02:16 /etc/rsync.password
[root@node3 mageedu]# cat /etc/rsync.password 
rsync_backup:123456
root:123456
注:这里需要注意的是这份密码文件权限属性要设得只有属主可读。
  这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的。

创建定时任务

[root@node2 ~]# mkdir -pv /etc/cron.daily.rsync
[root@node2 ~]# cd /etc/cron.daily.rsync/
[root@node2 cron.daily.rsync]# touch rhel4home.sh
[root@node2 cron.daily.rsync]# chmod 755 ./*.sh
[root@node2 cron.daily.rsync]# mkdir /etc/rsyncd
[root@node2 cron.daily.rsync]# touch /etc/rsyncd/rsyncrhel4root.password
[root@node2 cron.daily.rsync]# cd /etc/rsyncd/
[root@node2 rsyncd]# chmod 600 rsyncrhel4root.password
[root@node2 rsyncd]# echo 123456 >rsyncrhel4root.password
[root@node2 rsyncd]# cd /etc/cron.daily
[root@node2 cron.daily]# touch rhel4home.sh
[root@node2 cron.daily]# chmod 755 rhel4home.sh
内容是
#!/bin/bash
#backup 172.16.249.100 /home
/usr/bin/rsync -avzP --password-file=/etc/rsyncd/rsyncrhel4root.password [email protected]::rhel4home /home/rhel4homebak/$(date +'%m-%d-%y')

[root@node2 rsyncd]# mkdir /home/rhel4homebak
/home目录下创建rhel4homebak目录,意思是服务器端的rhel4home数据同步到备份服务器上的/home/rhel4homebak下。并按年月日归档创建目录;每天备份都存档。


[root@node2 rsyncd]# crontab -e
# Run daily cron jobs at 6:30 everyday backup rhel4 data:
30 6 * * * /etc/cron.daily/rhel4home.sh
配置好后,要重启crond 服务器
[root@node2 ~]# killall crond
[root@node2 ~]# /usr/sbin/crond
[root@node2 ~]# ps -aux | grep crond
root      31421  0.0  0.1 126304  1312 ?        Ss   05:58   0:00 /usr/sbin/crond
root      31423  0.0  0.0 112656   972 pts/0    R+   05:58   0:00 grep --color=auto crond


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来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。


参考文档

http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html

http://10851431.blog.51cto.com/10841431/1746583

你可能感兴趣的:(rsync)