|
那么我们就可以执行如下命令进行备份(注意替换自己的server即master地址和weed执行文件的位置)
8 W$ V+ u9 u: D1 y( t- j4 J/application/seaweedfs/weed backup -server=127.0.0.1:9333 -dir /datahub/test -volumeId=1
5 J2 N# S) y; s c5 ~$ m8 t# J- v6 W/application/seaweedfs/weed backup -server=127.0.0.1:9333 -dir /datahub/test -volumeId=2
- P; V& X# H8 c5 M... ...# Q0 B( s4 Q& T+ [, P$ @4 x- z4 Z
/application/seaweedfs/weed backup -server=127.0.0.1:9333 -dir /datahub/test -volumeId=199/ `. p& p6 F7 z1 ~) t3 V) F M
/application/seaweedfs/weed backup -server=127.0.0.1:9333 -dir /datahub/test -volumeId=200 但是我不可能写200行命令,所以可以参考下面我编写的shell命令,来执行备份(注意替换自己的server即master地址和weed执行文件的位置)9 u M- J4 D6 h! X) S6 }2 Q4 j
#!/bin/bash
8 A( o, \( @, n2 J- k/ \for i in $(seq 1 200)& u$ Z1 ]( D# a) H/ g5 m7 k5 q
do
8 |2 q& w! e, T! L5 h: p2 |4 Y& \ /application/seaweedfs/weed backup -server=127.0.0.1:9333 -dir /datahub/test -volumeId=$i) o. h) w: H, r9 O* l/ T, U
done 我们可以看下备份完成之后的备份文件大小【193G】 如果filer使用了store,那么还需要备份下数据库,数据库的备份根据各种数据库类型备份不同,这里就不赘述了。 Async Backup 方式详情可以通过 官方wiki的解决来看下,下面我就我的理解与操作进行演示说明 这里使用的是weed filer.backup的方式进行备份的,这个命令在2.30版本之后才开始有的。 可以通过help查看一下帮助文档 首先我们要通过scaffold获取标准的replication.toml weed scaffold -config=replication
( {9 e* \" I* L5 Y现在次备份支持两种模式,一种是与filer同目录的,增量备份,一种是修改的单独文件夹。看下官方的说明。 我这里使用的增量模式,也就是第一种,所以配置is_incremental为true,部分有效代码如下 [source.filer]2 F2 m: k \% B, J' H
enabled = true
" L8 B' f+ z% Z$ @* A3 W' ]5 AgrpcAddress = "localhost:18888"
7 `6 K8 c" U* S; R1 B/ }; n0 }7 ~# all files under this directory tree are replicated. { I7 V* q3 h0 q" P
# this is not a directory on your hard drive, but on your filer.
# ~: o5 n3 Z+ J& ?1 k# i.e., all files with this "prefix" are sent to notification message queue.
+ ]+ {6 I1 L- X% h9 z/ u$ edirectory = "/buckets"
% \. E4 I7 s! _" C5 f[sink.local]6 s: x# U1 V3 p: T1 E8 ?4 q2 D
enabled = true; ^: q) y3 }* \: x" S% r- L! b
directory = "/backup/cdn_backup"2 V! v: q g7 H9 I& r' |
# all replicated files are under modified time as yyyy-mm-dd directories) \4 p4 m5 l- n% H- N/ L, H
# so each date directory contains all new and updated files.
1 i0 Z2 M6 K9 y: e2 jis_incremental = true
9 ], W- Q; P: ?' I( f$ L- }配置文件中的source.filer中虽然已经配置了directory,但也可以在执行命令的时候进行配置,如下所示 PS:这里我执行是在与replication.toml同文件夹下进行执行的,你可以可以根据seaweedfs的官方说明,放到指定的位置./replication.toml、$HOME/.seaweedfs/replication.toml、/etc/seaweedfs/replication.toml。
9 D9 v9 R7 v8 ?, L2 b./weed filer.backup --filerPath /buckets/img1 此命令是连续的,也就是实时监控变化,如果你不自动终止,他会一直运行(可以做成service) 此备份方法是备份的源文件,所以不需要备份数据库。 我们看下备份之后的文件夹大下【44G】 两种差异分析Data backup的方式比Async backup的方式数据差额很大,当前我的测试数据相差【149G】,对于我来说这些空间已经很奢侈了。 但是我们可以增加一个参数查看下占用的空间 可以看到有好多是31G的,但是我们实际的使用并没有达到这个值,原因是因为在启动master的时候,我们默认了volumePreallocate,这个参数会预分配空间,所以致使如此的结果。 那如果我把Data Backup的备份文件使用ZIP普通压缩下(大文件的压缩,数据量小,层级少,一般情况下压缩比较快),可以看到文件的大小是【13G】,这比源文件备份是要小很多的。(当然源文件备份对于删除的在备份的文件下是不会删除的,但是我当前的测试是没有删除的文件的) 那既然这样,我们再把Aysnc backup的结果再压缩下(小文件的压缩,数据量大,层级多,一般情况下压缩比较慢),保证其对比基础是一样的。 从下图可以看到,经过漫长的压缩之后,体积依旧还是【44G】 归纳总结从上面分析可以看出,第一种方式的压缩之后的占用还是比较小的,而且压缩速度也非常的快,在这之前也可以使用master的volumePreallocate配置不预留空间,这样备份的文件也是小的,压缩之后的文件也是小的。 这种方式需要备份数据库,并且如果要还原的话,需要有相同的环境,包括weed的运行环境以及相关的配置文件及配置文件依赖的各种key。 第二种方法是把所有的文件都存储到本地,即使后续没有weed的环境,也可以查询到相关的文件,但是因为文件的数量比较多,所以备份的速度非常慢,后续越多越慢。 但是第二种可以用增量的方式进行备份,即第一次的时候比较慢,但后续可以通过只备份压缩增量的减少压缩的时间。 |