rsync数据同步工具指南

一、     rsync简介

remote synchronize,rsync是一款开源的、快速的、多功能的、可实现全量或增量本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平。官方网站:http://www.samba.org/ftp/rsync/rsync.html

一个rsync相当于scp,cp,rm,而且还优于他们每一个命令

二、     特性

  支持拷贝特殊文件如链接文件,设备等。

  可以有排除指定文件或目录同步的功能,相当于打包命令tar 的排除功能。

  可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变

  可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高,tar -N

  可以使用rcprshssh 等方式来配合传输文件(Rsync 本身不对数据加密)

  可以通过socket(进程方式)传输文件和数据(服务器和客户端)

  支持匿名或认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份及镜像

三、     rsync工作场景说明

  NFS文件的一主一备环境,有些项目和网站限定了不能做NFSDRBD双机方案,所以可以考虑用rsync作一个冗余NFS机器出来(--delete参数使用时应该谨慎)

  rsync+inotify实时同步系统,有些网站由于网络环境的制约,比如机器是随着网站规模的不断扩大才逐渐增多的进入IDC托管机房的,机器比较分散,而暂时又不能停掉业务整合服务器之前,这之前的方案可以考虑采用rsync+inotifysersync

  线上的SVN与线上机器的代码之前的同步,像我们的SVN服务器的代码量还是比较大的,而且代码更新比较频繁,所以我们只会能过rsync结合自己开发的程序同步少量稳定的代码到线上

四、     rsync工作方式

1.  Local(此时类似于cp、mv命令的功能)。

rsync [OPTION...] SRC... [DEST]

rsync -avz /etc/hosts /tmp          =====cp

rsync -avz --delete /data/ /tmp/    =====mv

2.  remote shell(此时类似于scp命令的功能)。

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

rsync -avzP -e "ssh -p 22" /tmp/ [email protected]:/tmp

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

rsync -avzP -e "ssh -p 22" [email protected]:/tmp/ /tmp

3.  rsync daemon:以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)。

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

      rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

      rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

n  rsync常用参数说明

  -v, --verbose 详细模式输出

  -z, --compress 对备份的文件在传输时进行压缩处理

  -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl

-r, --recursive 对子目录以递归模式处理

-t, --times 保持文件时间信息

-o, --owner 保持文件属主信息

-p, --perms 保持文件权限

-g, --group 保持文件属组信息

-D, --devices 保持设备文件信息

-l, --links 保留软链结

  -e, --rsh=COMMAND 指定使用rshssh方式进行数据同步

  --exclude=PATTERN 指定排除不需要传输的文件模式

  --exclude-from=FILE 排除FILE中指定模式的文件

  --bwlimit=RATE   指定传输速率

  --delete   无差异同步(谨慎使用,尽量不用)

推:本地有,远端有;本地没有,删除远端独有(需要备份远端数据)

拉:远端有,本地有;远端没有,删除本地独有(需要备份本地数据)

五、     快速部署代码

cat >/etc/rsyncd.conf<<EOF

uid = rsync

gid = rsync

use chroot = no

max connections = 2000

#port = 873

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 192.168.80.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

[backup]

comment = backup server by oldboy

path = /backup

#exclude = test/test.php

EOF

rsync --daemon

netstat -lntup|grep rsync

useradd rsync -s /sbin/nologin -M

mkdir /backup

chown -R rsync /backup

echo "rsync_backup:oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

echo "rsync --daemon" >>/etc/rc.local

tail -1 /etc/rc.local

客户端操作

echo "oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

cat /etc/rsync.password

ls -ld /etc/rsync.password

推:rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password

拉:rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password

六、     详细说明:rsync的安装与配置(即工作方式3:rsync daemon)

1.  服务端操作

n  安装rsync(默认已安装,在备份服务器上操作)

[root@liwenbin ~]# rpm -aq rsync

rsync-3.0.6-12.el6.x86_64

n  rsync配置文件

rsync服务器主要有三个配置文件:rsyncd.conf,rsyncd.secrets和rsyncd.motd,而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建

cat /etc/rsyncd.conf

uid = rsync # 备份以什么身份进行,用户ID 

gid = rsync # 备份以什么身份进行,组ID

#注意这个用户ID和组ID,如果要方便的话,可以设置成root,这样rsync几乎就可以读取任何文件和目录了,但是也带来安全隐患。建议设置成只能读取你要备份的目录和文件即可。

use chroot = no

max connections = 2000                    #最大连接数,0代表没有限制

#port = 873                               #默认端口873

pid file = /var/run/rsyncd.pid           #运行进程的ID写到哪里

lock file = /var/run/rsync.lock

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

ignore errors                             # 忽略一些无关的IO错误

read only = false                         # 设置为非只读,即可以传至服务器的相应目录。

list = false                              # 不允许列文件

hosts allow = 192.168.80.0/24       #允许连接服务器的主机IP地址,如果多个ip则用空格隔开

hosts deny = 0.0.0.0/32             #禁止连接服务器的主机IP地址,也可为*,表示所有。

auth users = rsync_backup           # 认证的用户名,如果没有这行,则表明是匿名

secrets file = /etc/rsync.password      # 认证文件名,用来存放密码

[backup]

comment = backup server by oldboy

path = /backup                            # 需要备份的目录

#exclude = test/ test.php      #设置不同步的目录或文件用空格隔开

n  启动rsync进程

[root@liwenbin ~]# rsync --daemon

[root@liwenbin ~]# ps -ef|grep rsync|egrep -v grep

