用 rsync 来做主机间的数据同步

Oct 23, 2016


rsync 数据同步

rsync可以用来在服务器之间 同步数据 or 备份数据  

一般linux上自动装了它,用了一下感觉很方便,记录一下以便日后再次用到  

一. 与rsync相关的目录结构

rsync这种级别的服务,推荐让root管理员来管理,当然它的相关配置也推荐放在/root目录下面  


/root/rsyncd  

    # rsync的根目录  


/root/rsyncd/conf  

    # rsync服务的配置目录  

/root/rsyncd/conf/rsyncd.conf  

    # rsync的主配置文件  

/root/rsyncd/conf/rsyncd.secrets  

    # rsync的认证配置  

/root/rsyncd/conf/rsyncd.motd  

    # rsync的用来提示用户的注释信息的配置  


/root/rsyncd/restful  

    # rsync服务的相关脚本目录  

/root/rsyncd/restful/start.sh  

    # rsync服务的启动脚本  

二. 主配置文件 rsyncd.conf

pid file = /mydata/rsyncd/rsyncd.pid  

    # rsync的进程文件目录  

motd file = /root/rsyncd/conf/rsyncd.motd  

    # rsync的用来提示用户的注释信息的配置  

log file = /mydata/rsyncd/rsyncd.log  

    # rsync的日志文件路径  

address = ******  

    # 这台服务器的ip  
    # 若仅在内部使用,请使用内网ip,否则使用公网ip  

port = 873  

    # 监听的端口  

hosts allow = *  

    # 允许的客户端的ip,*表示允许所有  

max connections = 5  

    # 最大连接数量  

uid = root  

gid = root  

use chroot = yes  

read only = yes  

    # 只读  
    # 若允许客户端上传同步数据,则可以设置 write only 或者 read write  

transfer logging = yes  

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

syslog facility = local3  

timeout = 300  


[linkA]  

path = /mydata/rsyncd/test  

auth users = root  

list = yes  

ignore errors  

secrets file = /root/rsyncd/conf/rsyncd.secrets  

    # 上面这段配置是 linkA,同一台rsync服务器上可以配置多个这种东西,每个的同步目录不同  
    # path          表示linkA所指向的需要同步的目录  
    # auth users    表示同步这个目录下的文件,需要用哪个用户来认证  
    # list=yes      表示在用户登入后,可以看到这个目录下的文件列表;反之设置为no  
    # secrets file  表示该目录所需要的认证配置信息的路径  
    # 还可以配置 exclude = dir1/ dir2/,表示在这个目录下排除(不同步)这个两个子目录  

三. 认证配置文件 rsyncd.secrets

root:abc  

    # 格式为 用户:密码  
    # 注意,此处的用户需要是这台服务器上真实存在的用户  
    # 注意,此处的密码可以不是这个用户的密码(即可以任意)  

四. 提示信息配置文件 rsyncd.motd

welcome to sync server >_<  

五. 启动脚本 start.sh

rsync --daemon --config=/root/rsyncd/conf/rsyncd.conf  

    # 以后台方式启动  
    # 指定配置文件路径  

六. 客户端操作

rsync --port 873 --list-only  root@xx.xx.xx.xx::linkA  

    # 列出服务器上linkA下面的资源  
    # 注意,需要指定端口  
    # 注意,这里的 root 指的是 linkA代表的目录所需要的认证用户  

rsync -avzrP root@xx.xx.xx.xx::linkA mypath/  

    # 把服务器上linkA下面的资源同步到本机的 mypath目录  
    # 注意,此处不需要指定端口  
    # 注意,此处的参数 -a 是 archive mode  
    # 注意,此处的参数 -v 是 传输时的进度等信息  
    # 注意,此处的参数 -z 是 压缩传输  
    # 注意,此处的参数 -r 是 递归(递归同步linkA下面的子目录)  
    # 注意,此处的参数 -P 是 传输进度  
    # 注意,这里的 root 指的是 linkA代表的目录所需要的认证用户  

rsync -avzrP --delete root@xx.xx.xx.xx::linkA mypath/  

    # 注意,比较上面一条命令,多了参数 --delete  
    # 它表示客户端的数据要与服务器上的完全一致  
    # 即如果同步之前,你的客户端的mypath目录下存在服务器上没有的文件,则同步的时候会自动删除它们  
    # 所以,使用这条命令的时候,请小心不要让你的客户端的同步目录下有其他重要数据  

Tip : 建议把客户端的同步命令放入crontab里,定期自动同步or备份