在家庭环境运行个人网站,实现个人移动设备备份的双机镜像(TimeMachine)、以及个人网站的备份服务器 – 通过合理组合开源技术 glusterfs nfs netatalk 以及 mysql master/slave 实时备份,实现个人数据的高可用解决方案。

硬件设备:两台 Segate GoFlex Home网络存储

GoFlex Home

最终(因为硬件原因),采用两台GoFlex Home存储运行glusterfs服务器,x86硬件的笔记本电脑作为glusterfs客户端输出NetaTalk服务给局域网内苹果系统作为备份设备。即本文的方法二。

Continue reading

glusterfs部署之后,需要根据生产环境应用的访问特性做一些调优。这时会使用 gluster volume set 指令设置卷属性,但是操作过程中,还是遇到了一些困难。

设置glusterfs的缓存

gluster volume set g_backup performance.cache-size 1GB

遇到以下报错

#gluster volume set g_backup performance.cache-size 1GB
volume set: failed: Staging failed on 192.168.1.191. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again
Staging failed on gstore-2.example.com. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again
Staging failed on gstore-11.example.com. Error: One or more connected clients cannot support the feature being set. These clients need to be upgraded or disconnected before running this command again

再检查卷信息,发现上述报错导致缓存设置没有成功

Continue reading

为了能够可靠且自动化备份数据(主要针对苹果设备),经过几天的努力,结合了多项开源技术,在家用网络环境中实现一个高可用性的分布式存储,并且能够支持苹果设备的TimeMachine备份。

费用只有苹果设备的一半,但是使用开源技术打造的分布式存储,不仅支持基于网络的TimeMachine备份,而且还实现底层数据透明镜像,自动在两台存储设备保持两个副本。这样,即使出现磁盘故障,也不会丢失备份数据。

使用到的开源技术主要有:

在内存有限的ARM环境使用glusterfs存储需要注意缓存配置 128M内存Arch Linux ARM使用glusterfs客户端

  • netatalk 和 avahi - 实现零配置(zeroconfig,由Avahi实现)的苹果文件协议(Apple Filing Protocol,由netatalk实现),使得苹果设备能够通过网络实现TimeMachine备份
Continue reading

使用两台Seagate GoFlex Home网络存储部署glusterfs分布式文件系统之后,我准备使用其中一个节点(如果支持浮动IP就更好)来挂载glusterfs卷。目的是为了实现部署跨网络镜像的TimeMachine存储

  • 在Arch Linux ARM上使用netatalk协议输出glusterfs存储卷
  • 将Apple产品(Mac/Iphone)的数据存储到glusterfs上,以便能够实现双副本备份。

配置 nas1/etc/fstab 添加内容如下

127.0.0.1:/g_backup    /g_data/g_backup  glusterfs       defaults,_netdev         0 0

然后挂载存储目录

mount /g_data/g_backup

使用的设备是Segate GoFlex Home网络存储,这个存储只有 128MB 内存,运行 glusterfs 服务器勉强可以,但是在使用glusterfs客户端挂载的时候有错误日志如下:

[2014-10-26 15:33:52.943617] E [quick-read.c:827:check_cache_size_ok] 0-g_backup-quick-read: Cache size 134217728 is greater than the max size of 124276736
[2014-10-26 15:33:52.943768] E [xlator.c:403:xlator_init] 0-g_backup-quick-read: Initialization of volume 'g_backup-quick-read' failed, review your volfile again
[2014-10-26 15:33:52.943849] E [graph.c:307:glusterfs_graph_init] 0-g_backup-quick-read: initializing translator failed
[2014-10-26 15:33:52.943921] E [graph.c:502:glusterfs_graph_activate] 0-graph: init failed
[2014-10-26 15:33:52.945593] W [glusterfsd.c:1095:cleanup_and_exit]  0-: received signum (0), shutting down
[2014-10-26 15:33:52.945712] I [fuse-bridge.c:5475:fini] 0-fuse: Unmounting '/g_data/g_backup'.
[2014-10-26 15:33:52.977175] W [glusterfsd.c:1095:cleanup_and_exit]  0-: received signum (15), shutting down
Continue reading

最初为了方便维护,选择使用replication模式组建glusterfs卷,并且选择了按照主机数量来建立副本数量。这样的简化模式有以下优点:

  • 每个glusterfs节点的文件系统都是完整的副本,包括glusterfs卷的所有文件。即使glusterfs出现异常,也可以访问底层文件系统取到所有的文件。
  • 可以部署跨机房的镜像,如果某个机房故障,也能确保另外一个机房提供完整的文件系统。

不过,上述的replication模式也有缺点:

  • 文件副本是由单独的节点提供,如果应用访问有热点(例如需要反复多次读写文件),就会导致集群中某个节点负载非常高,而集群中其他节点不能起到分担负载作用。
  • 常规的双副本或者三副本使得访问某个文件最多只能由两个或者三个节点来提供服务,大量的并发访问回存在流量瓶颈。

对于某些不需要数据高可靠性(例如数据丢失也可以重建,并且丢失数据或者暂停服务无重大影响),追求高性能的应用场景,可以选择 stripe 模式,这样可以实现将文件拆分成很多数据块分布到整个集群,提供并发读写的高性能。

使用stripe模式类似条带化,要求用于大文件高负载环境 – 因为小文件拆分会导致碎片,网络性能很差。

Continue reading

阿泰

author.bio


author.job