linux系统rsync服务器的管理与配置

一、rsync远程同步服务器

     简介:

          Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用Rsync同步本地硬盘中的不同目录。

          Rsync是用于取代rcp的一个工具,Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

          Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在Windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS

     特点:

          1)能更新整个目录树和文件系统

          2)有选择性的保持符号连接、硬链接、文件属性、权限、设备以及时间等;

          3)对于安装来说,无任何特殊权限要求

          4)对于多个文件来说,内部流水线减少文件等待的延时

          5)能用rsh、ssh或直接端口做为传输入端口

          6)支持匿名rsync同步文件,是理想的镜像工具

     rsync命令的用法:

          基本格式:rsync [选项] 原始位置  目标位置

          常用选项:

               -a:归档模式,递归保留对象属性,等同于-rlptgoD

               -v:显示同步过程的详细信息(ver)

               -z:在传输文件时进行压缩

               -H:保留硬链接文件

               -A:保留ACL属性信息

               --delete:删除目标位置有而原始位置没有的文件

               -r:递归模式,包含目录及子目录中所有文件

               -l:对于符号连接文件仍然复制为符号连接文件

               -p:保留文件的权限标记

               -t:保留文件的时间标记

               -g:保留文件的属组标记(仅超级用户使用)

               -o:保留文件的属主标记(仅超级用户使用)

               -D:保留设备文件及其他特殊文件

     服务器端:同步源

     客户端:发起端

     同步源的搭建方式:ssh或rsync

     访问控制列表:

          setfacl:设置特殊权限

                   -m   添加权限

                   -x   删除一条特殊权限

                   -b   删除所有特殊权限

                   -R   递归

                   default   设置默认权限(对未来创建的文件也生效)

