ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CubeFS 集群模式部署全攻略:从源码构建到六类服务节点的高可用集群搭建

CubeFS 集群模式部署全攻略:从源码构建到六类服务节点的高可用集群搭建 存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载本文以 CubeFS 官方集群部署文档为主线完整讲解如何通过make build编译出cfs-server/cfs-client并依次部署 Master、MetaNode、DataNode、ObjectNode、LcNode、FlashNode 六个服务组件含可选的纠删码子系统最终组合出一套可用于生产的高可用分布式存储集群。读完本文你将掌握每个节点的 JSON 配置逐字段含义、端口规划、磁盘准备流程以及集群搭建中最常见的三类故障内存不足、端口占用、FUSE 挂载失败的定位与解决手段。一、部署前准备编译构建与依赖环境1.1 获取源码并编译CubeFS 使用 Makefile 组织构建一条命令即可同时编译服务端、客户端及相关依赖$ git clone https://gitcode.com/gh_mirrors/cu/cubefs $ cd cubefs $ make build从仓库根目录的 Makefile 可以看到build目标实际串联了server、authtool、client、cli、libsdk、fsck、fdstore、bcache、blobstore、deploy等多个子目标。构建成功后在build/bin目录下会生成核心可执行文件cfs-server统一的服务端入口通过-c参数加载不同角色的 JSON 配置文件即可启动 Master、MetaNode、DataNode、ObjectNode、LcNode、FlashNode 等任意角色cfs-clientFUSE 客户端用于将卷挂载到本地目录此外还会生成cfs-cli命令行管理工具以及 blobstore 子系统的系列二进制。1.2 依赖环境清单部署前建议先核对以下依赖详见 部署依赖说明依赖版本要求是否必需gcc-c4.8.5 及以上是CMake3.1 及以上是bzip2-devel1.0.6 及以上是zlib-devel1.2.7 及以上是mvn3.8.4 及以上是Go1.17 及以上是kafka1.x 及以上仅部署纠删码子系统时需要consul1.1x 及以上仅部署纠删码子系统时需要1.3 理解 cfs-server 的启动机制cfs-server的行为由 cmd/cmd.go 定义它通过flag解析-c配置文件路径、-f前台运行、-v打印版本、-redirect-std是否将标准输出重定向到日志文件等参数随后读取配置文件根据其中的role字段做模块分发master→master.NewServer()metanode→metanode.NewServer()datanode→datanode.NewServer()objectnode→objectnode.NewServer()lcnode→lcnode.NewServer()flashnode→flashnode.NewFlashNode()也就是说所有服务节点共用一个二进制靠配置文件里的role区分身份这极大简化了部署物管理。默认情况下进程会以守护进程方式运行先 fork 出子进程再以-f重新执行日志级别支持debug / info / warn / error / critical默认error。二、整体架构与端口规划集群模式下各角色通过 Master 的 Raft 组互相发现并协同。官方建议 Master、MetaNode、DataNode 均至少部署 3 个实例以保证高可用。为便于后续配置先给出各角色的默认端口规划角色业务监听 (listen)pprof 调试 (prof)Raft 心跳端口Raft 数据端口master17010170205901默认可配5902默认可配metanode17210172201723017240datanode17310173201733017340objectnode17410———lcnode17510———flashnode1851018511——三、安装 MasterMaster 是集群的元数据中心与调度核心负责卷管理、数据分片DataPartition/MetaPartition分配、节点心跳与故障检测。启动方式./cfs-server -c master.json官方推荐至少启动 3 个 Master 实例组成 Raft 组。示例master.json{ role: master, ip: 127.0.0.1, // 替换为宿主机 IP listen: 17010, prof:17020, id:1, // 替换为对应的节点 ID1/2/3 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 }peers是 Raft 组成员信息格式为id:ip:port多个成员用逗号分隔三台机器的id应分别为 1、2、3且listen端口保持一致。storeDir目录必须预先存在否则服务无法启动。3.1 Master 配置参数全表以下是 Master 详细配置 中列出的完整参数均为 JSON 字符串/布尔格式配置项类型说明必填默认值rolestring进程角色只能是 master是ipstring主机 IP 地址是listenstringHTTP 服务监听端口是profstringGolang pprof 端口是idstring区分不同的 Master 节点是peersstringRaft 复制组成员信息是logDirstring日志存放目录是logLevelstring日志级别否errorretainLogsstring保留多少条 Raft 日志是walDirstringRaft WAL 日志目录是storeDirstringRocksDB 数据目录目录必须存在否则无法启动是clusterNamestring集群名称是ebsAddrstring纠删码子系统地址使用纠删码卷时必须配置否exporterPortintPrometheus 采集监控数据的端口否consulAddrstringConsul 注册地址供 Prometheus exporter 使用否metaNodeReservedMemstring元数据节点保留内存大小字节否1073741824heartbeatPortstringRaft 心跳通信端口否5901replicaPortstringRaft 数据传输端口否5902nodeSetCapstringNodeSet 容量否18missingDataPartitionIntervalstring超过该时间未收到心跳则副本视为丢失秒否24hdataPartitionTimeOutSecstring超过该时间未收到心跳则副本视为不存活秒否10minnumberOfDataPartitionsToLoadstring单次检查的最大数据分片数量否40secondsToFreeDataPartitionAfterLoadstring加载完成后多少秒开始释放数据分片任务占用的内存否300tickIntervalstring心跳与选举超时检查的定时器间隔毫秒否500electionTickstring选举超时前定时器重置次数否5bindIpbool是否只监听宿主机 IP否falsefaultDomainbool是否启用故障域否falsefaultDomainBuildAsPossiblebool可用故障域少于预期时是否仍尽量构建 nodeSetGroup否falsefaultDomainGrpBatchCntstring可用故障域数量否3dpNoLeaderReportIntervalSecstring数据分片无 Leader 时的上报间隔秒否60mpNoLeaderReportIntervalSecstring元数据分片无 Leader 时的上报间隔秒否60maxQuotaNumPerVolstring每个卷的最大配额数量否100volForceDeletionbool非空卷是否可直接删除否truevolDeletionDentryThresholdint非空卷不可直接删除时dentry 数小于等于该阈值才可删除否0enableLogPanicHookbool实验性在执行 panic 前挂钩刷新日志否falseenableDirectDeleteVolbool控制是否支持延迟删卷true 时直接删除否trueraftPartitionCanUseDifferentPortbool数据/元数据分片是否可使用不同的 raft 心跳与复制端口用于单机多节点部署否falseallowMultipleReplicasOnSameMachinebool数据/元数据分片副本是否可位于同一台机器否true其中metaNodeReservedMem默认 1G是一个跨节点约束项MetaNode 的totalMem必须大于该值部署 MetaNode 时需留意。四、安装 MetaNodeMetaNode 负责文件系统元数据的存储与管理inode、dentry、扩展属性等启动方式./cfs-server -c metanode.json官方推荐至少启动 3 个 MetaNode 实例以保证元数据高可用。示例metanode.json{ 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, // 最大可用内存必须大于 Master 的 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 ] }4.1 MetaNode 配置参数全表配置项类型说明必填rolestring进程角色metanode是listenstring监听并接受请求的端口是profstring调试与管理员 API 接口端口是logLevelstring日志级别默认 error否metadataDirstring元数据快照存储目录是logDirstring日志存储目录是raftDirstringRaft WAL 日志存储目录是raftHeartbeatPortstringRaft 心跳通信端口是raftReplicaPortstringRaft 数据传输端口是consulAddrstringPrometheus 注册接口否exporterPortstringPrometheus 采集监控数据的端口否masterAddrstring sliceMaster 服务地址列表是totalMemstring最大可用内存字节必须大于 Master 配置中的 metaNodeReservedMem是memRatiostring最大可用内存占宿主机总内存的比例配置后计算值会覆盖 totalMem否localIPstring本机 IP不指定时使用与 Master 通信的 IP否bindIpbool是否只监听 localIP默认 false否zoneNamestring指定可用区默认分配到 default 区否deleteBatchCountint64单次批量删除的 inode 数量默认 500否tickIntervalfloat64Raft 心跳与选举超时检查间隔毫秒默认 300否raftRecvBufSizeintRaft 接收缓冲区大小字节默认 2048否nameResolveIntervalintRaft 节点地址解析间隔分钟取值 [1-60]默认 1否4.2 MetaNode 的重要约束详见 MetaNode 详细配置 的注意事项listen、raftHeartbeatPort、raftReplicaPort三个端口在程序首次配置启动后不可修改相关配置信息记录在metadataDir目录下的constcfg文件中如需强制修改必须手动删除该文件这三个端口与 MetaNode 在 Master 中的注册信息相关一旦修改Master 将无法再定位到修改前的 MetaNode 信息。五、安装 DataNodeDataNode 负责数据分片的实际存储与副本复制。官方建议使用独立磁盘作为数据目录并配置多块磁盘以获得更高性能。5.1 磁盘准备查看机器磁盘信息选择 CubeFS 要使用的磁盘fdisk -l格式化磁盘建议格式化为 XFSmkfs.xfs -f /dev/sdx创建挂载目录mkdir /data0挂载磁盘mount /dev/sdx /data05.2 启动 DataNode./cfs-server -c datanode.json官方推荐至少启动 3 个 DataNode 实例。示例datanode.json{ 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, mediaType: 1, // datanode 磁盘类型1 表示 SSD2 表示 HDD masterAddr: [ 127.0.0.1:17010, 127.0.0.2:17010, 127.0.0.3:17010 ], disks: [ /data0:10737418240, // 磁盘挂载路径:保留空间字节 /data1:10737418240 ] }disks数组的每个元素格式为磁盘挂载路径:保留空间即除保留空间外的其余容量都交给 CubeFS 使用。5.3 DataNode 配置参数全表配置项类型说明必填rolestring角色必须配置为 datanode是listenstringDataNode 作为服务端启动 TCP 监听的端口是localIPstringDataNode 作为服务端使用的 IP否profstringDataNode 提供 HTTP 接口的端口是logDirstring调试日志存放路径是logLevelstring日志级别默认 error否raftHeartbeatstringRaft 节点间心跳端口是raftReplicastringRaft 日志传输端口是raftDirstringRaft 调试日志存放路径默认在二进制启动路径下否consulAddrstring监控系统地址否exporterPortstring监控系统端口否masterAddrstring slice集群管理器Master地址是zoneNamestring指定可用区默认 default 区否diskReadIoccint每块磁盘读并发 IO 频率限制小于等于 0 不限制否diskReadFlowint每块磁盘读 IO 流量限制小于等于 0 不限制否diskWriteIoccint每块磁盘写并发 IO 频率限制小于等于 0 不限制否diskWriteFlowint每块磁盘写 IO 流量限制小于等于 0 不限制否disksstring slice格式磁盘挂载路径:保留空间保留空间配置范围为 [20G,50G]是diskCurrentLoadDpLimitint单盘当前加载的数据分片最大数量否diskCurrentStopDpLimitint单盘当前停止的数据分片最大数量否enableLogPanicHookbool实验性panic 前刷新日志否diskAsyncQosEnablebool异步 IO 限制开关否diskAsyncReadFlow / diskAsyncReadIoccint每块磁盘异步读流量 / 并发频率限制≤0 不限制否diskAsyncWriteFlow / diskAsyncWriteIoccint每块磁盘异步写流量 / 并发频率限制≤0 不限制否diskDeleteIocc / diskDeleteIopsint每块磁盘删除操作并发频率 / IOPS 限制否5.4 DataNode 的重要约束与 MetaNode 类似见 DataNode 详细配置listen、raftHeartbeat、raftReplica首次启动后不可修改相关配置记录在raftDir目录下的constcfg文件中强制修改需手动删除该文件。六、安装 Object Gateway可选ObjectNode 是 S3 兼容的对象存储网关。仅当需要使用对象存储服务时才需要部署。./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 详细配置参数类型说明必填rolestring进程角色必须为 objectnode是listenstringHTTP 服务监听端口格式PORT默认 80是domainsstring slice配置 S3 兼容接口的域名用于支持 DNS 风格访问资源格式DOMAIN否logDirstring日志存放路径是logLevelstring日志级别默认 error否masterAddrstring slice格式HOST:PORT即 Master 地址列表是exporterPortstringPrometheus 采集监控数据的端口否profstring调试与管理员 API 接口是七、安装 Lcnode可选LcNode 负责数据迁移与生命周期管理例如将冷数据按策略迁移到低频/归档存储。仅当需要使用数据迁移能力时才需要部署。./cfs-server -c lifecycle.json示例lifecycle.json{ role: lcnode, listen: 17510, masterAddr: [ 127.0.0.1:17010, 127.0.0.2:17010, 127.0.0.3:17010 ], logLevel: info, logDir: /cfs/Logs/lcnode }配置参数说明详见 LcNode 详细配置参数类型说明必填默认值rolestring进程角色必须为 lcnode是listenstringHTTP 服务监听端口格式PORT是80logDirstring日志存放路径是logLevelstring日志级别否errormasterAddrstring sliceMaster 地址列表HOST:PORT是profstring调试与管理员 API 接口否lcScanRoutineNumPerTaskint文件迁移并发数否20lcScanLimitPerSecondint文件迁移 QPS 限制否0不限制delayDelMinuteint文件迁移后源数据的保留时长分钟否1440useCreateTimebool是否使用文件创建时间判定过期默认使用文件访问时间否false八、安装 FlashNode可选FlashNode 是缓存加速节点为文件读提供集群级加速。如果文件读取不需要缓存或集群加速可省略该组件。./cfs-server -c flashnode.json示例flashnode.json{ role: flashnode, listen: 18510, prof: 18511, logDir: ./logs, masterAddr: [ 127.0.0.1:17010, 127.0.0.2:17010, 127.0.0.3:17010 ], readRps: 100000, disableTmpfs: true, diskDataPath: [ /path/data1:0 ], zoneName:default }配置参数说明详见 FlashNode 详细配置配置项类型说明必填默认值rolestring进程角色只能是 flashnode是listenstringTCP 服务监听端口是profstringGolang pprof 端口否logDirstring日志存放目录是logLevelstring日志级别否errormasterAddrstring sliceMaster 服务地址是disableTmpfsbool使用磁盘代替 tmpfs 挂载默认 false 表示默认启用 tmpfs否falsememTotalint内存模式下用于缓存数据的内存大小是cachePercentfloat内存模式下指定用于缓存的系统内存百分比磁盘模式下指定磁盘空间百分比否1.0readRpsintFlashNode 的 RPS 值用于限流是diskDataPathstring slice磁盘模式下磁盘路径及该磁盘分配的缓存容量是zoneNamestring按可用区组织管理 FlashNodeCLI 支持按区删除节点是lruCapacityintLRU 缓存可容纳的最大条目key数否400000九、安装纠删码子系统可选仅当需要使用纠删码Erasure Coding卷时才需要部署。CubeFS 的纠删码子系统即 Blobstore由 access、clustermgr、proxy、scheduler、blobnode 等模块组成模块之间存在依赖关系需要按序部署。完整部署流程请参阅 使用纠删码存储系统注意部署纠删码子系统前需提前准备好 kafka 与 consul 依赖。十、常见问题排查FAQ10.1 内存不足bad totalMem config启动 MetaNode 时可能出现如下错误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原因与解决totalMem配置不合理。官方建议将metanode.json中的totalMem调整为物理机内存的 80% 左右且必须大于 Master 配置中的metaNodeReservedMem。10.2 端口被占用err(readFromProcess: sub-process: [cmd.go 311] cannot listen pprof 17320 err listen tcp :17320: bind: address already in use解决杀掉占用该端口的进程通常是之前启动失败的残留节点再重新启动服务。由于listen、raftHeartbeat、raftReplica等端口首次启动后不可随意修改务必保证端口规划稳定。10.3 FUSE 客户端挂载失败挂载时出现# Mount failed 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 客户端问题排查 逐项定位常见原因还包括挂载目录不存在、挂载点非空、挂载点处于 Transport endpoint is not connected 残留状态、配置文件中 Master 地址或卷名不正确等。十一、部署后的下一步创建卷并挂载验证集群各节点启动成功后即可用cfs-cli创建卷、用cfs-client挂载验证。完整验证步骤见 快速验证核心流程如下准备~/.cfs-cli.json包含masterAddr与timeout执行./build/bin/cfs-cli volume create ltptest ltptest创建卷编写客户端配置见 客户端配置其中volName与owner必须与创建卷时一致执行./build/bin/cfs-client -c client.conf启动客户端用df -h检查挂载点是否出现类似cubefs-ltptest ... /home/cfs/client/mnt的记录出现即表示挂载成功。至此一套由 Master MetaNode DataNode 组成、可按需扩展 ObjectNode / LcNode / FlashNode / 纠删码子系统的 CubeFS 集群模式部署即告完成。赞分享存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载相关推荐从单节点到高可用Langflow集群部署全攻略从单节点到高可用Langflow集群部署全攻略 你是否遇到过Langflow单节点部署在高并发下崩溃是否担心服务中断影响业务运行本文将带你通过Docker人工智能大模型AI AgentRAG后端前端MCP 服务工作流自动化CubeFS 集群模式部署完全指南从编译构建到各角色节点上线CubeFS 集群模式部署完全指南从编译构建到各角色节点上线 本篇指南以 CubeFS 官方文档《集群模式》为核心脉络完整讲解多节点生产集群的部署流程从存储分布式文件系统对象存储云原生CVAT 计算机视觉标注工具3 步部署你的第一个图像、视频与 3D 标注平台CVAT 计算机视觉标注工具3 步部署你的第一个图像、视频与 3D 标注平台 CVATComputer Vision Annotation Tool是一个数据标注计算机视觉数据集AI 应用后端前端上一篇G-Helper终极指南华硕笔记本性能优化神器一键告别臃肿控制中心下一篇Flet 动画类型全解Animation、AnimationCurve 与 AnimationStyle 配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表