CentOS下(rsync+crontab)触发式实现服务器间的文件备份同步

2024-06-07 17:32

本文主要是介绍CentOS下(rsync+crontab)触发式实现服务器间的文件备份同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

  • 随着时间的推移,即便当初再小的项目,如今也变得五脏俱全,尤其是在不断的更新迭代后,代码量和文件数目越来越大,多数又不止使用了一个服务器(负载均衡)
  • 此时如果进行功能上线,需要依次上传文件,太过繁杂,而且容易漏传,所以想着找一种方法,只需上传其中的一台服务器,从服务器自动进行数据同步则便捷了许多,于是找到了 rsync 文件备份的支持.
  • 测试环境: CentOS 6.5,CentOS 7
  • 功能亮点: 计划任务
  • 个人观点 : 推荐学习文章—— 【CentOS下(rsync+inotify)监听式实现服务器间的备份实时同步】

【声明】: 文章主要参考来源 -【rsync 实现文件备份同步】,然后根据自己的具体情况进行了实例说明,在此谢谢前辈们的经验指导…

一、概念介绍

(1). 什么是 rsync?

rsync 是类 unix系统下的数据镜像备份工具 —— remote sync;
一款快速增量备份工具 Remote Sync;
远程同步 支持本地复制,或者与其他SSH、rsync主机同步。第一次同步时, rsync 会复制全部内容,但在下一次只传输修改过的文件;
rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。rsync 是用 “ rsync 算法” 提供了一个客户机和远程文件服务器的文件同步的快速方法

(2). rsync 的一些特性

>1. 能更新整个目录和树和文件系统
>2. 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等
>3. 对于安装来说,无任何特殊权限要求
>4. 对于多个文件来说,内部流水线减少文件等待的延时
>5. 安全,能用 rsh、ssh 或直接端口做为传输端口,或者 socket 连接
>6. 支持匿名 rsync 同步文件,是理想的镜像工具
>7. 免费啊

二、功能分析

- 配置此功能,首先明确的是,在角色上,需要服务端和客户端 (1:N)
- 服务端,主要负责文件的首次上传,更新操作等
- 客户端,会随着服务端的文件变化进行同步-(下载,更新,删除等)

