当前位置: 首页 > news >正文

rsync实现远程同步

什么是rsync

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
已支持跨平台,可以在Windows与Linux间进行数据同步。

以上内容来自于百度百科,本文记录的是Linux之间的同步,Linux与Windows系统之间的同步稍后研究。

安装

命令行测试一下rsync是否已安装:

[root@localhost etc]# rsync 
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,append, ACLs, xattrs, iconv, symtimes, prealloc

说明rsync已经安装,否则,需要首先安装rsync:

 # CentOS
yum -y install rsync
# Ubantu
apt install rsync

之后验证一下,应该就OK了,安装很简单。

启动rsync服务

rsync命令执行的时候,相当于是rsync的客户端命令,rsync可以支持本地或远程的同步。在执行远程同步的时候,需要rsync服务端的支持。

我们把rsync服务端安装部署在需要进行远程同步文件(source)的一侧。安装rsync服务之后,启动服务:

[root@localhost etc]# systemctl status rsyncd.service
● rsyncd.service - fast remote file copy program daemonLoaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)Active: active (running) since Mon 2025-05-19 11:28:59 HKT; 2h 51min agoMain PID: 8330 (rsync)Tasks: 1Memory: 32.6MCGroup: /system.slice/rsyncd.service└─8330 /usr/bin/rsync --daemon --no-detach

如果看到以上信息,说明rsync服务已经启动,否则,需要手动启动下:

systemctl enable rsyncd.service
systemctl start rsyncd.service

启动之后,检查一下:
在这里插入图片描述
服务默认启动在873端口。

检查防火墙

这一步也是必要的,需要确保873端口被防火墙放行:

[root@localhost etc]# firewall-cmd --query-port=873/tcp
You're performing an operation over default zone ('public'),
but your connections/interfaces are in zone 'docker' (see --get-active-zones)
You most likely need to use --zone=docker option.yes

如果没被放行,需要首先放行873端口:

firewall-cmd --permanent --add-port=873/tcp
# 重启
service firewalld restart

之后再firewall-cmd --query-port=873/tcp查询,应该看到开头的已经放行的内容。

配置rsync

首先编辑/etc/rsync.conf文件:

# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:uid = root
gid = root
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 areaauth users = root
secrets file = /etc/rsyncd.secrets[tongbu]path = /jeecg-boot/dbbackupcomment = backup db and sync to remote serverignore errors = yesread only = nolist = no      #host allow = 192.168.31.197

我没有新建同步用户,直接用root进行同步了,其中[tongbu]模块下定义需要同步的本机内容,read only设置为no,host allow设置为另外一台将要远程获取本机/jeecg-boot/dbbackup目录下的待同步内容的机器。

之后,需要配置同步用户及密码,也就是/etc/rsync.conf文件中指定的secrets file = /etc/rsyncd.secrets的内容。

vi /etc/rsyncd.secrets
# 输入一下内容
root:yourrootpassword

保存退出,注意,用户名要和conf文件中指定的一致,密码要正确输入。

最后,需要注意rsync要求密码验证文件/etc/rsyncd.secrets必须只有rsync用户能访问、其他用户不能访问,所以,修改权限:

[root@localhost etc]# chmod 600 /etc/rsyncd.secrets
[root@localhost etc]# ls -lrt rsyncd.secrets
-rw-------. 1 root root 17 May 19 11:28 rsyncd.secrets
调整SELinux 策略

这一步也是不许的,否则客户端执行同步的时候会报错permission deny:

# 这是临时禁用
setenforce 0
# 调整 SELinux 策略以允许 rsync 正常运行:
setsebool -P allow_rsync_anon_write 1

服务端的准备工作就完成了。

客户端执行同步

切换到远程客户端(我上面的配置的192.168.31.197机器上),首先检查rsync是否已安装。

创建一个同步路径,到同步路径下,要执行的同步命令是:

