Rsync数据复制

远程数据传输

pull拉取
语法
rsync  option               user@host:src                dest
命令        可选参数        用户名@主机ip:源路径            本地路径

push推送
语法
rsync        option        src            user@host:dest
命令        参数            本地路径        用户@主机ip:目的路径
1.把远程主机的/etc/hosts文件,拷贝到本地/tmp
[root@rsync01 ~]# rsync -av -e 'ssh -p 22' root@10.0.0.40:/etc/hosts /tmp/
The authenticity of host '10.0.0.40 (10.0.0.40)' can't be established.
ECDSA key fingerprint is SHA256:+MXyMm05tl3oyI4urvkWgWG4T30tuY/Irm9nYll9ero.
ECDSA key fingerprint is MD5:e4:f4:b4:81:bd:f3:f8:4d:61:a2:cd:2c:e7:e0:bd:c4.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': y
Please type 'yes' or 'no': yes
Warning: Permanently added '10.0.0.40' (ECDSA) to the list of known hosts.
root@10.0.0.40's password: 
receiving incremental file list
hosts

sent 43 bytes  received 243 bytes  21.19 bytes/sec
total size is 158  speedup is 0.55

#配置免密登录后,即可不需要输入密码

--参数
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步,若是默认22,可以不写该参数
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v, --verbose 详细模式输出

守护进程传输模式

【拉取语法】

1.拉取模式语法,推荐使用,看清楚参数的符号!
rsync        参数    user@host::src (源地址)       dest(目标地址)

2.拉取第二种
rsync        参数        rsync://user@host:port/src    dest

【推送语法】

1.推送语法
rsync  参数  src    user@host::dest

2.推送第二种
rsync  参数  src    rsync://user@host:port/dest

想要通过守护传输模式进行复制传输数据,还得额外部署Rsync Daemon服务才行

守护进程传输模式实战

【准备三台linux服务器】

1.准备三台linux机器
10.0.0.30        Nginx web服务器
10.0.0.40        Rsync备份存储服务器
10.0.0.50        NFS存储服务器

【环境部署,Rsync备份服务器】

1.准备linux系统环境
[root@rsync-backup ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@rsync-backup ~]# uname -r    #查看内核版本
3.10.0-1160.el7.x86_64
[root@rsync-backup ~]# uname -m    #查看内核架构
x86_64
2.是否安装了rsync软件,若是未安装可以yum安装即可  
[root@rsync-backup ~]# rpm -qa rsync
rsync-3.1.2-12.el7_9.x86_64

【配置需求】

在Rsync备份机器上以rsync守护进程的方式部署Rsync服务,使得所有Rsync节点的客户端主机,可以把本地数据通过rsync命令备份数据到BACKUP服务器上。

【备份架构拓扑图】

以Rsync守护进程模式部署架构,并且以远程数据同步方式由客户端节点向服务器端推送数据

Rsync服务端部署

步骤举例Rsync步骤
1 确认是否有个房间可以当做仓库 确认Rsync程序是否安装
2 装修改造房间为仓库 修改Rsync配置文件信息
3 确认仓库的管理员 创建负责Rsync服务的虚拟用户
4 仓库中有柜子可以存储,管理员可以打开柜子 创建Rsync服务备份数据的目录,进行对虚拟用户授权
5 仓库要提升安全,上个锁 配置Rsync服务安全相关密钥,且对密钥文件授权600
6 确认仓库可以用了 启动Rsync服务,让其可以工作
7 确定仓库每天开门工作 设置Rsync服务开机启动

【第一步,修改rsyncd.conf配置文件】

Rsync守护进程配置在BACKUP服务器上

1.修改配置文件,默认是 /etc/rsyncd.conf
uid = rsync
gid = rsync
fake super = yes 
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = This is rsync backup!
path = /backup/

【第二步,配置数据备份的目录】

