HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

如何将主机文件自动同步至对象存储

  • 2019-10-16
  • 本文字数:3351 字

    阅读完需:约 11 分钟

如何将主机文件自动同步至对象存储

今天我们来利用 s3fs 工具将京东云对象存储挂载到京东云云主机,把对象存储 Bucket(空间)当成一个文件夹挂载到 Linux 系统内部,当成一个系统文件夹来使用,之后我们会利用 inotify+rsync 工具来实现主机文件自动同步到对象存储的挂载目录,以此来实现主机文件自动同步至京东云对象存储。


演示示意图:


一、挂载对象存储到云主机

“本文档用的是 CentOS 7,CentOS 6 挂载方式在本步骤结尾”



1. 创建 CentOS 7.4 云主机

首先我们需要打开京东云官网,点击右上角控制台登陆后开始创建一台京东云云主机,方法详见链接


云主机创建完成后如下:


2. 安装依赖包

yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel -y
复制代码

3. 安装 s3fs

yum install epel-release s3fs-fuse -y
复制代码

4. 创建密码文件

echo Access_Key_ID:Access_Key_Secret > ~/.passwd-s3fschmod 600 ~/.passwd-s3fs
复制代码



Access_Key_ID:Access_Key_Secret 获取方式:https://uc.jdcloud.com/account/accessKey

chmod 600:设置密钥文件只能被当前用户访问。

5. 创建对象存储空间

我本次的对象存储空间名称为:jdcloud-oss,位于和云主机一样的地域:华北-北京


6. 挂载对象存储到本地目录/jdcloud

mkdir /jdclouds3fs bucketname /jdcloud -o passwd_file=~/.passwd-s3fs -o url="https://s3-internal.cn-north-1.
复制代码



mkdir:创建 jdcloud 文件夹作为本地挂载目录

