【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

  • 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:021274

评论

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

[高并发]高并发分布式锁架构大解密,不是所有的锁都是分布式锁!!

for

Flink + Iceberg 全场景实时数仓的建设实践

Apache Flink

flink

「产品经理训练营」第三章作业

Sòrγy_じò ぴé

产品经理训练营 极客大学产品经理训练营 产品训练营

个人信息严控的时代,AI如何实现“安全”的智能营销?

星环科技

大数据

try-catch-finally中的4个大坑,不小心就栽进去了!

王磊

Java 异常处理 try finally

IDEA Malformed argument has embedded quote

会飞的猪

IDEA

高阶段位机房管理:3D集装箱数据中心,触发科技“火苗”的燃烧

一只数据鲸鱼

数据可视化 3D可视化 机房管理 数据中心可视化 集装箱式数据中心

不明白线程池?那看看这篇,附10道面试题

田维常

线程池

百度信息流和搜索业务中的弹性近线计算探索与应用 | 文末送福利

百度Geek说

Java 大前端 算法工程师 技术宅

Android JNI模板与读取系统属性笔记

Changing Lin

android

Spring Security 实战干货:分布式对象SharedObject

Java spring 分布式

Vue 3自定义指令开发

葡萄城技术团队

为什么这么一道iOS小题目,这么多面试者搞不定?

Geek_24a3d9

面试 技术交流 ios开发

数学,离一个程序员有多近?

小傅哥

程序员 面试

灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

York

灵雀云 Kubernetes Kube-OVN

【Android Tips】小厂的扫码还能怎么做?

李小四

机器学习 二维码 扫码 微信扫码

【CSS】波纹效果

德育处主任

CSS小技巧 28天写作 纯CSS

阿里巴巴正式推出2021年金三银四1000道Java工程师面试题手册(含答案)

Java架构追梦

Java 阿里巴巴 面试 架构师 金三银四

android开发面试准备!Android高级工程师进阶学习,已开源

欢喜学安卓

android 程序员 面试 移动开发

深扒!用6部分讲完Java性能调优:多线程+设计模式+数据库

996小迁

数据库 JVM 设计模式 多线程 性能调优

十年运维经验总结出的智能运维系统落地方案

小术晓术

人工智能 运维 企业信息化 运维自动化 信息化

即构SDK新增焦点语音功能,可实现特定用户语音的聚焦

ZEGO即构

【Mysql-InnoDB 系列】幻读、死锁与事务调度

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

Maintainer 聚光灯:KubeEdge 和 Volcano 的王泽锋

华为云原生团队

开源 边缘计算 华为云 批量计算

程序员必知的几种限流方案

Java架构师迁哥

“删库跑路”,这背后的数据安全你悟到了吗?

BinTools图尔兹

数据库 大数据 数据安全 数据库管理工具 删库

前端知识总结输出文章目录大全

梁龙先森

JavaScript 大前端 编程语言 28天写作

Elasticsearch 批量查询 mget

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

【CSS】不规则阴影

德育处主任

css3 html/css CSS小技巧 28天写作 纯CSS

安卓驱动开发!系统盘点Android开发者必须掌握的知识点,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

IntelliJ IDEA 20周岁啦,为期2天的周年庆活动对开发者免费开放

YourBatman

eclipse ide IDEA IntelliJ IDEA

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