CentOS7.9配置rsync实现文件同步

在日常的工作中,作为一名运维从业者,常常会遇到服务器之间的文件转移和同步,那Rsync是centos比较常用的工具,那今天就带大家简单的了解一下Rsync的具体用法
https://www.hao0564.com/1676.html Rsync两台TrueNas之间的同步

一、Rsync服务简介
  1. 什么是Rsync

它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。可以保持原来文件的权限、时间、软硬链接等附加信息。

  1. Rsync的特性

(1)可以镜像保存整个目录树和文件系统;

(2)容易做到保存原有的权限,owner、group、时间(修改时间 modify time)、软硬链接等;

(3)传输效率高,使用同步算法,只比较变化的部分;

(4)支持匿名传输,方便网站镜像管理。

二、Rsync配置使用

1,安装rsync软件


# yum  -y  install  rsync       --安装rsync
# dnf install rsync                       --centos8
连接主机...
连接主机成功
Last login: Tue Feb  8 23:42:27 2022 from 192.168.3.100
[root@localhost ~]# yum install rsync
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.sjtu.edu.cn
 * epel: mirrors.ustc.edu.cn
 * extras: mirrors.bfsu.edu.cn
 * updates: ftp.sjtu.edu.cn
软件包 rsync-3.1.2-10.el7.x86_64 已安装并且是最新版本
无须任何处理

CentOS7.9配置rsync实现文件同步
CentOS7.9配置rsync实现文件同步
查看是否已安装rsync程序包
[root@localhost ~]#  rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
[root@localhost ~]# 








  1. 配置文件

rsync的主要有以下三个配置文件,后面两个文件默认不存在,请手动创建它。

(1)rsyncd.conf(主配置文件)

(2)rsyncd.secrets(密码文件)

(3)rsyncd.motd(rsync服务器信息)

3,Rsync选项

-v      # verbose 详细模式输出
-q      # quiet 精简输出模式。
-c      # checksum 打开校验开关,强制对文件传输进行校验
-a      # archive 归档模式,以递归的方式传输文件,并保持所有文件属性,(-a = -rlptgoD)
-r      # recursive 对子目录以递归模式处理
-R      # relative 保留相对路径信息
-b      # backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不>同的备份文件前缀
--backup-dir    # 将备份文件(如~filename)存放在在目录下
-suffix=SUFFIX  # 定义备份文件前缀
-u      # update 仅进行更新,也就是跳过所有已经存在于DST(目标主机),并且文件时间晚于要备份的文件,不覆盖更新的文件
-l      # links 保留软链接
-L      # copy-links 想对待常规文件一样处理软链接
--copy-unsafe-links     # 仅仅拷贝指向SRC(源主机)路径目录树以外的链结
--safe-links    # 忽略指向SRC(源主机)路径目录树以外的链结
-H      # hard-links 保留硬链结
-p      # perms 保留文件权限
-t      # times 保持文件时间信息
-g      # group 保持文件属组信息
-o      # owner 保持文件属主信息
-D      # devices 保持设备文件信息,表示支持b,c,s,p类型的文件
-A      # 保留acl(访问控制权限)权限
-S      # sparse 对稀疏文件进行特殊处理以节省DST(目标主机)的空间
-n      # dry-run 现实哪些文件将被传输。
-w      # whole-file 拷贝文件,不进行增量检测
-x      # one-file-system 不要跨越文件系统边界
-B      # block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e      # rsh=command 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH       # 指定远程服务器上的rsync命令所在路径信息
-C      # cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing      # 仅仅更新那些已经存在于DST(目标主机)的文件,而不备份那些新创建的文件
--delete        # 删除那些DST(目标主机)中SRC(源主机)没有的文件
--delete-excluded       # 同样删除接收端那些被该选项指定排除的文件
--delete-after  # 传输结束以后再删除
--ignore-errors # 及时出现IO错误也进行删除
--max-delete=NUM        # 最多删除NUM个文件
--partial       # 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force         # 强制删除目录,即使不为空
--numeric-ids   # 不将数字的用户和组id匹配为用户名和组名
--timeout=time ip       # 超时时间,单位为秒
-I      # ignore-times 不跳过那些有同样的时间和长度的文件
--size-only     # 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM     # 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T      # temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR      # 同样比较DIR中的文件来决定是否需要备份
-P      # 等同于 --partial
--progress      # 显示备份过程
-z      # compress 对备份的文件在传输时进行压缩处理
--exclude       # 指定不传输的文件
--exclude=PATTERN       # 指定排除不需要传输的文件模式
--include=PATTERN       # 指定不排除而需要传输的文件模式
--exclude-from=FILE     # 排除FILE中指定模式的文件
--include-from=FILE     # 不排除FILE指定模式匹配的文件
--version       # 打印版本信息
--address       # 绑定到特定的地址
--config=FILE   # 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT     # 指定其他的rsync服务端口
--blocking-io   # 对远程shell使用阻塞IO
-stats          # 给出某些文件的传输状态
--progress      # 在传输时现实传输过程
--log-format=formAT     # 指定日志文件格式
--password-file=FILE    # 从FILE中得到密码
--bwlimit=KBPS  # 限制I/O带宽,KBytes per second
-h      # help 显示帮助信息

4,Rsync的普通用法

rsync  -av  /test/  /backup                               --本机上的同步,把/test目录下的内容同步到/backup目录下(包括隐藏文件)
#  rsync  -av  /test/  192.168.1.20:/backup          --把本地的/test目录内容,同步到远端191.168.1.10的/backup目录下

