rsync单向同步

系统版本:Centos X64 6.4(最小化安装)

先安装依赖包

1 [root@localhost ~]# yum install vim wget lsof gcc make cmake makeconf autoconf automake openssh -y
View Code


开始下载安装

1 [root@localhost ~]# wget http://down1.chinaunix.net/distfiles/rsync-3.0.4.tar.gz
2 [root@localhost ~]# tar zxf rsync-3.0.4.tar.gz 
3 [root@localhost ~]# cd rsync-3.0.4
4 [root@localhost rsync-3.0.4]# ./configure && make && make install
View Code

 

安装完毕后命令的绝对路径:/usr/local/bin/rsync

参数:

-a:表示归档模式,用递归方式传输文件

-v:详细输出

-z:传输时对文件进行压缩处理

-r:对子目录进行递归

-t:保持文件的时间信息

-p:保持文件的权限

-o:保持文件的属主信息

-g:保持文件的属组信息

--delete:表示以服务端为基准进行同步,保持服务端的目录文件和客户端的完全一致

--progress:用于显示数据同步的过程

--exclude:排除不需要同步的目录或者文件

 

同步本地目录到远程主机

命令格式:rsync -av --delete 本地目录绝对路径(不能带斜杠)  远程主机用户名@远程主机地址:远程绝对路径

如果没做ssh信任关系的话会需要输入远程主机的登录密码

1 [root@localhost ~]# rsync -a --delete /etc root@192.168.1.100:/tmp
View Code

 

同步本地目录下的文件到远程主机

命令格式:rsync -av --delete 本地目录绝对路径/  远程主机用户名@远程主机地址:远程绝对路径

1 [root@localhost ~]# rsync -a --delete /etc/ root@192.168.1.100:/tmp
View Code

 

把rsync作为服务启动让远程客户端来同步

rsync服务端:192.168.1.101

rsync客户端:192.168.1.100

在rsync服务端创建一个默认的配置文件/etc/rsyncd.conf,

内容如下:

 1 #指定传输文件时守护进程具有的用户ID,这里表示默认为nobady
 2 uid=nobady
 3 #指定传输文件时守护进程具有的用户组ID,这里表示默认为nobady
 4 gid=nobody
 5 #禁止切换目录
 6 use chroot=no
 7 #客户端的最大连接数
 8 max connection=10
 9 #检查口令文件的权限,口令文件的权限用户属组必须是root,权限必须是600
10 strict modes=yes
11 #pid文件的位置
12 pid file=/var/run/rsyncd.pid
13 #lock文件的位置
14 lock file=/var/run/rsyncd.lock
15 #日志文件的位置
16 log file=/var/log/rsyncd.log
17 
18 #定义模块名
19 [gamelog]
20 #指定这个模块需要同步的路径
21 path=/usr/local/
22 #这个是注释 可以自己定义
23 comment=gamelog file
24 #忽略一些无关的IO错误
25 ignore errors
26 #no代表客户端可以上传文件,yes表示只读取
27 read only=no
28 #no表示客户端可以下载文件,yes表示不能下载
29 write only=no
30 #表示允许连接的主机地址
31 hosts allow=192.168.1.100
32 #表示不允许连接的主机地址
33 hosts deny=*
34 #不允许该模块被客户端列出
35 list=false
36 #指定传输文件时守护进程具有的用户ID,
37 uid=root
38 #指定传输文件时守护进程具有的用户组ID,
39 gid=root
40 #用来指定连接该模块的用户名,用户名可以自定义
41 auth users=back
42 #指定密码文件,文件里面记录的是用户名:密码
43 secrets file=/etc/srs.pass
View Code

帐号密码文件/etc/srs.pass

1 [root@localhost ~]# ll /etc/srs.pass 
2 -rw-------. 1 root root 12 Jul 30 20:49 /etc/srs.pass
3 [root@localhost ~]# cat srs.pass 
4 back:123456
View Code

启动服务端程序

1 [root@localhost ~]# /usr/local/bin/rsync --daemon
View Code

也可以指定配置文件启动:/usr/local/bin/rsync --daemon --config=配置文件绝对路径

 

客户端192.168.1.100

创建密码文件:

