安装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属性去掉即可,其他额外参数可以随意。