rsync -avz root@192.168.31.198::tongbu --password-file=./rsyncd.passwd /dbbackup-198

执行之前,先需要创建一个password file:/rsyncd.passwd,所以,在当前路径下:

vi rsyncd.passwd
# 在rsyncd.passwd文件中只输入远程服务器执行rsync命令的用户密码,我配置的是root,所以,输入root的密码
yourrootpassword

之后保存文件,同样需要修改权限:

chmod 600 rsyncd.passwd

万事俱备,可以执行了:

root@kmkf2:/dbbackup-198# rsync -avz root@192.168.31.198::tongbu --password-file=./rsyncd.passwd /dbbackup-198
receiving incremental file list
rsync: opendir "/." (in tongbu) failed: Permission denied (13)sent 24 bytes  received 114 bytes  276.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1865) [generator=3.2.7]
root@kmkf2:/dbbackup-198# rsync -avz root@192.168.31.198::tongbu --password-file=./rsyncd.passwd /dbbackup-198
receiving incremental file list
dbbackup.sh
dcom.sql.001.gz
doc.sql.gz
doc_sql.gz
ftpupload.sh
jeecg_20240808_020001.sql
jeecg_20250428_020002.sql.gz
jeecg_20250429_020001.sql.gz
jeecg_20250430_020001.sql.gz
jeecg_20250501_020001.sql.gz
jeecg_20250502_020001.sql.gz
jeecg_20250503_020001.sql.gz
jeecg_20250504_020001.sql.gz
jeecg_20250505_020001.sql.gz
jeecg_20250506_020001.sql.gz
jeecg_20250507_020001.sql.gz
jeecg_20250508_020001.sql.gz
jeecg_20250509_020001.sql.gz
jeecg_20250510_020001.sql.gz
jeecg_20250511_020001.sql.gz
jeecg_20250512_020001.sql.gz
jeecg_20250513_020001.sql.gz
jeecg_20250514_020001.sql.gz
jeecg_20250515_020001.sql.gz
jeecg_20250516_020001.sql.gz
jeecg_20250517_020001.sql.gz
jeecg_20250518_020001.sql.gz
jeecg_20250519_020001.sql.gz
newMes_20250428_020003.sql.gz
newMes_20250429_020002.sql.gz
newMes_20250430_020002.sql.gz
newMes_20250501_020002.sql.gz
newMes_20250502_020003.sql.gz
newMes_20250503_020002.sql.gz
newMes_20250504_020002.sql.gz
newMes_20250505_020002.sql.gz
newMes_20250506_020002.sql.gz
newMes_20250507_020002.sql.gz
newMes_20250508_020002.sql.gz
newMes_20250509_020002.sql.gz
newMes_20250510_020002.sql.gz
newMes_20250511_020002.sql.gz
newMes_20250512_020002.sql.gz
newMes_20250513_020002.sql.gz
newMes_20250514_020002.sql.gz
newMes_20250515_020002.sql.gz
newMes_20250516_020002.sql.gz
newMes_20250517_020002.sql.gz
newMes_20250518_020002.sql.gz
newMes_20250519_020002.sql.gzsent 978 bytes  received 59,834,665 bytes  23,934,257.20 bytes/sec
total size is 69,179,201  speedup is 1.16
root@kmkf2:/dbbackup-198# ls -lrt
total 67672
-rwxr-xr-x 1 root root     421 May 26  2024 ftpupload.sh
-rw-r--r-- 1 root root 9302107 Aug  8  2024 jeecg_20240808_020001.sql
-rw-r--r-- 1 root root   47418 Sep 29  2024 doc.sql.gz
-rw-r--r-- 1 root root   63202 Oct  9  2024 doc_sql.gz
-rw-r--r-- 1 root root 5651427 Oct 21  2024 dcom.sql.001.gz
-rwxr-xr-x 1 root root     865 Apr 22 17:56 dbbackup.sh
-rw-r--r-- 1 root root 1594123 Apr 28 02:00 jeecg_20250428_020002.sql.gz
-rw-r--r-- 1 root root  843705 Apr 28 02:00 newMes_20250428_020003.sql.gz
-rw-r--r-- 1 root root 1594638 Apr 29 02:00 jeecg_20250429_020001.sql.gz
-rw-r--r-- 1 root root  844916 Apr 29 02:00 newMes_20250429_020002.sql.gz
-rw-r--r-- 1 root root 1595289 Apr 30 02:00 jeecg_20250430_020001.sql.gz
-rw-r--r-- 1 root root  846608 Apr 30 02:00 newMes_20250430_020002.sql.gz
-rw-r--r-- 1 root root 1595870 May  1 02:00 jeecg_20250501_020001.sql.gz
-rw-r--r-- 1 root root  849114 May  1 02:00 newMes_20250501_020002.sql.gz
-rw-r--r-- 1 root root 1596476 May  2 02:00 jeecg_20250502_020001.sql.gz
-rw-r--r-- 1 root root  849342 May  2 02:00 newMes_20250502_020003.sql.gz
-rw-r--r-- 1 root root 1597053 May  3 02:00 jeecg_20250503_020001.sql.gz
-rw-r--r-- 1 root root  849597 May  3 02:00 newMes_20250503_020002.sql.gz
-rw-r--r-- 1 root root 1597633 May  4 02:00 jeecg_20250504_020001.sql.gz
-rw-r--r-- 1 root root  849802 May  4 02:00 newMes_20250504_020002.sql.gz
-rw-r--r-- 1 root root 1598190 May  5 02:00 jeecg_20250505_020001.sql.gz
-rw-r--r-- 1 root root  850013 May  5 02:00 newMes_20250505_020002.sql.gz
-rw-r--r-- 1 root root 1598704 May  6 02:00 jeecg_20250506_020001.sql.gz
-rw-r--r-- 1 root root  850060 May  6 02:00 newMes_20250506_020002.sql.gz
-rw-r--r-- 1 root root 1599334 May  7 02:00 jeecg_20250507_020001.sql.gz
-rw-r--r-- 1 root root  853746 May  7 02:00 newMes_20250507_020002.sql.gz
-rw-r--r-- 1 root root 1599911 May  8 02:00 jeecg_20250508_020001.sql.gz
-rw-r--r-- 1 root root  856876 May  8 02:00 newMes_20250508_020002.sql.gz
-rw-r--r-- 1 root root 1600405 May  9 02:00 jeecg_20250509_020001.sql.gz
-rw-r--r-- 1 root root  859506 May  9 02:00 newMes_20250509_020002.sql.gz
-rw-r--r-- 1 root root 1600950 May 10 02:00 jeecg_20250510_020001.sql.gz
-rw-r--r-- 1 root root  860582 May 10 02:00 newMes_20250510_020002.sql.gz
-rw-r--r-- 1 root root 1601526 May 11 02:00 jeecg_20250511_020001.sql.gz
-rw-r--r-- 1 root root  860747 May 11 02:00 newMes_20250511_020002.sql.gz
-rw-r--r-- 1 root root 1602177 May 12 02:00 jeecg_20250512_020001.sql.gz
-rw-r--r-- 1 root root  860891 May 12 02:00 newMes_20250512_020002.sql.gz
-rw-r--r-- 1 root root 1602745 May 13 02:00 jeecg_20250513_020001.sql.gz
-rw-r--r-- 1 root root  864541 May 13 02:00 newMes_20250513_020002.sql.gz
-rw-r--r-- 1 root root 1603250 May 14 02:00 jeecg_20250514_020001.sql.gz
-rw-r--r-- 1 root root  868116 May 14 02:00 newMes_20250514_020002.sql.gz
-rw-r--r-- 1 root root 1603868 May 15 02:00 jeecg_20250515_020001.sql.gz
-rw-r--r-- 1 root root  872937 May 15 02:00 newMes_20250515_020002.sql.gz
-rw-r--r-- 1 root root 1604417 May 16 02:00 jeecg_20250516_020001.sql.gz
-rw-r--r-- 1 root root  876103 May 16 02:00 newMes_20250516_020002.sql.gz
-rw-r--r-- 1 root root 1604916 May 17 02:00 jeecg_20250517_020001.sql.gz
-rw-r--r-- 1 root root  880954 May 17 02:00 newMes_20250517_020002.sql.gz
-rw-r--r-- 1 root root 1605475 May 18 02:00 jeecg_20250518_020001.sql.gz
-rw-r--r-- 1 root root  881159 May 18 02:00 newMes_20250518_020002.sql.gz
-rw-r--r-- 1 root root 1606100 May 19 02:00 jeecg_20250519_020001.sql.gz
-rw-r--r-- 1 root root  881396 May 19 02:00 newMes_20250519_020002.sql.gz
-rw------- 1 root root      12 May 19 11:31 rsyncd.passwd
root@kmkf2:/dbbackup-198# 
root@kmkf2:/dbbackup-198# 
root@kmkf2:/dbbackup-198# 
root@kmkf2:/dbbackup-198# rsync -avz root@192.168.31.198::tongbu --password-file=./rsyncd.passwd /dbbackup-198
receiving incremental file listsent 24 bytes  received 1,895 bytes  3,838.00 bytes/sec
total size is 69,179,201  speedup is 36,049.61

