我在工作中需要把生产环境的用户访问日志存储到数据处理服务器,并备份起来。一开始的做法是由人工来均衡数据处理服务器的空间使用,但是随着服务器数据量的增加,人工的管理将变得很困难,一方面是存在单点故障的问题,如果一台数据处理服务器挂了,上面的数据可能会丢失;另一方面,为了均衡各服务器间的空间使用,需要把日志从一台服务器传输到另外一台。显然人工的方式已经无法满足数据增长的要求了,需要引入自动化的服务器文件管理系统。
MooseFS是一种分布式文件系统,结构包括以下四种角色:
1 管理服务器managing server (master)
2 元数据日志服务器Metalogger server(Metalogger)
3 数据存储服务器data servers (chunkservers)
4 客户机挂载使用client computers
各种角色的作用如下:
1 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
2 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
3 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
4 客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.
工作原理如下图所示:
简单的说,就是找一台服务器作为moosefs的master,其他的服务器都挂到这个master上面,由master统一进行数据存储的管理和读写的调度。使用起来就像在本地操作一个超大的硬盘。
这样处理之后,传到一台服务器的日志文件将会被打散到各个服务器上,从而实现了服务器空间使用的均衡;其次,moosefs可以灵活的调整数据的备份个数,备份的数据将会被随机的保存到其他机器,比如做两个备份时,数据将会被拷贝到两台不同的服务器,从而保证了在一台机器挂掉的情况下,数据依旧安全。
虽然使用moosefs可以解决服务器空间使用均衡和数据备份安全的问题,但是由于是通过一台中心机进行调度的,所以当这台中心机挂掉的话,服务器上的数据将难以辨认和查找。其次,当moosefs上某台机器的硬盘损坏了,将导致整个moosefs的日志传输速度变得很慢,而且有可能会导致正在读取该盘数据的程序僵死。
1、master机要有主备。这样可以在其中一台master坏的情况下及时切换和调度数据的备份
2、需要做好对服务器硬盘的监控。当出现某个硬盘损坏时,要及时将该硬盘踢掉。