安装配置Rsync同步
rsync 官网 http://rsync.samba.org/
rsync 可以安装在*unix 系统上,windows下也有客户端,作者本意是想用写一个可以替代scp的工具。用法上与scp有些类似,但现多用来同步文件和做备份。
rsync可以在本机目录、本机到远程主机,远程主机到本机之间复制文件,也可以配合定时任务做文件的增量备份。特点是可以保证文件原有的权限、日期等属性,可以保证远程同步的目录内文件内容完全一致。
一、安装
主从都要安装,主以rsync --daemon 运行为服务器模式,从用rsync 同步
1.1 下载
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
1.2 编译安装
tar -xvf rsync-3.0.9.tar.gz && cd rsync-3.0.7 && ./configure --prefix=/usr/local/rsync &&make &&make install
安装到 /usr/local/rsync/ 主程序目录 /usr/local/rsync/bin/rsync
实践证明用yum 安装的rsync经常出问题,所以建议源码安装最新版本
二、配置
默认安装完成后/etc下没有rsyncd.conf.需要手动建立
2.1 新建主配置文件
vi /etc/rsyncd.conf
uid = root gid = root use chroot = no max connections = 30 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [test] read only = yes path = /opt/test comment =test dir auth users = test secrets file = /etc/rsync.pas hosts allow = 192.168.1.128
2.2 新建密码文件
vi /etc/rsync.pas
username:password chmod 600 /etc/rsync.pas
2.3 rsyncd文件详解
pid file = /var/run/rsyncd.pid 进程pid写到 /var/run/rsyncd.pid
port = 873 指定运行端口,可以自己指定;
address = 192.168.1.171 指定服务器IP地址;
uid = nobody
gid = nobdoy
注:服务器端传输文件时,要指定用户和用户组,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上同步不下来。所以我为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
use chroot = yes
用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;
read only = yes
read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;
max connections = 30 客户端最多连接数;
motd file = /etc/rsyncd/rsyncd.motd
motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。
log file = /var/log/rsync.log rsync 服务器的日志;
transfer logging = yes 这是传输文件的日志;
[test] 模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/opt/test 目录;要用[name] 形式;
path = /opt/test 指定文件目录所在位置,这是必须指定的;
auth users = test 认证用户是test ,是必须在 服务器上存在的用户;
list=yes
注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
ignore errors 忽略IO错误,详细的请查文档;
secrets file = /etc/rsyncd/rsyncd.secrets 密码存在哪个文件;
comment = home data 注释可以自己定义,写什么都行,写点相关的内容就行;
exclude = aaa/ bbb/ exclude 是排除的意思,也就是说,要把/home目录下的aaa和bbb排除在外; 目录之间有空格分开 ;
三、启动服务器端
/usr/local/rsync/bin/rsync --daemon
rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。
四、客户端同步
rsync -avzP test@192.168.1.41::test /tmp/a/
五、其他技巧
1.server端 服务开机启动:
a、加入inetd.conf
编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873。编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync --daemon
注:对于xinetd,设置方法类似。
b、加入rc.local
编辑/etc/rc.d/rc.local,在最后添加:
/usr/local/bin/rsync --daemon
2.客户端不需要输入密码
新建一个文件存放密码 touch rsync.password
修改权限为600 chmod 600 rsync.password
写入密码 echo "PASSWORD"> rsync.password
用--password-file=rsync.password 参数读取密码文件 rsync -avzP --password-file=rsync.password USERNAME@HOST::MODENAME LOCALDIR
这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;
3. rsync 客户端自动与服务器同步数据
使用定时任务 crontab -e
加入如下代码:
10 0 * * * rsync -avzP --delete --password-file=rsync.password test@testhost::test /opt/tmp
表示每天0点10分执行后面的命令。更多crontab用法请参考
4.rsync 排除文件或文件夹
rsync -avzP --exclude config.php --exclude a.log root@192.168.0.3:test /tmp
参考文件:
文档太久了,当时未做记录,如果引用了您的文档,请联系我加上引用连接