#  rsync  -av  192.168.1.20:/backup/  /backup/   --把远端192.168.1.20的/backup目录下的内容同步到本地的/backup目录
(注意:路径写法的区别!原目录后面加不加/也影响你的同步目录;没加/,就是将目录本身同步过去;目录加/,就是将目录里的内容同步过去!)

#  rsync  -av  /home  --exclude=abc  /backup    --将/home目录下除了abc其他内容都同步到/backup目录下

#  rsync  -a  --delete  /backup/  /test/                 --如果同步后,源主机中有文件删除了,这时要想目标主机与源主机的内容保持一致,可以使用--delete参数进行同步

#  rsync -av test@192.168.3.113::mydata /root/桌面/test/
 把服务端mydata目录同步到本地(拉到)/root/桌面/test/
# rsync -av /tmp/ test@192.168.3.113::mydata
把本地目录/tmp/推到192.168.3.113的模组mydata里
# rsync -av /tmp/a /tmp/b 
Rsync基本格式:rsync[-参数] [源文件地址][目标文件地址]
使用一下命令查看文件夹细节rsync[目录路径]
rsync 192.168.3.113::

*************************************************************************
远程拉到本地
rsync -avz myuser@192.168.101.28::模块名 DEST --password-file=/etc/rsyncd.passwd
本地推到远程
rsync -avz SRC myuser@192.168.101.28::模块名 --password-file=/etc/rsyncd.passwd
使用rsync协议
rsync -avz SRC rsync://myuser@192.168.101.28/模块名 --password-file=/etc/rsyncd.passwd
*******************************SSH***************************************
# rsync -av   root@103.99.178.177:/www/wwwroot/www.so0564.com/WorkGroup/ /www/wwwroot/192.168.3.10/WorkGroup/
从远端服务器同步到本地

# rsync -av /root/桌面/ root@103.99.178.177:/tmp/zxb
把本地同步到远程服务器/tmp/zxb

#
 rsync -av root@223.242.27.77:/www/wwwroot/192.168.3.10/WorkGroup/ /www/wwwroot/192.168.3.10/WorkGroup/
从远端服务器223.242.27.77同步到本地/www/wwwroot/192.168.3.10/WorkGroup/

#rsync -avuz -e 'ssh -p 2222' user@remote-server:/path/to/remote/folder 
/path/to/local/folder
指定端口

#rsync -auz -e 'ssh -p 43378' /data/svn/ root@192.168.1.254:/data/backup
通过rsync,并使用auz参数,结合-e修改ssh的端口,将本地的/data/svn作为源数据,用root用户推到远端服务器192.168.1.254的/data/backup目录下

三、CentOS下的Rsync服务
  1. 系统环境

系统平台: CentOS 7.9

Rsync Server: 192.168.3113

Rsync Client:  192.168.1121

2,服务端配置

  • 1.修改配置文件 vim /etc/rsyncd.conf
[root@localhost ~]# cat /etc/rsyncd.conf 
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
#
#
[mydata]
path = /tmp/test/
ignore errors = yes
read only = no
write only = no
hosts allow = 192.168.0.0/16
hosts deny = *
list = false 
uid = root
gid = root
auth users = test
secrets file = /etc/rsyncd/rsyncd.secrets 新建账号密码目录和文件,其他目录测试有问题
  • 2,创建密码文件

在ect在创建目录mkdir /etc/rsyncd 然后后touch /etc/rsyncd/rsyncd.secrets

用vim /etc/rsyncd/rsyncd.secrets

CentOS7.9配置rsync实现文件同步
CentOS7.9配置rsync实现文件同步

或echo “test:123456” > /etc/rsyncd/rsyncd.secrets

  • 3.修改文件权限为600(必须)

chmod 600 /etc/rsyncd/rsyncd.secrets

[root@localhost ~]# ls -lhs /etc/rsyncd/rsyncd.secrets 
4.0K -rw-------. 1 root root 12 2月   8 17:21 /etc/rsyncd/rsyncd.secrets
  • 4.开启 daemon
rsync --daemon
此时会开启一个默认端口 873 的监听
netstat -luntp
CentOS7.9配置rsync实现文件同步
CentOS7.9配置rsync实现文件同步
  • 5,开通防火墙端口

rsync缺省的端口是873,您可以修改配置文件中的端口。

1)防火墙开通873端口

firewall-cmd --zone=public --add-port=873/tcp --permanent

2)重启防火墙

systemctl restart firewalld

3) 启用rsyncd服务

systemctl start rsyncd

4)把rsyncd服务设置为开机自启动

systemctl enable rsyncd
四,防火墙相关设置
#  systemctl  stop  firewalld              --临时关闭防火墙 
#  systemctl  disable  firewalld          --永久关闭防火墙

关闭selinux,临时关闭:


#  setenforce 0

永久关闭:

#  vim  /etc/selinux/config
 SELINUX=disabled              --将enforcing改为disabled



#  reboot                     --重启系统永久生效
FQR汇总:

@ERROR: access denied to ngxlog from unknown (192.168.1.1)
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
 
 
原因:
    是你的rsync sever端不允许192.168.1.1访问,一般出现这个问题的情况是你在rsyncd.conf
添加了 allow host 参数,而你当前连接的ip没有在此参数中。
 
解决办法:
    添加如下参数:
    allow host 192.168.1.1 或 192.168.1.0/24都行
 
拍错思路:
    1.确定你同步的命令及相关参数设置都没有问题。
    2.通过telnet测试服务ip及端口是否可连
         telnet 192.168.2.3 873
    3.上面2步没有问题就去rsync server端看下配置文件,防火墙等等

部分内容参考:https://juejin.cn/post/6888708683929223175/
https://blog.51cto.com/u_13525470/2063052
https://www.cnblogs.com/wucongzhou/p/12660135.html

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注