执行完成后,再次执行,rsync监测到文件没有变化,没有任何需要同步的内容。

定时执行

创建一个rsync.sh文件:

cd  /dbbackup-198rsync -avz root@192.168.31.198::tongbu --password-file=./rsyncd.passwd /dbbackup-198

修改可执行权限:

root@kmkf2:/dbbackup-198# chmod 755 rsync.sh# crontab -e 编辑自动任务
crontab -e
# 加入如下一行,每天凌晨2点执行任务
00 02 * * * /dbbackup-198/rsync.sh

保存退出,自动任务设置完成。目标服务器198上每天凌晨2点自动执行数据库备份,之后,凌晨3点rsync自动将备份文件同步到197上,实现了重要文件的定时自动双机备份。

http://www.xdnf.cn/news/536005.html

相关文章:

  • vs code SSH配置免密登录
  • day017-磁盘管理-实战
  • 深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起
  • c++字符串常用语法特性查询示例文档(一)
  • 包装类(1)
  • 22-内部FLASH
  • java day13
  • JVM 垃圾回收器
  • EX文件浏览器:功能强大的安卓文件管理工具
  • 特征值与特征向量的计算——PCA的数学基础
  • 扫描项目依赖漏洞
  • Go语言八股文之分库分表
  • 中服云生产线自动化智能化调度生产系统:打造智能制造新标杆
  • 前端子项目打包集成主项目实战指南
  • 高校快递物流管理系统设计与实现(SpringBoot+MySQL)
  • 1.3.3 数据共享、汇聚和使用中的安全目标
  • 蓝桥杯框架-LED蜂鸣器继电器
  • 大中型水闸安全监测系统解决方案
  • C++初阶-vector的底层
  • 解决RAGFlow部署中镜像源拉取的问题
  • 单点登录是是什么?具体流程是什么?
  • 计算圆周率 (python)
  • select * from 按时间倒序排序
  • AT_abc401_d [ABC401D] Logical Filling 题解
  • 经典密码学和现代密码学的结构及其主要区别(1)凯撒密码——附py代码
  • 酒店运营中一次性用品选购要点及扬州卓韵酒店用品的专业咨询服务
  • 初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)
  • C++ 关于C++中IO流的相关内容 stringstream的相关介绍
  • 「卫星百科」四维高景系列卫星
  • 从API到UI:直播美颜SDK中的滤镜与贴纸功能开发与落地方案详解