1.根据rsyncd.conf中定义的目录,创建目录、用户
[root@rsync-backup ~]# useradd -s /sbin/nologin -M rsync
[root@rsync-backup ~]# mkdir /backup
[root@rsync-backup ~]# chown -R rsync.rsync /backup/
2.配置用于Rsync复制的账户、密码、文件权限,在Rsync备份服务端创建
[root@rsync-backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@rsync-backup ~]# chmod 600 /etc/rsync.password 
##检查密码文件,权限
[root@rsync-backup ~]# ll /etc/rsync.password 
-rw-------. 1 root root 20 May 17 11:55 /etc/rsync.password
[root@rsync-backup ~]# cat /etc/rsync.password 
rsync_backup:123456
3.启动rsync服务,开机自启
[root@rsync-backup ~]# systemctl start rsyncd
[root@rsync-backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@rsync-backup ~]# systemctl status rsyncd
4.检查Rsync服务进程、端口
[root@rsync-backup ~]# netstat -tunlp|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1329/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      1329/rsync
[root@rsync-backup ~]# ps -ef |grep rsync|grep -v grep
root       1329      1  0 11:58 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
[root@rsync-backup ~]# ps -aux |grep rsync|grep -v grep
root       1329  0.0  0.1 114852  1140 ?        Ss   11:58   0:00 /usr/bin/rsync --daemon --no-detach

Rsync客户端(nfs01)配置

1.确认rsync命令是否有
2.创建和rsync服务端连接的账户密码文件,且授权
3.注意Rsync客户端要和服务端的配置区别开

配置过程

1.安装rsync
[root@nfs ~]# rpm -qa rsync
rsync-3.1.2-12.el7_9.x86_64
2.创建密码文件,和服务端相同
[root@nfs ~]# echo "123456" > /etc/rsync.password
3.授权文件
[root@nfs ~]# chmod 600 /etc/rsync.password 
4.验证文件密码、权限
[root@nfs ~]# cat /etc/rsync.password 
123456
[root@nfs ~]# ll /etc/rsync.password 
-rw-------. 1 root root 7 May 21 09:41 /etc/rsync.password
5.配置特殊变量RSYNC_PASSWORD,可以替代密码文件
[root@nfs ~]# export RSYNC_PASSWORD=123456    #临时生效
[root@nfs ~]# echo "export RSYNC_PASSWORD=123456" >> /etc/bashrc     #永久生效
6.验证密码变量
[root@nfs ~]# tail -1 /etc/bashrc
export RSYNC_PASSWORD=123456
[root@nfs ~]# echo $RSYNC_PASSWORD 
123456

至此Rsync守护进程方式,服务端、客户端都配置完毕

测试数据同步

拉取:服务端同步文件给客户端

 连接成功

1.同步到服务端Rsync指定的目录(/bakcup)下,拉取到客户端的/opt/目录
[root@nfs ~]# rsync -avzP rsync_backup@10.0.0.40::backup /opt/ --password-file=/etc/rsync.password 
receiving incremental file list
./
hhhhhhhh.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)

sent 46 bytes  received 156 bytes  404.00 bytes/sec
total size is 0  speedup is 0.00
2.也可以直接使用密码变量,进行同步
rsync -avzP rsync_backup@10.0.0.40::backup /opt/ --password-file=/etc/rsync.password 
-a  保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息
/opt/  要拉取的本地目录,注意backup/ 表示拉取该目录下内容


rsync_backup@10.0.0.40::backup
##验证rsync服务端参数 grep "auth user" /etc/rsyncd.conf 
auth users = rsync_backup    同步数据的虚拟认证用户
##backup是服务器配置文件中定义的模块名
@10.0.0.40::backup    要推送的目的地ip地址以及模块名称

--password-file=/etc/rsync.password   #指定密码文件

推送:客户端同步文件给服务端

1.从客户端/opt目录下同步文件到服务端rsync指定的目录/backup下
[root@nfs ~]# rsync -avzP /opt/ rsync_backup@10.0.0.40::backup --password-file=/etc/rsync.password 
sending incremental file list
./
test_rsync.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/4)