在操作上,最简单的配置比例为【服务端:客户端 = 1:1】
例如,本次的实际操作中
我配置了一个服务端(IP:192.168.1.160
其中的一个客户端(IP:192.168.1.161
后期添加了另一个客户端(IP:192.168.1.150

三、配置操作【重点】

(1). 服务端配置

①. 安装 rsync

  • 一般当下的 CentOS 系统都默认安装了此软件,建议运行命令 rsync 查看,一般会有如下的界面:
    image
  • 如果没有出现上述界面,可自行安装,如以下命令:
yum install rsync 

②. 进行配置文件的修改【建议 root 用户下操作

  • rsync 的主要有以下三个配置文件:

rsyncd.conf (主配置文件)、rsyncd.secrets (密码文件)、rsyncd.motd ( rysnc 服务器显示信息)

  • 服务器配置文件( /etc/rsyncd.conf ),该文件默认不存在,需要创建它
(1). 依次执行如下命令:
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf #创建 rsyncd.conf,这是 rsync 服务器的配置文件
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf #创建软链接
touch /etc/rsyncd/rsyncd.secrets  #创建 rsyncd.secrets ,这是用户密码文件
chmod 600 /etc/rsyncd/rsyncd.secrets  #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为 600, 否则无法备份成功
touch /etc/rsyncd/rsyncd.motd
(2). 修改 rsyncd.conf
  • rsyncd.conf 是 rsync 服务器主要配置文件。以下为我的文件信息,可作参考或进行进一步的修改
  • 如下代码表示,我要备份服务器上的 /server/ftpfile 目录,同时想把 /server/ftpfile/file3目录排除在外
# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsyncd/rsyncd.secrets
motd file = /etc/rsyncd/rsyncd.motdport = 873 
#指定运行端口,默认是873,您可以自己指定;
address = 192.168.1.160 
#指定服务端IP地址# uid = nobody
# gid = nobodyuid = root
gid = rootuse chroot = no
read only = yes#limit access to private LANs
hosts allow=192.168.1.161 192.168.1.150 #以空格分割 客户端IP
hosts deny=*max connections = 10#This will give you a separate log file
log file = /var/log/rsync.log#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yeslog format = %t %a %m %f %b
syslog facility = local3
timeout = 300[ftpfile]
path = /server/ftpfile
list=yes
ignore errors = true
auth users = root
#auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个用户以 “,” 号隔开,比如auth users = moTzxx,root
comment = This is moTzxx-comment#提交信息,便于识别
exclude = file3/
#此处表明,同步文件 除去所有的 file3 目录,如果以斜杠开头,则可指定“path = /server/ftpfile”下的任何目录或文件,例如“/file1/file5/re.log”,指的是文件“/server/ftpfile/file1/file5/re.log”
(3). 设定密码文件
  • 密码文件格式很简单,rsyncd.secrets 的内容格式为:user:password
  • 例如,我使用的是 root 账户,密码为 root123,则进行下面的命令:
vim /etc/rsyncd/rsyncd.secrets

添加信息:root:root123

  • 修改属主和修改权限 (若已经是了,就无需修改了)
chown root.root /etc/rsyncd/rsyncd.secrets  
chmod 600 /etc/rsyncd/rsyncd.secrets    
(4). 设定 rsyncd.motd 文件
  • 它是定义 rysnc 服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等,其实影响并不大,只是为了便于说明
vim /etc/rsyncd/rsyncd.motd

自定义添加如下:

++++++++++++++++++++++++++++++++++++++++++Welcome to moTzxx`s world!
++++++++++++++++++++++++++++++++++++++++++

(2). rsync 服务器启动

  • 在此,只介绍 让 rsync 以服务器模式运行的 daemon参数方式,详情见附录, 此时为服务端操作(IP:192.168.1.160)

如下依然为【root】 权限下操作

①. 以 root 身份启动 rsync

/usr/bin/rsync --daemon 
/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf  #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写

②. 查看相应进程

lsof -i :873

image

【注:】修改rsync配置后服务器端需要重启killall rsyncrsync --daemon lsof -i :873

③. rsync 服务器和防火墙

】如果第二步能获得 873 进程信息,这一步没必要进行操作,本人在开启测试前,就关闭了防火墙

  • Linux 防火墙是用 iptables,所以我们至少在服务器端要让你所定义的 rsync 服务器端口通过,客户端上也应该让通过。
iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
iptables -L  #查看一下防火墙是不是打开了 873端口
  • 如果你不太懂防火墙的配置,可以先用service iptables stop 将防火墙关掉。当然在生产环境这是很危险的,可千万不要这么做!

(3). 客户端:

①. 安装 rsync:

yum install rsync 

②. 配置密码文件 rsyncd.secrets

【注意】:服务器端的密码应该以 user:password 的形式存放明文密码,而客户端的密码只需要以 password 的明文形式保存
 【执行命令】(举例密码为 root123):

echo root123> rsyncd.secrets
chmod 600 rsyncd.secrets

③. 主要命令

1). 列出 rsync 服务器上的所提供的同步内容
  • 第一种( 需要密码):
rsync  --list-only  192.168.1.160::ftpfile 
  • 第二种:
rsync  --list-only  --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile

2). 文件同步命令
  • 第一种( 需要密码):
rsync  -avzP  192.168.1.160::ftpfile /server/ftpfile
  • 第二种:
rsync  -avzP  --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile

3). 客户端上的数据要与服务器端完全一致
  • 第一种( 需要密码):
rsync  -avzP --delete  192.168.1.160::ftpfile /server/ftpfile
  • 第二种:
rsync  -avzP --delete  --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile

表示客户端上的数据要与服务器端完全一致,如果 ftpfile 目录中有服务器上不存在的文件,则删除。
最终目的是让 ftpfile 目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除

④. 定时更新 实现方法:

(1). 一种方法:直接在 /etc/crontab 中添加命令
  • 找到 crontab 文件所在位置,根据定时任务配置规范添加信息,以本人为例,在目录/etc/crontab
vi /etc/crontab

或者通过 crontab 进行设定 ,执行命令:crontab -e

  • 在后面添加命令(举例,每分钟执行一次文件同步,作为测试)
*/1 * * * *  rsync  -avzP --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile
(2). 第二种方法:脚本实现
  • 写脚本(名字自定义,相当于一个存放定时任务命令的文件而已)
vim /server/ftp-update-ftpfile.sh #自定义即可
  • 添加代码
#!/bin/bash
rsync  -avzP --password-file=/server/rsyncd.secrets  192.168.1.160::ftpfile /server/ftpfile
  • 通过 crontab 设定,让这个脚本每 1 分钟(测试)运行一次。执行命令:
crontab -e
  • 输入以下一行:
*/1 * * * * /server/ftp-update-ftpfile.sh
(3). 上述方法配置好后,要重启 crond 服务器
  • 执行如下的命令
killall crond    #注:杀死crond 服务器的进程;
ps aux |grep crond # 注:查看一下是否被杀死;
/usr/sbin/crond    #注:启动 crond 服务器;
(4). 注意/提醒
  • 1 个人发现:
> - 使用非脚本命令执行的可行性高,期间测试了好多次,当然也有可能是自己的配置存在问题
> - 使用脚本命令,相对而言要方便些,更改脚本文件信息后,不需要每次重启 crond ,当然希望能正确配置,那就再好不过了
> - 个人测试而言,脚本命令对于 CentOS6.5 可行,而对于 CentOS7 却不执行
  • 2 建议参考文章
  • CentOS 6.4 中的 cron 计划任务配置方法
  • CentOS 设置定时任务执行指定脚本的方法

附录:

(1). 说明

  • 对于 “rsyncd.conf 服务器的配置详解 ”以及 “rsync 服务器的启动方式”,可参考文章 —— rsync 实现文件备份同步

(2). 参考文章

  • 使用 rsync 实现客户端与服务器端的文件同步与传送
  • rsync 常见错误及解决方法
  • 汇总 rsync 使用中错误信息

这篇关于CentOS下(rsync+crontab)触发式实现服务器间的文件备份同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039832

相关文章

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用