服务器同步rsync

rsync是同步命令,可以同步本地文件就行备份,也可以通过SSH访问来进行远程同步,可以把源位置的文件复制到目标文件夹内,与CP,SCP命令相似,但它会自动判断文件是否更新,只复制更新的文件,也可以通过参数删除多余多文件,能够以最小的资源传输来现实两个文件夹内的文件相同。

 

基于本地rsync同步

rsync -av /boot/ /todir/ --delete   

这是一条基本的周步语句,把boot目录里的文件同步到todir目录下

# rsync -a /boot /todir/

// 在boot后加/表示同步的是文件夹内的文件,不加/指的是文件夹

 --delete                 //删除同步多余的文件

 

一般情况下rsync是基于SSH服务的

[root@localhost ~]# rsync -az [email protected]:/boot/ /fromssh/

这是一包远程同步的语句,把远程机192.168.194.252上的boot文件夹的内容同步以(root身份)到本地的fromssh目录下

[email protected]'s password:

输入root密码

 

 

我们也可以使用rsync自已的远程协议,来远程同步文件,这样就需要我们rsync软件包,并设置要同步的目录,像共享一样,与SAMBA相似,因为他们都是同一个公司开发的产品。

root@localhost ~]# rpm -q rsync                                 //查看是否安装rsync,本机已安装了

rsync-3.0.6-4.el5_7.1                                            //没有则需要自己安装。系统光盘中有安装包

[root@localhost ~]# cat /etc/rsyncd_users.db       

ruser:pwd@123

 //建立一个用户文件,来存放我们访问的用户名和密码在里面以“用户名:密码“的方式写入

[root@localhost ~]# chmod 600 /etc/rsyncd_users.db

//这个文件是不加密的,可以修改一下权限来禁止别的用户来查看本密码文件的内容

下面的是rsync的主配置文件,需要我们自己写入,注意路径和文件名一定要标准如下,里面的内容写如下内容,根据需要可做适当的更改。

[root@localhost ~]# cat /etc/rsyncd.conf

uid = nobody                                                   //用户ID,指以此用户来访问

gid = nobody                                                  //组ID

use chroot = yes                                             //禁锢用户只能在共享的目录中

log file = /var/log/rsyncd.log                        //日志文件的存放位置

pid file = /var/run/rsyncd.pid[tools]                   //进程文件的存放位置

        path = /usr/src                                           //共享目录

        read only = yes                                           //只读权限

        dont compress =*.gz *.bz2 *.tgz *.zip        //这些文件不再进行压缩

        auth users = ruser, name                         //允许访问的用户可用“,”来分开写多个

        secrets file = /etc/rsyncd_users.db             //指定用户文件,之前我们建好的

 

 

 

配置完成后我们就可以启动服务了,记得要加入开机自启,重启后才能正常使用。

[root@localhost ~]# chkconfig rsync on                           //开机自启

[root@localhost ~]# service xinetd restart                         //重启服务

[root@localhost ~]# netstat -ln | grep :873                          //查看端口

tcp        0      0 0.0.0.0:873                 0.0.0.0:*           LISTEN     

 

服务配置好后我们就可以去客户端进行测试了,保证两台机器能PING通的,并关闭防火墙和SELINUX安全,防止它们阻止访问连接。

 

[root@test1 ~]# rsync [email protected]::tools

[root@test1 ~]# mkdir -p /data/fromrsync

[root@test1 ~]# rsync -avz --delete [email protected]::tools /data/fromrsync/

 

如果出错的话可以检查下面的这些问题。

# iptables -L                                          //关闭防火墙

# getenforce                                              //查看SELINUX壮态

# chmod 600 /etc/rsyncd_users.db              //用户文件的权限

# service xinetd restart                                  //重启服务

# netstat -ln | grep :873                                  //查看端口壮态

# /etc/xinetd.d/rsync                                       //查看rsync是否开启

       disable = yes

 

 

 

 

   例:有两台WEB服务器IP分别是

A:202.97.9.9

B:202.22.8.8

需要两台WEB服务器的网站目录(/var/www/html)实时同步。A为主,B为辅

配置的B主机,安装NFS共享服务,把需要同步的文件共享

[root@node2 ~]# cat /etc/exports

/var/www/html                 *(rw,no_root_squash)

[root@node2 ~]# service portmap restart

[root@node2 ~]# service nfs restart

[root@node2 ~]# chkconfig portmap on

[root@node2 ~]# chkconfig nfs on

在A主机中安装inotify-tools来监控同步文件夹,如发现改动立既触发同步

[root@node1 ~]# yum -y install gcc* httpd

[root@node1 ~]# tar -zxvf inotify-tools-3.14.tar.gz -C /usr/src/

[root@node1 ~]# cd /usr/src/inotify-tools-3.14/

[root@node1 inotify-tools-3.14]# ./configure                                            //配置                 

[root@node1 inotify-tools-3.14]# make                                                    //编译

[root@node1 inotify-tools-3.14]# make install                                          //安装

[root@node1 inotify-tools-3.14]# service portmap restart

[root@node1 inotify-tools-3.14]# chkconfig portmap on

 

把B主机共享的同步文件夹挂载到A主机中,并添加开机自动挂载。

[root@node1 inotify-tools-3.14]# mkdir -p /data/nfsdir

[root@node1 inotify-tools-3.14]# grep nfs /etc/fstab              //写入开机挂载

192.168.100.20:/webbak/www1     /data/nfsdir    nfs     defaults        0 0

[root@node1 inotify-tools-3.14]# mount -a

[root@node1 inotify-tools-3.14]# df -hT | grep nfs

               nfs    7.6G  1.1G  6.1G  16% /data/nfsdir                         //查看挂载

 

编辑一个脚本,如发现A主机目标文件发生变动,立即去同步B主机的文件,并写入起动文件,

 

[root@node1 ~]# cat /usr/bin/in_rsync.sh

#!/bin/bash

/usr/local/bin/inotifywait -mrq -e modify,create,move,delete /var/www/html | while read DIR EVENT FILE

do

/usr/bin/rsync -aHvz --delete /var/www/html/ /data/nfsdir

done

上面是脚本的内容,就是通过inotifywait来监控/var/www/html文件夹,如果变动执行rsync同步

 

 

[root@node1 ~]# chmod 700 /usr/bin/in_rsync.sh                          

修改权限

[root@node1 ~]# echo "/usr/bin/in_rsync.sh">>/etc/rc.local

写入开机启动文件