集群模式

编译构建

使用如下命令同时构建 server,client 及相关的依赖:

$ git clone https://github.com/cubeFS/cubefs.git
$ cd cubefs
$ make build

如果构建成功,将在 build/bin 目录中生成可执行文件 cfs-servercfs-client

集群部署

启动资源管理节点

./cfs-server -c master.json

示例 master.json

推荐

为了保证服务的高可用,Master 服务最少启动3个节点实例

{
  "role": "master",
  "ip": "127.0.0.1", // 替换为主机 ip
  "listen": "17010",
  "prof":"17020",
  "id":"1", // 替换为对应 id
  "peers": "1:127.0.0.1:17010,2:127.0.0.2:17010,3:127.0.0.3:17010",
  "retainLogs":"20000",
  "logDir": "/cfs/master/log", // master 日志目录
  "logLevel":"info",
  "walDir":"/cfs/master/data/wal", // raft wal 日志目录
  "storeDir":"/cfs/master/data/store", // RocksDB 数据存储目录
  "consulAddr": "http://consul.prometheus-cfs.local",
  "clusterName":"cubefs01",
  "metaNodeReservedMem": "1073741824" // 元数据节点预留内存,1G
}

详细配置参数请参考 Master详细配置

启动元数据节点

./cfs-server -c metanode.json

示例 meta.json

推荐

为了保证服务的高可用,MetaNode 服务最少启动3个节点实例

{
    "role": "metanode",
    "listen": "17210",
    "prof": "17220",
    "logLevel": "info",
    "metadataDir": "/cfs/metanode/data/meta", // 元数据快照存储目录
    "logDir": "/cfs/metanode/log", // metanode 日志目录
    "raftDir": "/cfs/metanode/data/raft",
    "raftHeartbeatPort": "17230",
    "raftReplicaPort": "17240",
    "totalMem":  "8589934592", // 最大可用内存,需大于 metaNodeReservedMem 
    "consulAddr": "http://consul.prometheus-cfs.local",
    "exporterPort": 9501,
    "masterAddr": [
        "127.0.0.1:17010",
        "127.0.0.2:17010",
        "127.0.0.3:17010"
    ]
}

详细配置参数请参考 MetaNode详细配置

启动数据节点

推荐

使用单独磁盘作为数据目录,配置多块磁盘能够达到更高的性能。

  • 准备数据目录

    • 查看机器磁盘信息,选择给 CubeFS 使用的磁盘
    fdisk -l
    
    • 格式化磁盘,建议格式化为 XFS
    mkfs.xfs -f /dev/sdx
    
    • 创建挂载目录
    mkdir /data0
    
    • 挂载磁盘
    mount /dev/sdx /data0
    
  • 启动数据节点

./cfs-server -c datanode.json

示例 datanode.json :

推荐

为了保证服务的高可用,Datanode 服务最少启动3个节点实例

{
  "role": "datanode",
  "listen": "17310",
  "prof": "17320",
  "logDir": "/cfs/datanode/log",
  "logLevel": "info",
  "raftHeartbeat": "17330",
  "raftReplica": "17340",
  "raftDir":"/cfs/datanode/log",
  "consulAddr": "http://consul.prometheus-cfs.local",
  "exporterPort": 9502,
  "masterAddr": [
     "127.0.0.1:17010",
     "127.0.0.2:17010",
     "127.0.0.3:17010"
  ],
  "disks": [
     "/data0:10737418240", // 磁盘挂载路径:预留空间
     "/data1:10737418240"
 ]
}

详细配置参数请参考 DataNode详细配置

启动对象网关节点

提示

可选章节,如果需要使用对象存储服务,则需要部署对象网关(ObjectNode)

./cfs-server -c objectnode.json

示例 objectnode.json, 内容如下

{
    "role": "objectnode",
    "domains": [
        "object.cfs.local"
    ],
    "listen": "17410",
    "masterAddr": [
       "127.0.0.1:17010",
       "127.0.0.2:17010",
       "127.0.0.3:17010"
    ],
    "logLevel": "info",
    "logDir": "/cfs/Logs/objectnode"
}

配置文件的详细信息请参考 ObjectNode详细配置

启动纠删码子系统

提示

可选章节,如果需要使用纠删码卷则需要部署

部署参考使用纠删码存储系统

常见问题

内存空间不足

err(readFromProcess: sub-process: [cmd.go 323] Fatal: failed to start the CubeFS metanode daemon err bad totalMem config,Recommended to be configured as 80 percent of physical machine memory

解决方法:根据实际物理内存调整 metanode.json 中的 totalMem 配置

端口被占用

err(readFromProcess: sub-process: [cmd.go 311] cannot listen pprof 17320 err listen tcp :17320: bind: address already in use

解决方法:kill 占用该端口的服务,一般是之前启动失败的节点

fuse 客户端问题

# 挂载失败
err(readFromProcess: sub-process: [fuse.go 438] mount failed: fusermount: exec: "fusermount": executable file not found in $PATH)

首先检查 fuse 是否已安装

$ rpm –qa|grep fuse
$ yum install fuse

如果 fuse 已安装,请根据 fuse客户端问题 排查相应问题

在github上编辑