rsync实现文件同步

安装rsync

配置rsync服务端

#使用yum安装
[root@test ~]# yum install rsync -y
[root@test ~]# rsync --daemon							#以守护进程方式启动
[root@test ~]# ss -nalpt | grep 873						#rsync默认监听端口是873,看以下结果,表示873端口已经启动		
LISTEN     0      5            *:873                      *:*                   users:(("rsync",pid=2491,fd=4))
LISTEN     0      5           :::873                     :::*                   users:(("rsync",pid=2491,fd=5))

#配置rsyncd.conf
#port 873												#可以指定服务运行端口,默认是873,如果需要改就吧873换成别的
uid = root												#指定运行用户
gid = root												#指定运行用户组
use chroot = yes										#锁定家目录(可以开跟不开)
log file =/data/logs/rsync/rsync.log						#指定日志存放路劲
pid file =/var/run/rsyncd.pid							#指定pid存放路劲(默认即可)
lock file =/var/run/rsyncd.lock							#支持 max connections参数的锁文件(默认即可)
secrets file =/etc/rsyncd.txt							#指定存放用户密码的文件
timeout =900											#设定超时时间
max connections =4										#设置最大连接数,0的话表示不限制,默认是4

[test]													#共享模块名称
path=/home/test/										#路劲
auth  users =pc											#指定用户
read only =no											#设置服务器读写权限,yes,只允许下载,no是可以上传加下载

#hosts allow 	+ip,多个ip用,号隔开  #允许哪些ip可以访问
#hosts deny  +ip,多个ip用,号隔开  #不允许哪些ip可以访问


#创建模块同步目录
[root@test1 test]# mkdir /home/test/			

#创建密码文件
[root@test run]# vim /etc/rsync.txt											#
123456			#格式:用户:密码,      在服务器端最好指定用户 例如:pc:123456    在客户端只要指定一个密码即可,不用加用户名(花了一上午踩的坑)
[root@test run]# chmod 600 /etc/rsync.rsync.txt

#创建日志文件
[root@test ~]# mkdir /data/logs/rsync/
[root@test ~]# touch /data/logs/rsync/rsync.log

#启动
[root@test ~]# rsync --daemon --config=/etc/rsyncd.conf
vim /etc/rc.local #在此文件后添加这一行,设置开机启动
/bin/rsync --daemon --config=/etc/rsyncd.conf  

#一键安装脚本

#报错解决心得:
假如运行rsync -vztrp -P --password-file=/etc/rsyncd.txt  /home/down/abc_source ab@ip::ab,出现如下错误
@ERROR: auth failed on module ad  	   #一堆问题引起的问题都可以报这个错误
rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]
首先到对应的rsync服务器查寻错误日志,一般默认是放在/var/log/rsyncd.log里面,直接使用tail命令查看即可
$ cat /etc/rsyncd.conf | grep log		#先找出对应的log在哪
$ tail /var/log/rsyncd.log				#查询最后10行日志,tail默认是显示倒数10行内容,
一般新产生的日志都在文件的最后面
然后看具体的报错是什么,有些问题在具体报错日志里面可以体现出来。如果日志不能为提供问题出在哪,就按照下面的方式进行排查
首先确定2台服务器是否可以正常通信,如果能正常通信,那么查看防火墙是否开放873端口及selinux是否关闭,这些都确定没有问题,
那么重新检查下配置文件是否出错,对应的目录有没有建立,是否拥有授权(有些问题也许是配置错误,你没有认出来,那么就进行下一步,先跳过这一项),
通过rsync进行测试,首先不指定密码文件进行测试,输入密码进行测试,如果这一步没有问题,
那么问题就出在密码文件那里,直接对密码文件进行排查即可,解决思路基本是这样。

客户端操作

[root@test2 ~]# yum install rsync -y
[root@test2 ~]# mkdir /home/test
[root@test2 ~]# cp /boot/* /home/test/   
[root@test2 ~]# touch /etc/rsync.txt
[root@test2 ~]# chmod 600 /etc/rsync.txt
[root@test2 ~]# rsync -avz pc@172.17.0.157::test /home/test/  --password-file=/etc/rsync.txt

