|
| 1 | +# MooseFS |
| 2 | + |
| 3 | +## MooseFS 架构 |
| 4 | + |
| 5 | +MooseFS 主要分为4种服务器,分别提供不同的服务。对应的关系如下: |
| 6 | + |
| 7 | +- Managing server (master server) |
| 8 | +是一个单独的服务器,用来管理整个文件系统。它存储了文件系统中每个文件的元数据(包括文件的大小,属性以及文件存储的位置等)。 |
| 9 | + |
| 10 | +- Data servers (chunk server) |
| 11 | +由若干台机器组成的数据服务器,用来实际存储文件的数据。它们之间还可以互相同步数据(这是因为每个文件在文件系统中可能拥有多个 copy,copy 的数量可以自行配置,见下文)。 |
| 12 | + |
| 13 | +- Metadata backup server(s) (metalogger server) |
| 14 | +由一台及以上机器组成,用来存储元数据的 `change logs`,并且周期性地从 Managing server 中下载最新的 `main metadata file`。当 Managing server 挂掉的时候,系统会从 `Metadata backup Servers` 中选择一台作为 `Managing server` 使用。 |
| 15 | + |
| 16 | +- Clients |
| 17 | +使用 `MooseFS` 的客户机。通过 `mfsmount` 进程和 `Managing server` 进行通信执行各种文件操作。 |
| 18 | + |
| 19 | +## MooseFS 内部操作流程 |
| 20 | + |
| 21 | +`Metadata` 被存储在 `Managing server` 中的内存中,周期性地写回磁盘(并且更新日志)。同时这些内容会被同步到 metaloggers 中。每个文件被分割为若干个 `fragments(chunks)`,每个 `chunk` 是一个单独的文件,存储在 `data server` 上,单个大小最大为64MB。 通过为每个文件设置 “goal” 值来保证该文件的 copy 数量,以此保证文件系统的可靠性。 |
| 22 | + |
| 23 | +`Clients` 上的 mfsmount 进程在以下情况会直接和 managing server 通信: |
| 24 | +1. 新建/删除文件 |
| 25 | +2. 读取目录内容 |
| 26 | +3. 读取/修改属性(个人理解为修改文件系统属性) |
| 27 | +4. 改变文件大小 |
| 28 | +5. 读取/写入文件开始时 |
| 29 | +6. 修改任何一个特殊文件的 METADATA 时 mfsmount 会直接 data server 通信。 |
| 30 | + |
| 31 | +当写入一个文件结束时,mfsmount 会通知 managing server 来修改该文件的元数据。同时,多个 `data server` 之间也会相互通信,来保证相同文件在不同机器上的同步。 |
| 32 | + |
| 33 | +这里使用 MooseFS 官网的两张图片说明执行文件操作时的内部执行流程: |
| 34 | + |
| 35 | + |
| 36 | + |
| 37 | + |
| 38 | + |
| 39 | +## 安装与配置 |
| 40 | + |
| 41 | +Ubuntu: |
| 42 | +```shell |
| 43 | +# wget -O - http://ppa.moosefs.com/moosefs.key | apt-key add - |
| 44 | +wget http://ppa.moosefs.com/stable/apt/moosefs.key |
| 45 | +sudo apt-key add moosefs.key |
| 46 | +# echo "deb http://ppa.moosefs.com/moosefs-3/apt/ubuntu/trusty trusty main" > /etc/apt/sources.list.d/moosefs.list |
| 47 | +echo "deb http://ppa.moosefs.com/stable/apt/ubuntu/trusty trusty main" > /etc/apt/sources.list.d/moosefs.list |
| 48 | +apt-get update |
| 49 | +``` |
| 50 | + |
| 51 | +For Master Servers: |
| 52 | +```shell |
| 53 | +# apt-get install moosefs-master |
| 54 | +# apt-get install moosefs-cli |
| 55 | +sudo apt-get install moosefs-ce-master |
| 56 | +``` |
| 57 | +配置: |
| 58 | +```shell |
| 59 | +cd /etc/mfs |
| 60 | +cp mfsmaster.cfg.dist mfsmaster.cfg |
| 61 | +cp mfsexports.cfg.dist mfsexports.cfg |
| 62 | +``` |
| 63 | + |
| 64 | +修改`mfsexports.cfg`中第一行,该行表示访问权限,在最后添加`,password=pwdtext`,为文件系统添加密码。 |
| 65 | +修改`/etc/default/moosefs-ce-master`中的`MFSMASTER_ENABLE`为`true`,使得该服务开机启动。 |
| 66 | +通过service命令控制该服务的开启等操作: |
| 67 | +```shell |
| 68 | +sudo service moosefs-ce-master start |
| 69 | +``` |
| 70 | + |
| 71 | +For Chunkservers: |
| 72 | +```shell |
| 73 | +# apt-get install moosefs-chunkserver |
| 74 | +sudo apt-get install moosefs-ce-chunkserver |
| 75 | +``` |
| 76 | +配置如同上一步: |
| 77 | +```shell |
| 78 | +cd /etc/mfs |
| 79 | +cp mfschunkserver.cfg.dist mfschunkserver.cfg |
| 80 | +cp mfshdd.cfg.dist mfshdd.cfg |
| 81 | +``` |
| 82 | +在`mfshdd.cfg`中添加: |
| 83 | +```text |
| 84 | +/mnt/mfschunk1 |
| 85 | +/mnt/mfschunk2 |
| 86 | +``` |
| 87 | +然后手动创建上面的两个目录,然后修改用户 mfs 的权限,使其能够写入该分区: |
| 88 | +```shell |
| 89 | +chown -R mfs:mfs /mnt/mfschunks1 |
| 90 | +chown -R mfs:mfs /mnt/mfschunks2 |
| 91 | +``` |
| 92 | +最后修改 |
| 93 | + |
| 94 | +`/etc/default/moosefs-ce-chunkserver`中的`MFSCHUNKSERVER_ENBLE`为`true`保证开机启动,并通过service来控制当前运行情况: |
| 95 | +```shell |
| 96 | +sudo service moosefs-ce-chunkserver start |
| 97 | +``` |
| 98 | + |
| 99 | +For Metaloggers: |
| 100 | +```shell |
| 101 | +apt-get install moosefs-metalogger |
| 102 | +``` |
| 103 | + |
| 104 | +For Clients: |
| 105 | +```shell |
| 106 | +apt-get install moosefs-client |
| 107 | +``` |
| 108 | +挂载: |
| 109 | +```shell |
| 110 | +mkdir -p /mnt/mfs |
| 111 | +mfsmount /mnt/mfs -p -H mfsmaster-server |
| 112 | +``` |
| 113 | + |
| 114 | +安装 MooseFS Client 之后,可以在 `/etc/fstab` 增加条目实现自动加载`MooseFS`: |
| 115 | +```text |
| 116 | +mfsmount /mnt/mfs fuse defaults 0 0 |
| 117 | +``` |
| 118 | + |
| 119 | +## 错误恢复 |
| 120 | + |
| 121 | +启动 `master server` 的时候提示找不到 `metadata.mfs` 文件,启动失败。这是因为非法关机导致主元数据文件(main metadata file)不完整,需要将元数据变更日志整合进该文件中。只需执行以下命令: |
| 122 | + |
| 123 | +```shell |
| 124 | +mfsmaster -a |
| 125 | +``` |
| 126 | +然后重启服务即可。 |
0 commit comments