s3fs:手动挂载命令,其中 bucketname 为 bucket 名称、/jdcloud 是本地挂载路径、passwd_file 为密码文件位置、url 为京东云对象存储 Bucket 页面的 Endpoint 地域节点(Endpoint 地址分为外网和内网地址,若使用京东云云主机与对象存储在同一个地域,请填写内网地址,其他情况请填写外网地址,不要忘记前面的https://

7. 查看挂载结果

df -Th
复制代码


8. CentOS 6 操作参考

yum install automake gcc-c++ git libcurl-devel libxml2-devel make openssl-develwget https://github.com/libfuse/libfuse/releases/download/fuse_2_9_4/fuse-2.9.2.tar.gztar -zxvf fuse-2.9.2.tar.gzcd fuse-2.9.2./configure --prefix=/usrmakemake installexport PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/ldconfig
复制代码



二、创建云主机本地模拟数据

创建一个文件夹/data,模拟本地文件数据存放路径,通过 dd 命令在在此文件夹里生成文件


这个命令会在创建的文件夹里生成 5 个大小为 1GB 的小文件。


[root@s3fs-test ~]# mkdir /data;cd /data[root@s3fs-test data]# for ((i=1;i<=5;i++));do dd if=/dev/zero of=block_$i.file bs=1M count=1024;done
复制代码


文件生成结果:




三、安装 rsync 同步工具

1. 安装及配置

安装运行:


yum -y install rsync#启动rsync服务systemctl start rsyncd.servicesystemctl enable rsyncd.service#检查是否已经成功启动netstat -lnp|grep 873
复制代码



好了,好了。安装成功。


加入开机自动启动:


echo "/usr/bin/rsync --daemon" >> /etc/rc.local
复制代码

2.测试

好了,现在我们开始同步(将主机/data 目录文件同步至京东云对象存储挂载目录/jdcloud):


rsync -vucrt /data/*** **/jdcloud/
复制代码


-v, --verbose 详细模式输出

-u, --update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

-c, --checksum 打开校验开关,强制对文件传输进行校验

-r, --recursive 对子目录以递归模式处理


注意:以下参数不要用,对象存储不支持,否则会报错


-o, --owner 保持文件属主信息

-p, --perms 保持文件权限

-g, --group 保持文件属组信息

-t, --times 保持文件时间信息



同步结果



到京东云对象存储查看结果



现在我们在源目录/data 中复制新的模拟数据,然后再次执行同步任务,看是否能够增量同步


cp block_1.file block_6.file.newcp block_1.file block_7.file.new
复制代码



新的模拟数据建立完成后,我们再次执行同步任务


rsync -vucrt /data/*** **/jdcloud/
复制代码



从上图中我们可以看到,由于第一次我们已经将 block_1 到 block_5 同步完成,所以本次任务只将新增的 2 个文件(block_6.file.new 和 block_7.file.new)进行了同步,我们现在登陆到京东云对象存储控制台看下同步结果




四、安装 Inotify 文件监控工具

同步完成,接下来我们需要将同步机制变的更智能化一点,因为实际生产活动中,我们不可能一直手动来执行同步任务,即便我们设置计划任务,只要两次计划任务之间有时间间隔,就很容易出现数据丢失的情况,接下来我们将操作如何在本地数据只要发生变化就触发 rsync 来同步数据。


我们将用到的工具是 Inotify,Inotify 是一个 Linux 特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

1.安装及配置

首先我们来检查系统是否支持 Inotify


ll /proc/sys/fs/inotify/
复制代码



开始安装 Inotify-tools 工具(如果 yum 安装不了,请安装 EPEL 源后重试)


yum install inotify-tools -y
复制代码



监控脚本


本次监控我们只监控文件更改和文件新增,由于对象存储无法同步权限变化,所以我们不对权限和时间做同步。


vim /root/inotify.sh#!/bin/bashsrc=/data/       # 需要同步的源路径cd ${src}                            #此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听./才能rsync同步后目录结构一致/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,close_write,move ./ | while read file#把监控到有发生更改的"文件路径列表"循环do        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE        echo "-------------------------------$(date)------------------------------------"        echo $file        #增加、修改、写入、移动事件放在同一个判断,因为他们都肯定是针对文件的操作        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型        then                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'                rsync -vucrt $(dirname ${INO_FILE})/* /jdcloud/ &#INO_FILE变量代表路径哦  -c校验文件内容#上面的rsync同步命令中源是用了`$(dirname ${INO_FILE})`变量,即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡)        fidone
复制代码


Inotifywait 参数说明:


-m,-monitor:始终保持事件监听状态

-r,-recursive:递归查询目录

-q,-quiet:只打印监控事件的信息

–format:指定时间输出格式

-e,-event:后面指定删、增、改等事件

-z,–compress 对备份的文件在传输时进行压缩处理


Inotifywait events 事件说明:


modify:修改文件或目录内容

create:在监视目录下创建文件或目录

close_write:修改真实文件内容

move:移动文件或目录移动到监视目录

2.测试

赋予脚本执行权限,并让脚本在后台运行


chmod +x inotify.shsh /root/inotify.sh &
复制代码


我们在源目录/data 创建虚拟数据(文件)


touch /data/{1..6}.txt
复制代码



在/jdcloud 查看结果(同步会有延迟,若看不到效果,稍等下即可)



我们在源目录/data 创建虚拟数据(目录/文件夹)


mkdir -p /data/dirtest/test/1.txt
复制代码



在/jdcloud 查看结果(同步会有延迟,若看不到效果,稍等下即可)



最后我们更改下 1.txt 中的内容,看是否只同步 1.txt


echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" >> 1.txt
复制代码



在/jdcloud 查看结果(同步会有延迟,若看不到效果,稍等下即可)



我们到京东云对象存储控制台查看同步结果



至此,利用 Inotify+Rsync 自动同步主机文件到京东云对象存储实操完成。



五、注意

由于 Inotify 只在启动后会监控目录,在 Inotify 启动前和启动期间的文件发生更改,它是不知道的,所以容易出现漏文件的可能,为防止各种意外遗漏,保证目录一致,有两种方案:

1.设置定时全量备份;

crontab -e* */2 * * * rsync -vrlgoD /data/*  /jdcloud**
复制代码

2.设置定时增量

crontab -e* */2 * * * rsync -vucrt /data/*  /jdcloud
复制代码


2019-10-16 23:021386

评论

发布
暂无评论
发现更多内容

web前端培训Node.js 如何连接到 PostgreSQL 数据库

@零度

node.js 前端开发

《运营之光3.0》全新上市——跨越时代,自我颠覆的诚意之作!

博文视点Broadview

易观分析《2022年中国银行业隐私计算平台供应商实力矩阵分析》研究报告正式启动

易观分析

银行技术

物联网低代码平台常用《组件介绍》

AIRIOT

低代码 物联网 低代码开发平台 低代码平台 低代码,项目开发

2022 开源软件安全状况报告:超41%的企业对开源安全没有足够的信心

SEAL安全

DevSecOps 开源安全 软件供应链 安全左移

太阳能无线LED显示屏的特点

Dylan

LED LED显示屏

一套十万级TPS的IM综合消息系统的架构实践与思考

JackJiang

网络编程 架构设计 即时通讯 im开发

通过大数据培训学习后到35岁后为什么会失业

@零度

小白创业做电商,选对商城系统很重要!

CRMEB

LSF 集群全面监控!浅析 HPC 基于龙蜥操作系统的迁移替代解决方案

OpenAnolis小助手

开源 解决方案 龙蜥操作系统 常青藤开源科技 HPCinsights

VPS是干嘛用的?有哪些知名牌子?与云服务器有什么区别?

行云管家

运维 等保备案 VPS

直播带货平台包含了直播和娱乐模块,你知道是什么吗?

开源直播系统源码

软件开发 直播带货系统

TiDB v6.0.0 (DMR) :缓存表初试丨TiDB Book Rush

PingCAP

TiDB

layui-vue简单体验

Python研究所

6月月更

中国内地仅四家突围 联想智慧颐和园荣获 “2022年IDC亚太区智慧城市大奖”

科技大数据

等保备案主体是谁?在当地网安进行备案是吗?

行云管家

等保 等级保护 等保备案

使用 ABAP 操作 Excel 的几种方法

汪子熙

microsoft Excel Office SAP 6月月更

行业分析| 快对讲,楼宇对讲

anyRTC开发者

音视频 快对讲 语音对讲 视频对讲 楼宇对讲

百问百答第44期:应用性能探针监测原理-Python探针

博睿数据

APM AIOPS 智能运维 博睿数据 性能监测

Java培训 动态代理的底层原理

@零度

JAVA开发 动态代理

Flink流处理API大合集:掌握所有flink流处理技术,看这一篇就够了

百思不得小赵

大数据 6月月更 flink api

叮!Techo Day 腾讯技术开放日如约而至!

CODING DevOps

CODING DevOps Cloud Studio Techo 腾讯技术开放日

百度APP 基于Pipeline as Code的持续集成实践

百度Geek说

Java’

setInterval、setTimeout和requestAnimationFrame

源字节1号

软件开发

人人都可以参与开源!龙蜥社区最不容错过的开发者活动来了

OpenAnolis小助手

开源 龙蜥社区 礼品 开发者激励 贡献

如何使用 DataAnt 监控 Apache APISIX

API7.ai 技术团队

后端 监控 APISIX 网关 DataAnt

智联招聘基于 Nebula Graph 的推荐实践分享

NebulaGraph

知识图谱 Nebula Graph

2022中国信通院首届业务与应用安全发展论坛成功召开!

中国IDC圈

如临现场的视觉感染力,NBA决赛直播还能这样看?

阿里云视频云

音视频 直播 音视频直播 直播解决方案

《数字经济全景白皮书》消费金融数字化篇 重磅发布

易观分析

消费金融

当量子计算遇上人工智能

启科量子开发者官方号

人工智能 算力 量子计算

如何将主机文件自动同步至对象存储_服务革新_韩超超_InfoQ精选文章