rsync命令相关用法

rsync语法:
本地使用:
rsync [OPTION]... SRC [SRC]... DEST

远程使用:
拉:rsync [option]..[user@]host:src [dest]
推:rsync [option]...src..[user@]host:dest

访问rsync服务器
拉:rsync [option]... [user@]host::src [dest]
推:rsync [option]...src [user@]host::dest
拉:rsync [option]... rsync://[user@]host[:port]/src [dest]
推:rsync [option]... src [src]... rsync://[user@]host[:port]/dest

相关解析:
src是源地址
dest 目标地址

使用shell进行数据传输时,主机名与资源之间用:作为分隔符
例如:rsync -avz /home/test/ rget1@172.17.0.157:/home/rget1

使用rsync服务器进行数据传输时,主机名与资源之间用::作为分隔符
例如:rsync -avz /var/www/html rsyncuser@172.17.0.157::wwwroot --password-file=/etc/rsync.passwd

拉是指从远程主机拉数据过来
推是指从本地推送数据到远程主机


rsync一些常见的参数:
-a 保留文件属性=-rlpgoD等参数 
-r 递归复制所有资料
-p 保留文件权限
-t  保留文件时间,在做增量备份或者差量备份的时候非常重要。
-g -o 保留文件用户属性,什么所属组,所属用户	
-z 启用文件压缩
-l 复制所有文件的连接信息,拷贝连接文件
-H 保留硬链接文件
-D 保留设备或特殊文件
-P 把参数简单化,表示传送进度
-v 复杂的输出信息
--exclude=filname 排除指定文件(支持文件匹配)
--delete 干掉那些接收端还有发送端已经不存在的文件
--password-file=file 从指定文件获取密码
--propress  显示备份的过程

基于ssh端口同步

#基于密码的ssh方式同步
[root@Rendering3 test]# rsync -avz  /home/test/ -e "ssh -p 22" /home/test/  192.168.1.16:/home/test/ 				#新增 -e 参数 后面加 ssh协议 指定 22号端口,在这里不指定用户的,默认是以当前用户发起的同步命令,我这是root用户
[root@Rendering3 test]# rsync -avz  /home/test/ -e "ssh -p 22" /home/test/  test@192.168.1.16:/home/test/  		#基于某个用户ssh同步

#基于无密码的ssh同步(普通用户的操作)
[root@Rendering3 ~]# groupadd -g 873 rsync
[root@Rendering3 ~]# useradd -g 873 -u 873 -s /bin/bash -m   rsync 
[root@Rendering3 ~]# echo "123456" | passwd --stdin rsync
[root@Rendering3 ~]# su - rsync
[rsync@Rendering3 ~]$ ssh-keygen -t rsa
[rsync@Rendering3 ~]$ ssh-copy-id  rsync@192.168.1.16  				#验证成功,ssh无密码连接搞定,现在就来跑ssh同步的命令
[rsync@Rendering3 ~]$ rsync -avz /home/test/ rsync@192.168.1.16:/home/test/  

#基于无密码的ssh同步(root用户)
[root@Rendering3 ~]# ssh-keygen -t rsa									
[root@Rendering3 ~]# ssh-copy-id root@192.168.1.16
[root@Rendering3 ~]# ssh root@192.168.1.16									#能正常无密码登录192.168.1.16 这台主机,下面那步就没有任何问题
[root@Rendering3 ~]# rsync -avz -P /home/test/ root@192.168.1.16:/test		

在这里插入图片描述

故障:

故障1:启动rsync没有任何反应,也没有任何报错及守护进程

1、编辑/etc/ld.so.conf文件,添加一行:
/usr/local/lib
2、保存后运行ldconfig。
3、再启动运行rsyncd服务运行,问题得到解决。

故障2:
报错:
当你使用非root权限进行文件同步,并且需要保存文件对应属组及权限的时候,不能使用-a参数。一般用于程序调用
示例:rsync: chgrp “XXXX” failed: Operation not permitted

解决办法:
rsync -rlptD dir/ remote:/dir/ #只要将将-a参数中的-o,-g属性去掉即可,其他额外参数可以随意。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值