1 [root@localhost etc]# echo "123456" > rsyncd.pass 
2 [root@localhost etc]# chmod 600 rsyncd.pass 
View Code

客户端同步命令格式:/usr/local/bin/rsync -vzrtopg --delete --progress --exclude "需要排除的目录和文件"  服务端用户名@服务端地址::模块名字 本地目录 --password-file=密码文件路径

1 [root@localhost etc]# rsync -vzrtopg --delete --password-file=/etc/rsyncd.pass  back@192.168.1.101::gamelog /tmp/
2 receiving incremental file list
3 ./
4 xx
5 
6 sent 79 bytes  received 177 bytes  512.00 bytes/sec
7 total size is 1214828  speedup is 4745.42
View Code

 

出错的排查方法

1.查看防火墙是否关闭,或者对873端口添加了白名单,可以在客户端telnet 服务端的873端口

2.查看帐号密码文件的权限和所属用户是否正确

 

shell安装脚本:

rsync_install.sh

 

#!/bin/bash

function Install_Rsync()
{
    yum install wget gcc make automake makeconf openssh*-y 
    wget http://down1.chinaunix.net/distfiles/rsync-3.0.4.tar.gz
    tar zxf rsync-3.0.4.tar.gz && cd rsync-3.0.4
    ./configure && make && make install
}

function Create_Rsync_Conf()
{
    cat  <<EOF > /etc/rsyncd.conf
uid=nobody
gid=nobody
use chroot=no
max connections=10
strict modes=yes
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log
[WEBSERVER]
path=/webserver
comment=SHENG file
ignore errors
read only=no
write only=no
hosts allow=xxx.xxx.xxx.xxx
hosts deny=*
auth users=test
secrets file=/etc/rsyncd.pass
EOF
}


which rsync
if [ $? -eq 0 ]
then
    echo  -e "\033[1;32m \033[05m The rsync is Exist! \033[0m"
    Create_Rsync_Conf
    echo -e "\033[1;32m The configure file is /etc/rsyncd.conf \033[0m"
else
    echo -e "\033[1;32m Setup rsync \033[0m"
    Install_Rsync
    echo -e "\033[1;32m Create config file \033[0m"
    Create_Rsync_Conf
 
    if [ -f /etc/rsyncd.conf ]
    then
        echo -e "\033[1;32m The rsync install OK! \033[0m"
    else
        echo -e "\033[31m \033[05m The rsync install Fail! \033[0m"
    fi
fi

 

shell启动脚本 放在/etc/init.d/ 下 给755权限 chmod 755 /etc/init.d/rsyncd

rsyncd

#!/bin/bash

Rsync_Command=`whereis rsync | awk '{print $2}'`

function Start()
{
    ${Rsync_Command} --daemon
    if [ $? -eq 0 ]
        then
            echo -e "\033[1;32m  The rsyncd start successful...... \033[0m"
        else 
            echo -e "\033[31m \033[05m The rsyncd start fail !!!!!!!! \033[0m"
    fi 
}

function Stop()
{
    if [ -f '/var/run/rsyncd.pid' ]
        then
            kill -9 `cat /var/run/rsyncd.pid`
            sleep 1
            proce_num=`ps -ef | grep ${Rsync_Command} | grep -v grep | wc -l`
            if [ ${proce_num} -gt 0 ]
                then
                    echo -e "\033[31m \033[05m The rsyncd Stop fail !!!!!!!! \033[0m"
                else
                    echo -e "\033[1;32m  The rsyncd Stop successful...... \033[0m"
                    rm /var/run/rsyncd.pid
            fi
    else
        echo -e "\033[31m \033[05m  The /var/run/rsyncd.pid file is not exist! Check rsync is Runing ??? \033[0m"
              
    fi
}

function Restart()
{
    Stop
    sleep 2
    Start
}

case $1 in
    start)
        Start
        ;;
    stop)
        Stop
        ;;
    restart)
        Restart
        ;;
    *)
        echo -e "\033[31m \033[05m Use start|stop|restart \033[0m"
        ;;
esac

 

posted @ 2014-07-31 01:28  ppingg  阅读(4761)  评论(0编辑  收藏  举报