sent 172 bytes  received 38 bytes  420.00 bytes/sec
total size is 0  speedup is 0.00

注意同步问题

报错一:No route to host (113)

检查服务器防火墙是否关闭

rsync: failed to connect to 10.0.0.40 (10.0.0.40): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(126) [Receiver=3.1.2]

报错二:Permission denied (13)

权限不足,检查服务器selinux是否关闭,setenforce 0关闭

receiving incremental file list
rsync: failed to read xattr user.rsync.%stat for "." (in backup): Permission denied (13)
rsync: opendir "." (in backup) failed: Permission denied (13)
解决办法:
1. 共享目录的属主和属组不正确,不是rsync

2. 共享目录的权限不正确,不是755

3.注意防火墙,selinux的关闭

报错三:@ERROR: auth failed on module backup

[root@nfs ~]# rsync -avzP rsync-backup@10.0.0.40::backup/ /opt/ --password-file=/etc/rsync.password 
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1656) [Receiver=3.1.2]

##检查/var/log/rsyncd.log日志,发现可能是连接了不知道的虚拟用户
2023/05/21 10:38:45 [1609] params.c:Parameter() - Ignoring badly formed line in config file: ignore errors
2023/05/21 10:38:45 [1609] name lookup failed for 10.0.0.50: Name or service not known
2023/05/21 10:38:45 [1609] connect from UNKNOWN (10.0.0.50)
2023/05/21 10:38:45 [1609] auth failed on module backup from UNKNOWN (10.0.0.50) for rsync-backup: no matching rule
1.密码文件错误/etc/rsync.password
2.密码文件参数和实际的密码文件名不一致,检查secrets file = /etc/rsync.password
3.密码文件权限不对 ll /etc/rsync.password  不是600
4.检查免密文件,是否手误

服务端:
[root@rsync-backup ~]# cat /etc/rsync.password 
rsync_backup:123456

客户端:
[root@nfs ~]# cat /etc/rsync.password 
123456

报错四:ERROR: The remote path must start with a module name not a /

[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.40::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]

报错五:The remote path must start with a module name not a /

[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.40::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]

解决办法:
客户端命令敲错了
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

报错六:Unknown module 'backuplllllll'

[root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.40::backuplllllll
@ERROR: Unknown module 'backuplllllll'
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]


解决办法:
1、 /etc/rsyncd.conf配置文件模块名称书写错误

2、配置文件中网段限制不对报错七:

【注意命令同步的细节】

1.同步整个文件夹
[root@nfs ~]# rsync -avzP /etc rsync_backup@10.0.0.40::backup
2.同步文件夹下内容
[root@nfs ~]# rsync -avzP /etc/ rsync_backup@10.0.0.40::backup

Rsync服务端排错思路

  1. 检查rsync服务端的配置文件路径是否正确:/etc/rsyncd.conf
  2. 查看配置文件的host allow,host deny允许的ip网段是否允许客户端访问
  3. 查看配置文件中的path参数路径是否存在,权限是否正确(和配置文件的UUID参数对应)
  4. 查看rsync服务是否启动,端口、进程是否存活
  5. 查看iptables防火墙、selinux是否允许rsync服务通过,或是关闭
  6. 查看服务端rsync配置文件的密码文件,权限是否600,格式,语法是否正确,且和配置文件的secrect files参数对应
  7. 如果是推送数据,要查看配置rsyncd.conf中的用户对该rsync模块下的文件是否可以读取

Rsync客户端排错

  1. 查看rsync客户端配置的密码文件权限是否600,密码文件格式是否正确,是否和服务端的密码一致
  2. 尝试telnet连接rsync服务端的873端口,检测服务是否可以连接
  3. 客户端执行命令语法要检查,细心
posted @ 2023-05-21 23:06  Junwu’sblog  阅读(627)  评论(0编辑  收藏  举报