海量小文件同步

简介:

集中式存储是目前中小企业广泛采用的方案,随着时间的流逝,这些存储不可避免的膨胀。集中式存储的弊端愈加显现,同步就是其中一个。


环境:

文件容量以TB计,里面是千万/亿级的小文件,分布在成千上万的子文件夹内。


分析

rsync几乎是唯一选择,海量小文件同步面临的问题主要是rsync无止境的扫描,同步进度难以把控,巨大的临时目录等。所以解决办法只能是庖丁解牛,将一个大任务分解成N个小任务。


场景假设如下:


1、源服务器目录结构是按照年月日分布,示例如下

1
/www/images/ 2014 / 04 / 30 /xxx.png


2、目标rsync服务器为 192.168.1.2::www,且可写。


解决办法:

很明显,同步最底层的目录最快。


1
2
3
4
5
6
find  /www/images  \
     -mindepth 3 \
     -maxdepth 3 \
     - type  d \
     - exec  rsync  -aquR  {}/ 192.168.1.2::www /images/  \; \
     - exec  echo  /www/images/ {}  done  \;


注:-R 可解决远程rsync服务器的目录结构问题。


另一种方法是for循环,比较好理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env bash
 
dir = "www/images"
 
for  year  in   2014 2015 ; do
         for  month  in  ` seq  1 12`; do
                 for  day  in  ` seq  1 31`; do
                         if  [  -d /$ dir /$year/$month/$day ]; then
                                 rsync  -aqu /$ dir /$year/$month/$day/  192.168.1.2::$ dir /$year/$month/$day/
                         else
                                 echo  "directory /$dir/$year/$month/$day not exist."
                         fi
                 done
         done
done


集中式存储的缺点是: 必须提前做容量规划,存储严格控制在设计容量内之内,如果要扩展,必须重新进行容量规划。


要根本解决这个问题,终极的办法似乎只有分布式文件系统,用全新的设计理念的来解决存储问题,按需扩展。


可惜的是,目前的分布式文件系统几乎都是为大文件而设计,对于海量小文件支持都不够。ceph足够优秀,但是还不完全成熟。










本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1404981,如需转载请自行联系原作者

目录
相关文章
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
257784 0
|
Linux 数据安全/隐私保护 Windows
更换(Pypi)pip源到国内镜像
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.
247253 2
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
1分钟认识:人工智能claude AI _详解CLAUDE在国内怎么使用
Claude AI 是 Anthropic 开发的先进对话式 AI 模型,以信息论之父克劳德·香农命名,体现了其在信息处理和生成方面的卓越能力
|
存储 监控 网络安全
rsync 远程同步 基础介绍
rsync 远程同步 基础介绍
|
缓存 网络协议 NoSQL
基于UDP的可靠性传输协议-KCP简介
基于UDP的可靠性传输协议-KCP简介
516 0
|
Shell 网络安全 数据安全/隐私保护
MacOS Sonoma14.2.1系统SSH免密登录
【7月更文挑战第9天】在MacOS Sonoma 14.2.1中设置SSH免密登录,包括:1) 使用`ssh-keygen`生成RSA密钥对;2) 使用`ssh-copy-id`将公钥传到远程主机;3) 用`ssh-add --apple-use-keychain`添加私钥到ssh-agent,并为重启后自动添加配置自动化脚本;4) 可选地,编辑`~/.ssh/config`设置别名简化登录。确保远程主机的`.ssh/authorized_keys`文件权限为600。
486 4
|
数据安全/隐私保护 Linux 网络安全
|
XML JSON Java
Java POI Word07版插入图片并指定浮动位置
由于工作需要,又接触到了POI操作Word,以往只是简单的读取操作,这次是写入操作;
1556 1
Java POI  Word07版插入图片并指定浮动位置
|
开发框架 前端开发 Java
SpringBoot简介&IDEA在线创建一个SpringBoot项目
SpringBoot 项目创建有三种方式,分别是在线创建、使用Spring initializr快速创建、和改造Maven工程创建,本期讲的就是如何在线创建一个SpringBoot项目。首先我们要下载好IntelliJ IDEA以及jdk1.8版本。springboot 是 spring 快速开发脚手架,通过约定大于配置的方式,快速构建和启动 spring 项目. springboot根据我们项目中所引入的依赖,比如引入了springmvc构件,就会判断出是要进行springmvc的web开发,就会把spr
850 1