二、利用SSH搭建同步源

      1、服务器端:

          1)创建同步目录,如:mkdir /var/ssh

          2)创建测试文件,如:touch /var/ssh/ssh.txt

          3)设置权限,如:

               useradd a1  #用来上传

               useradd a2  #用来下载

               chown a1:a1 /var/ssh

     2、客户端:

          1)创建同步目录,如:mkdir /ssh

          2)同步服务器数据,如:rsync -avz [email protected]:/var/ssh/* /ssh

三、利用rsync搭建同步源

     1、服务器端:

          1)创建同步目录,如:mkdir /var/rsync

          2)创建测试文件,如:touch /var/rsync/rsync.txt

          3)创建主配置文件,如:

               vim /etc/rsyncd.conf

                    use chroot = yes

                    address = 服务器IP地址    #监听地址

                    port 873                 #监听端口

                    log file = /var/log/rsyncd.log  #日志文件

                    pid file = /var/run/rsyncd.pid  #pid文件

                    [share]                         #共享目录名

                         comment = rsync share directory    #描述信息

                         path = /var/rsync          #真实目录

                         read only = yes            #只读

                         dont compress = *.gz *.bz2  #这两种格式的文件传输过程中不压缩

                         auth users = aa             #允许登录用户

                         secrets file = /etc/rsyncd_users.db    #用户密码文件

          4)创建账户文件:

               vim /etc/rsyncd_users.db

                    aa:123456

          5)开启服务:rsync --daemon

          6)关闭服务:kill $(cat "/var/run/rsyncd.pid")

     2、客户端

          1)创建同步目录,如:mkdir /rsync

          2)同步服务器数据,如:

               rsync -avz [email protected]::share /rsync

               rsync -avz rsync://[email protected]/share /rsync

     

四、同步脚本

     1、基于SSH的远程同步服务器:

          客户端:ssh-keygen -t rsa         #生成公钥和私钥文件

                 ssh-copy-id [email protected]  #将公钥文件上传到服务器端

                 ssh [email protected]         #测试密钥对是否成功

                 rsync -avz [email protected]:/var/ssh/* /ssh   #测试同步是否成功

     2、基于rsync的远程同步服务器:

          客户端: export RSYNC_PASSWORD=123456  #声明全局变量,保存连接用户的密码

                  rsync -avz [email protected]::share /rsync  #测试同步是否成功

五、自动备份

     inotify

     两个组件:inotifywait:持续监控,一有变化,立即输出结果

              inotifywatch:收集文件系统变化情况,并在运行结果后输出汇总的变化情况

     修改内核参数:

               max_queued_events    监控队列

               max_user_instances   最多监控实例数

               max_user_watches     每个实例最多监控文件数

     1、单向同步

          1)rsync同步源:指备份操作的远程服务器,也称为备份源。主要包括两种:rsync源、ssh源

          2)编辑内核

               vim /etc/sysctl.conf  添加如下内容

                fs.inotify.max_queued_events = 16384

                fs.inotify.max_user_instances = 1024

                fs.inotify.max_user_watches - 1048576

               sysctl -p    #检查sysctl.conf配置文件是否正确

          3)inotifywait -mrq -e modify,create,move,delete /var/www/html

               -m  持续监控

               -r  监控所有子对象

               -q  简化输出

               -e  指定监控的事件类型

          4)编写脚本,当监控到数据变化时自动同步

               vim rsync.sh

                    #!/bin/bash

                    INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html" 

                    RSYNC_CMD="rsync -avz --delete /var/www/html [email protected]:/var/www/html" 

                    do

                         if [ $(pgrep rsync | wc -l) -le 0 ] 

                              then 

                                   $RSYNC_CMD

                         fi

                    done

     2、双向同步   

          1)保证两台服务器之间可以通过ssh无密码访问,操作如下(这里以root用户为例):

         分别在server1(192.168.1.1)和server2(192.168.1.2)下,创建密钥

               server1:

                    ssh-keygen -t rsa

                    ssh-copy-id 192.168.1.2

               server2:

                    ssh-keygen -t rsa

                    ssh-copy-id 192.168.1.1 

          分别在两台机器上执行如下测试:

               ssh 192.168.1.1

               ssh 192.168.1.2

          2)安装unison

               首先安装ocaml,版本至少为3.07或更高

               下载地址:http://caml.inria.fr/pub/distrib/ocaml-3.10/

               tar -zxf ocaml-3.10.2.tar.gz

               cd ocaml-3.10.2

               ./configure

               make world opt

               make install

               

               安装unison

               下载地址:http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.13.16/

               tar -zxf unison-2.13.16.tar.gz

               cd unison-2.13.16

               make UISTYLE=text THREADS=true STATIC=true

               cp unison /usr/local/bin

          

               安装inotify

               下载地址:http://inotify-tools.sourceforge.net

               tar xvf inotify-tools-3.14.tar.gz
               cd inotify-tools-3.14
               ./configure
               make
               make install

               ln -sv /usr/local/lib/libinotify* /usr/lib/

               unison -batch /home/server1/ ssh:192.168.10.2//home/server2

               #测试两台服务器之间是否可以同步文件

     

          3)编写自动同步脚本 

               server1上创建脚本unison.sh

               vim /root/unison.sh

                    #!/bin/bash

                    ip2="192.168.1.2"

                    src2="/server1/" 

                    drt2="/server2/"

                    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line

                    do 

                         /usr/local/bin/unison -batch $src2 ssh://$ip2/$drt2

                         echo -n "$line" >> /var/log/inotify.log

                         echo $(date | cut -d " " -f1-4 )   >> /var/log/inotify.log

                    done

               chmod a+x /root/unison.sh

               server2上创建脚本unison.sh

               vim /root/unison.sh

                    #!/bin/bash

                    ip1="192.168.1.1"

                    src1="/server2/" 

                    drt1="/server1/"

                    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line

                    do 

                         /usr/local/bin/unison -batch $src1 ssh://$ip1/$drt1

                         echo -n "$line" >> /var/log/inotify.log

                         echo $(date | cut -d " " -f1-4 )   >> /var/log/inotify.log

                    done

               chmod a+x /root/unison.sh

               


你可能感兴趣的:(linux,备份,同步,rsync)