rsync与scp不同:
rsync:选择性复制,如果一个文件有改动,则会同步,如果没有改动,不会同步
scp:不管有没有更新,都会覆盖源文件
1、下载并安装:wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz
tar -xzf rsync-3.1.2.tar.gzcd rsync-3.1.2
./configure --prefix=/usr/local/rsyncdmake && make install
安装的时候会出现的问题以及解决:
问题:./configure 后显示
checking for gcc... no
checking for cc... no
hecking for cl.exe... no
configure.sh:error:no acceptable C compiler found in $PATH
See 'config.log' for more details.
解决:是因为没装gcc编译器! 点击执行 yum -y install gcc即可
2、服务端配置 (随意建一下文件)
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets
touch /etc/rsyncd/rsyncd.motd
chmod 600 /etc/rsyncd/rsyncd.secrets
3、配置rsyncd.conf的内容
pid file = /var/run/rsyncd.pid #进程 pid 文件所在位置
port = 873 #指定监听端口,默认是873,可以自己指定
address = 192.168.1.171 #服务器监听的IP地址,可省略
uid = root #守护进程所属的uid,默认是nobody,可能会碰到文件或目录权限问题,此处偷懒用的 root
gid = root #守护进程的gid
#chroot,即改变程序执行时所参考的根目录位置,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中
#这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外
#也就是说,你在 rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容
use chroot = yes
read only = no #只读选择,只让客户端从服务器上读取文件
write only = yes #只写选择,只让客户端到服务器上写入
#允许访问的IP,可以指定单个IP,也可以指定整个网段,能提高安全性。格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
max connections = 5 #客户端最多连接数
#当用户登录时会看到这个信息。比如显示当前时间、公告等
motd file = /etc/rsyncd/rsyncd.motd
log file = /var/log/rsync.log #rsync 服务器的日志;
transfer logging = yes #记录传输文件的日志
log format = %t %a %m %f %b #日志格式
syslog facility = local3 #日志级别
#通过该选项可以覆盖客户指定的IP超时时间。可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
timeout = 300
#模块定义
#主要是定义服务器哪个目录要被同步。
#每个模块都要以[name]形式。这个名字就是在 rsync 客户端看到的名字。
#但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。
#每个模块要指定认证用户、密码文件,但排除并不是必须的。
[ logs ] #模块名,以下配置都属于此模块
path = /var/log #文件目录所在位置
list = no #当查看服务器上提供了哪些目录时是否列出来,no比较安全
ignore errors #忽略I/O错误
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系,是 rsyncd.secrets 中的用户名!
#如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份。
#这里使用的 challenge/response 认证协议。
#用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
auth users = zhangzk
secrets file = /etc/rsyncd/rsyncd.secrets #密码文件
exclude = error_log httpd.pid #忽略的文件或目录
comment this is my log #本模块注释,可选
4、配置rsyncd.secrets的用户名以及密码
格式:用户名:密码
会出现的问题以及解决方案:大多数的问题基本都是认证不通过,基本的解决方案是:auth user的用户名是否
和文件中一致,以及客户端的密码是否相同,还有就是该文件的权限必须为chmod 600 客户端的密码文件也必须
是chmod 600。如果都不是上面的问题,那么将auth user的用户名设置为liunx的用户名(如果之前不是设为服务器的用户名的话)
5、启动服务端 在这里以守护线程来开启
/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
还有一种是以xinet方式,不做详细解说
6、客户端配置
6.1 和上述安装步骤一样
6.2 配置密码文件/etc/rsyncd/rsyncd.pass,并修改为 600 权限,并且密码和服务端一致,格式只是密码即可
6.3 传输文件rsync -vzrtopg --delete --progress /var/log/access.log root@192.168.1.100::logs --password-file=/etc/rsyncd/rsyncd.pass --port=873
6.4 从服务器拉文件 拉取整个目录
rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd/rsyncd.pass --port=873 zhangzk@192.168.1.100::logs /var/log