root       1956      1  0 19:21 ?        00:00:00 rsync �daemon

[root@liwenbin ~]# netstat -lntup|grep rsync

tcp        0      0 0.0.0.0:873        0.0.0.0:*          LISTEN      1956/rsync         

tcp        0      0 :::873             :::*               LISTEN      1956/rsync

[root@liwenbin ~]# ss -lntup|grep rsync

tcp    LISTEN     0      5         :::873            :::*      users:(("rsync",1956,5))

tcp    LISTEN     0      5         *:873              *:*      users:(("rsync",1956,3))

[root@liwenbin ~]# lsof -i :873

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync   1956 root    3u  IPv4  12983      0t0  TCP *:rsync (LISTEN)

rsync   1956 root    5u  IPv6  12984      0t0  TCP *:rsync (LISTEN)

n  杀进程

pkill rsync

killall rsync                #需要连续杀

kill `cat /var/run/rsyncd.pid `     #杀进程号

n  仅允许通过某个IP地址访问

rsync --daemon --address=192.168.80.100

n  创建用户

[root@liwenbin ~]# useradd rsync -s /sbin/nologin �M

n  创建备份目录并授权

[root@liwenbin ~]# mkdir /backup

[root@liwenbin ~]# chown -R rsync /backup

n  创建、编辑并授权密码文件

[root@liwenbin ~]#echo "rsync_backup:oldboy" >/etc/rsync.password

[root@liwenbin ~]# chmod 600 /etc/rsync.password

n  加入开机自启动

[root@liwenbin ~]# echo "rsync --daemon" >>/etc/rc.local

[root@liwenbin ~]# tail -1 /etc/rc.local

2.  客户端操作

n  创建、编辑并授权密码文件

echo "oldboy" >/etc/rsync.password

chmod 600 /etc/rsync.password

cat /etc/rsync.password

ls -ld /etc/rsync.password

n  数据备份

推:rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password

拉:rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password

注意:推拉都是客户端操作

3.  进程管理

n  杀进程

pkill rsync

killall rsync                #需要连续杀

kill -HUP `cat /var/run/rsyncd.pid `   #平滑杀死

kill -USR2 `cat /var/run/rsyncd.pid    #平滑杀死

kill `cat /var/run/rsyncd.pid `     #杀进程号

kill -9 rsync               #强制杀死(建议禁止使用)

n  安全优化选项

rsync --daemon --address=192.168.80.100     #仅允许通过服务端某个IP地址同步

七、   rsync排错思路

1.  rsync服务端排错思路

1)   查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf

2)   查看配置文件里host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段

3)   查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属和组)

4)   查看rsync服务是否启动,查看命令为:ps -ef|grep rsync。端口是否存在netstat -lnt|grep 873

5)   查看iptables防火墙和selinux是否开启允许rsync服务通过,也可考虑交闭

6)   查看服务端rsync配置的密码文件是否为600权限,密码文件格式是否正确

7)   如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限

2.  Rsync客户端排错思路

8)   查看客户端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务端的密码一致。

9)   用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻档)。telnet 192.168.1.111 873

10)  客户端执行命令是rsync �avzrtopgP  [email protected]::dingjian/test/  /test/ --password-file=/etc/rsync.password

注:若地址中使用两个分号“::”,将直接使用rsyncd的用户认证方式;

    若地址中使用一个“:”号,将启用ssh模式进行用户验证,需要服务端开启sshd服务;

七、     rsync优缺点

1.  rsync优点

增量备份同步,支持socket(daemon),集中备份

2.  rsync缺点

1)   大量小文件同步的时候,比对时间较长,有的时候,rsync进程停止

解决:a.打包成一个文件同步;

b.drbd(文件系统同步,复制block)

2)   同步大文件,10G这样的大文件有时也会出问题,中断。未完成同步前,是隐藏文件,同步完成后改为正常文件

八、     部署rsync脚本

#!/bin/sh

#time:2015-12-4

#auther:liwenibn

#function:quick install rsync

#qq:1935845114

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

#define

CHECK=` rpm -aq rsync | wc -l `

HOSTIP="192.168.80.0/24"

PASSWORD="123456"

USER="rsync_user"

SYS_USER="rsync"

PWD_FILE=/etc/rsync.password

DATADIR=/data/www

 

#examine

[ -f /etc/init.d/functions ] && . /etc/init.d/functions

if [ "$CHECK" -eq 1 ]

        then

                action "rsync is installed" /bin/true && exit 1

        else

                action "rsync is not installed"

                echo "Yum install rsync..."

                yum install rsync -y

                [ $? -eq 0 ] && action "rsync is installed" /bin/true

fi

rm -f /etc/rsyncd.conf && cat >>/etc/rsyncd.conf<<EOF

uid = $SYS_USER

gid = $SYS_USER

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[www]

path = $DATADIR

ignore errors

read only = true

list = false

hosts allow = $HOSTIP

hosts deny = 0.0.0.0/32

auth users = backup

secrets file = $PWD_FILE

EOF

if [ ! -d $DATADIR ]

        then

                mkdir -p $DATADIR

fi

action "$datadir exist" /bin/true

if [ ! -f $PWD_FILE ]

        then

                echo "$USER:$PASSWORD" > $PWD_FILE && chmod 600 $PWD_FILE

fi

action "$PWD_FILE exist" /bin/true

rsync --daemon

[ $? -eq 0 ] && action "rsync configure successful" /bin/true

exit

你可能感兴趣的:(linux,windows,操作系统,官方网站,而且)