天天看点

rsync同步服务安装配置及脚本使用

Rsync是Unix/Linux下的一款应用软件,利用它可以使多台服务器数据保持同步一致性,第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。

Rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。可以很容易做到保持原来文件的权限、时间、软硬链接等。rsync有两种同步方式,一种基于ssh同步不需要配置,一种需要自身秘钥同步就需要进行文件配置了。以下我采用的是自身秘钥的方式:企业用的居多

  1. RSYNC安装

    实验两台虚拟机:服务端192.168.2.222,客户端192.168.2.183

    便于实验,我这里采用yum安装方式:yum install rsync -y

  2. 我这里自定义rsync配置目录mkdir /home/lijq/.rsync/ -p  ; 创建配置文件添加以下内容vi rsyncd.conf;

     uid = nobody

    gid = nobody

    use chroot = no

    max connections = 30

    pid file = /home/lijq/.rsync/rsyncd.pid

    lock file = /home/lijq/.rsync/rsyncd.lock

    log file = /home/lijq/.rsync/rsyncd.log

    transfer logging = yes

    log format = %t %a %m %f %b

    syslog facility = local3

    timeout = 300

    [test1]

    read only = no

    path = /data/www

    comment = www

    auth users = test

    secrets file = /home/lijq/.rsync/rsync.pas

    hosts allow = 192.168.2.183 

  3.  cd /home/lijq/.rsync;创建rsync.pas密钥文件test:123456 并给权限chmod 666 rsync.pas
  4. 然后启动服务,我这里是自定义配置路径和端口所有启动命令为下:

    /usr/bin/rsync --daemon --config=/home/lijq/.rsync/rsyncd.conf --port 7001

    使用ps -ef | grep rsync可以查看服务启动情况

  5. 客户端配置,只需要在cd /home/lijq/.rsync/下创建rsync.pas密码文件内容123456并赋予600权限即可
  6. 然后创建服务端的同步目录,上面配置文件定义的是/data/www
  7. 客户端执行rsync   -aP  --delete    [email protected]::test1  /root/lijq    --port=7001 --password-file=/home/lijq/.rsync/rsync.pas    
  8. 上面命令是客户端同步服务器文件里面的内容,,/root/lijq为客户端目录可以自己定义,端口是我自己定义的,test1是我服务端定义的同步模块名称
  9. 如果报错@ERROR: auth failed on module test1请检查秘钥配置文件,如果报错:rsync: failed to connect to 192.168.2.222: No route to host (113)请检查防火墙和selinux,博主深受其害
  10. 同步命令执行后,会发现,服务器上的/data/www/下面的文件都同步到了客户端/root/lijq下面了,,done

 二.上面的客户端执行的命令同步是服务器上的目录文件同步到客户端来相当于备份,而企业中很多都是从客户端更新数据到服务端故此:在客户端可以执行下列命令就好了

/usr/bin/rsync -avzP  --progress --delete --password-file=rsyncd1.pas --port=7001 /root/lijq/ [email protected]::test1     rsyncd1.pas是我在当前目录创建的一个秘钥文件,,也可以写成之前的那个路径。

如果报错rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]请检查服务端目录权限其他用户要有写的权限哦,done

 脚本实现同步:这里的脚本是客户端数据同步到服务端的,其他的可以自己定义:

 #!/bin/bash
#use for : sh 33.sh test server
SYSUSER=test
export MOKUAI=test1
export PORT=7001
SRC_DIR=/root/lijq/
SERVERIP=192.168.2.222
SERVERNO=$1
case "$2" in
test)
echo ${rsyncsource%/*}
;;
server)
/usr/bin/rsync -avzP --progress --delete --password-file=rsyncd1.pas --port=${PORT $SRC_DIR $SYSUSER@$SERVERIP::$MOKUA
I
;;
esac      

 done

后续研究持续更新

下一篇: RSYNC安装