• 【beegfs相关】beegfs集群部署


    一、前言

    1、概述

    参考资料:
    beegfs源码地址
    beegfs官方文档
    beegfs FAQ

    BeeGFS是行业领先的并行集群文件系统,设计时优先考虑性能强大的同时,安装和管理非常方便,是I/O密集型工作负载的优质存储开源解决方案,软件整体架构如下图所示:

    组件名称 组件包名称 说明
    管理服务 beegfs-mgmtd 管理服务用于监控所有已注册服务的状态,不存储用户任何数据
    注:在进行元数据服务、存储服务、客户端服务配置时,都需要指向管理服务节点IP地址,
    一般集群部署需要第一个部署的服务,有且只有一个
    元数据服务 beegfs-meta 元数据服务用于存储文件的元数据信息,如目录结构、权限信息、数据分片存放位置等,
    一个文件对应一个元数据文件,客户端打开文件时,由元数据服务向客户端提供数据具体存放节点位置,
    之后客户端直接与存储服务进行数据读写操作,可支持横向扩展,增加多个元数据服务用以提升文件系统性能
    存储服务 beegfs-storage 存储服务用于存储条带化后的数据块文件
    客户端服务 beegfs-client
    beegfs-helperd
    客户端服务用于集群存储空间挂载,当服务开启时自动挂载到本地路径,
    之后可通过nfs/samba服务将本地挂载点导出,提供linux/windows客户端访问
    注:挂载路径通过/etc/beegfs/beegfs-mounts.conf 配置文件指定
    beegfs-helperd主要用于日志写入,不需要任何额外配置
    命令行组件 beegfs-utils
    beegfs-common
    提供命令行工具,如beegfs-ctl、beegfs-df、beegfs-fsck等
    • 配置文件路径:/etc/beegfs/{package-name}.conf
    • 日志文件路径:/var/log/{package-name}.log
    • 服务控制控制管理:systemctl status/start/stop/restart {package-name}
    • 应用程序文件路径:/opt/beegfs/sbin/

    注:{package-name}为对应组件包名称,如beegfs-mgmtd等

    二、安装部署

    节点名 节点IP 节点角色 软件版本
    node190 172.16.21.190 mgmtd、meta、storage、client 系统版本:CentOS 7.6
    软件版本:BeeGFS 7.2.4
    node191 172.16.21.191 meta、storage、client 系统版本:CentOS 7.6
    软件版本:BeeGFS 7.2.4

    1、配置集群ssh免密登录

    • 配置集群节点主机名和IP映射关系,同步到所有集群节点上
    [root@node190 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    172.16.21.190    node190
    172.16.21.191    node191
    [root@node190 ~]# scp /etc/hosts 172.16.21.191:/etc/
    • 配置机器A到机器B ssh免密登录

    机器A执行ssh-keygen :在本地~/.ssh目录下生成公钥文件id_rsa.pub 和私钥文件id_rsa
    机器A执行ssh-copy-id {target-hostname} :将机器A公钥文件id_rsa.pub 信息追加到机器B~/.ssh/authorized_keys 文件,实现机器A到机器B ssh免密登录

    配置node190->node191 ssh免密登录
    [root@node190 ~]# ssh-keygen 
    [root@node190 ~]# ssh-copy-id node191
    
    
    配置node190<-node191 ssh免密登录
    [root@node191 ~]# ssh-keygen 
    [root@node191 ~]# ssh-copy-id node190

    2、软件安装

    查看beegfs最新稳定版本源:https://www.beegfs.io/release/beegfs_7.2.4/dists/beegfs-rhel7.repo

    示例如下:
    yum install wget -y
    yum install ca-certificates -y
    wget -O /etc/yum.repos.d/beegfs-rhel7.repo https://www.beegfs.io/release/latest-stable/dists/beegfs-rhel7.repo
    yum install beegfs-mgmtd -y
    yum install beegfs-meta -y
    yum install beegfs-storage -y 
    yum install beegfs-helperd beegfs-client beegfs-utils -y

    3、集群部署

    3.1、部署管理服务

    1)、部署服务:

    /opt/beegfs/sbin/beegfs-setup-mgmtd -p {mgmtd_path}

    • -p:mgmtd_path 为管理服务数据存放目录

    注:执行此命令后,会在mgmtd_path下生成format.conf 文件,更新/etc/beegfs/beegfs-mgmtd.conf 配置文件(storeMgmtdDirectorystoreAllowFirstRunInit 参数)

    2)、启动服务:

    systemctl restart beegfs-mgmtd

    示例如下:
    mkdir -p /data/mgmtd
    /opt/beegfs/sbin/beegfs-setup-mgmtd -p /data/mgmtd/
    systemctl restart beegfs-mgmtd

    3.2、部署元数据服务

    1)、部署服务:

    /opt/beegfs/sbin/beegfs-setup-meta -p {meta_path} -s {meta_id} -m {mgmtd_host}

    • -p:meta_path 为元数据服务数据存放目录
    • -s:meta_id 为元数据服务ID,同一集群元数据服务id值不能重复
    • -m:mgmtd_host 为管理服务节点主机名或者IP地址,此处任选其一均可

    注:执行此命令后,会在meta_path 下生成format.confnodeNumID 文件,更新/etc/beegfs/beegfs-meta.conf 配置文件(sysMgmtdHoststoreMetaDirectorystoreAllowFirstRunInitstoreFsUUID 参数)

    2)、启动服务:

    systemctl restart beegfs-meta

    示例如下:
    --node190节点使用/dev/sdb1存放元数据,分配元数据服务ID为190,指定管理服务节点主机名为node190--
    mkdir /data/meta -p
    mount /dev/sdb1 /data/meta/
    /opt/beegfs/sbin/beegfs-setup-meta -p /data/meta/ -s 190 -m node190
    systemctl restart beegfs-meta
    
    --node191节点使用/dev/sdb1存放元数据,分配元数据服务ID为191,指定管理服务节点主机名为node190--
    mkdir /data/meta -p
    mount /dev/sdb1 /data/meta/
    /opt/beegfs/sbin/beegfs-setup-meta -p /data/meta/ -s 191 -m node190
    systemctl restart beegfs-meta

    3.3、部署存储服务

    1)、部署服务:

    /opt/beegfs/sbin/beegfs-setup-storage -p {storage_path} -s {storage_host_id} -i {storage_id} -m {mgmtd_host}

    • -p:storage_path 为存储服务数据存放目录
    • -s:storage_host_id 为存储服务节点id,同一节点上的存储服务id一致,一般以ip地址命名
    • -i:storage_id 为存储服务id,同一集群存储服务id值不能重复
    • -m:mgmtd_host 为管理服务节点主机名或者IP地址,此处任选其一均可

    注:执行此命令后,会在storage_path 下生成format.confnodeNumIDtargetNumID 文件,更新/etc/beegfs/beegfs-client.conf 配置文件(sysMgmtdHoststoreStorageDirectorystoreAllowFirstRunInitstoreFsUUID 参数)

    • 启动服务
      systemctl restart beegfs-storage
    示例如下:
    --node190节点使用/dev/sdc1和/dev/sdd1存放数据,指定存储服务节点ID为190,存储服务ID为1901和1902,管理服务节点主机名为node190--
    mkdir /data/storage0{1..2} -p
    mount /dev/sdc1 /data/storage01/
    mount /dev/sdd1 /data/storage02/
    /opt/beegfs/sbin/beegfs-setup-storage -p /data/storage01 -s 190 -i 1901 -m node190
    /opt/beegfs/sbin/beegfs-setup-storage -p /data/storage02 -s 190 -i 1902 -m node190
    systemctl restart beegfs-storage
    
    --node191节点使用/dev/sdc1和/dev/sdd1存放数据,指定存储服务节点ID为191,存储服务ID为1911和1912,管理服务节点主机名为node190--
    mkdir /data/storage0{1..2} -p
    mount /dev/sdc1 /data/storage01/
    mount /dev/sdd1 /data/storage02/
    /opt/beegfs/sbin/beegfs-setup-storage -p /data/storage01 -s 191 -i 1911 -m node190
    /opt/beegfs/sbin/beegfs-setup-storage -p /data/storage02 -s 191 -i 1912 -m node190
    systemctl restart beegfs-storage

    3.4、部署客户端服务

    1)、部署服务:

    /opt/beegfs/sbin/beegfs-setup-client -m {mgmtd_host}

    • -m:mgmtd_host 为管理服务节点主机名或者IP地址,此处任选其一均可

    注:执行此命令后,会更新/etc/beegfs/beegfs-client.conf 配置文件(sysMgmtdHost 参数)
    客户端默认将集群目录挂载到/mnt/beegfs ,如需修改挂载点,修改/etc/beegfs/beegfs-mounts.conf 配置文件即可

    2)、启动服务:

    systemctl restart beegfs-helperd; systemctl restart beegfs-client

    示例如下:
    /opt/beegfs/sbin/beegfs-setup-client -m node190
    systemctl restart beegfs-helperd; systemctl restart beegfs-client

    4、配置镜像组

    参考wiki:BuddyGroups
    参考aws:如何在 AWS 上构建并行文件系统 BeeGFS – 高可用篇

    4.1、概述

    4.1.1、BuddyGroups说明

    beegfs通过BuddyGroups实现数据和元数据冗余,通常一个Buddy Group为一组两个目标,组内两个目标彼此进行数据复制,当一个目标出现故障时仍可以访问所有的数据,可以将Buddy Group两个目标存放于不同灾备区域(如不同机房、机架、节点),实现机房、机架、节点级别故障冗余。

    Buddy Group两个目标有主辅之分,一个目标为主存储(primary),一个目标为辅存储(secondary),进行数据读写时,读写操作先发送到主存储,之后主存储同步写入到辅存储,当两个副本读写操作完成后,返回前端应用操作完成。

    4.1.2、BuddyGroups故障切换

    当Buddy Group主目标无法访问时,等待短暂时间后仍无法恢复,则会被标记为脱机状态,此时辅目标将会成为新的主目标接管服务
    可通过beegfs-ctl --listtargets --nodetype={node_type} --state查询目标状态,相关状态描述如下:

    [root@node190 ~]# beegfs-ctl --listtargets --nodetype=meta --state
    TargetID     Reachability  Consistency   NodeID
    ========     ============  ===========   ======
           1           Online         Good        1
           2           Online         Good        2
    
    [root@node190 ~]# beegfs-ctl --listtargets --nodetype=storage --state
    TargetID     Reachability  Consistency   NodeID
    ========     ============  ===========   ======
           1           Online         Good      190
           3           Online         Good      191
    • Reachability(可达性)
      用于描述系统是否可以访问到目标,当管理服务监控到Buddy Group中的主目标无法访问,会自动进行故障转移,由辅目标提供读写操作

      • Online:可以访问此目标
      • Probably-offline:检测到此目标通信失败,有可能是服务重启或者短期网络故障造成,此状态下,关于该目标可能出现故障的信息将会广播到所有节点,以便系统做好故障转移准备
      • Offline:无法达到此目标,如果此目标为某一Buddy Group组的主目标,将会在目标转换为脱机状态时立即发起故障转移,由同组Buddy Group辅目标接管读写操作
    • Consistency(一致性)
      用于描述数据一致性状态

      • Good:目标数据被认为是好的
      • Needs-resync:目标数据被认为是不同步的,尝试重新同步中
      • Bad:目标数据被认为是不同步的,尝试重新同步失败

    4.2、配置说明

    • 自动创建镜像组:beegfs-ctl --addmirrorgroup --automatic --nodetype={node_type}
      注:如需手动指定Buddy Group目标分布,确保同一Buddy Group组两个目标落在不同故障域上,可使用beegfs-ctl --addmirrorgroup --nodetype={node_type} --primary={target_id} --secondary={target_id} --groupid={group_id}
    示例如下,自动创建元数据、数据镜像组:
    [root@node190 ~]# beegfs-ctl --addmirrorgroup --automatic --nodetype=meta
    
    New mirror groups:
    BuddyGroupID   Node type Node
    ============   ========= ====
               1     primary        1 @ beegfs-meta node190 [ID: 1]
                   secondary        2 @ beegfs-meta node191 [ID: 2]
    
    Mirror buddy group successfully set: groupID 1 -> target IDs 1, 2
    
    [root@node190 ~]# beegfs-ctl --addmirrorgroup --automatic --nodetype=storage
    
    New mirror groups:
    BuddyGroupID Target type Target
    ============ =========== ======
               1     primary        1 @ beegfs-storage node190 [ID: 190]
                   secondary        3 @ beegfs-storage node191 [ID: 191]
    
    Mirror buddy group successfully set: groupID 1 -> target IDs 1, 3
    • 激活元数据镜像:beegfs-ctl --mirrormd
      注:执行此操作前,需要停止所有客户端挂载操作systemctl stop beegfs-client
      执行此操作后,需要重启元数据服务systemctl restart beegfs-meta,重新挂载客户端systemctl restart beegfs-client
    示例如下:
    [root@node190 ~]# beegfs-ctl --mirrormd
    Operation succeeded.
    
    NOTE:
     To complete activating metadata mirroring, please remount any clients and
     restart all metadata services now.
    • 设置条带模式:beegfs-ctl --setpattern --pattern={pattern_type} --chunksize={chunk_size} --numtargets={target_num} {mount_path}
      • {pattern_type}:设置使用的条带模式,可选raid0(默认值)或buddymirror
      • {chunk_size}:每个存储目标条带大小,默认为512K
      • {target_num}:每个文件条带目标数,当设置为buddymirror模式时,参数值为buddy group组数

    三、Q&A

    1、常用操作

    1.1、集群使用多元数据部署

    在实践操作中,往往我们需要通过部署多元数据来提升集群性能,示例为单节点起3个元数据服务(meta1、meta2、meta3),参考步骤如下:

    1)、创建元数据配置文件,指定服务日志路径及服务监听端口

    默认情况下,元数据日志路径为/var/log/beegfs-meta.log,服务监听端口为8005,由于需要起多个元数据服务,故针对不同元数据服务指定不同的日志路径和服务监听端口

    • 创建3个目录用于存放3个元数据服务配置文件,将默认配置文件/etc/beegfs/beegfs-meta.conf拷贝到对应目录下
    mkdir /etc/beegfs/meta{1..3}.d/
    cp /etc/beegfs/beegfs-meta.conf /etc/beegfs/meta1.d/
    cp /etc/beegfs/beegfs-meta.conf /etc/beegfs/meta2.d/
    cp /etc/beegfs/beegfs-meta.conf /etc/beegfs/meta3.d/
    • 修改元数据服务配置文件,指定日志路径和监听端口
      指定元数据服务meta1日志路径为/var/log/beegfs-meta1.log,服务监听端口为8005
      指定元数据服务meta2日志路径为/var/log/beegfs-meta2.log,服务监听端口为8007
      指定元数据服务meta3日志路径为/var/log/beegfs-meta3.log,服务监听端口为8009
    sed -i 's#logStdFile                   = /var/log/beegfs-meta.log#logStdFile                   = /var/log/beegfs-meta1.log#'  /etc/beegfs/meta1.d/beegfs-meta.conf
    sed -i 's#logStdFile                   = /var/log/beegfs-meta.log#logStdFile                   = /var/log/beegfs-meta2.log#'  /etc/beegfs/meta2.d/beegfs-meta.conf
    sed -i 's#connMetaPortTCP              = 8005#connMetaPortTCP              = 8007#'  /etc/beegfs/meta2.d/beegfs-meta.conf
    sed -i 's#connMetaPortUDP              = 8005#connMetaPortUDP              = 8007#'  /etc/beegfs/meta2.d/beegfs-meta.conf
    sed -i 's#logStdFile                   = /var/log/beegfs-meta.log#logStdFile                   = /var/log/beegfs-meta3.log#'  /etc/beegfs/meta3.d/beegfs-meta.conf
    sed -i 's#connMetaPortTCP              = 8005#connMetaPortTCP              = 8009#'  /etc/beegfs/meta3.d/beegfs-meta.conf
    sed -i 's#connMetaPortUDP              = 8005#connMetaPortUDP              = 8009#'  /etc/beegfs/meta3.d/beegfs-meta.conf
    • 部署元数据服务:/opt/beegfs/sbin/beegfs-setup-meta -c {meta_config} -p {meta_path} -s {meta_id} -m {mgmtd_host}
      • -c:meta_config为元数据服务配置文件路径
      • -p:meta_path 为元数据服务数据存放目录
      • -s:meta_id 为元数据服务ID,同一集群元数据服务id值不能重复
      • -m:mgmtd_host 为管理服务节点主机名或者IP地址,此处任选其一均可
    /opt/beegfs/sbin/beegfs-setup-meta -c /etc/beegfs/meta1.d/beegfs-meta.conf  -p /data/meta1 -s 1 -m node190
    /opt/beegfs/sbin/beegfs-setup-meta -c /etc/beegfs/meta2.d/beegfs-meta.conf  -p /data/meta2 -s 2 -m node190
    /opt/beegfs/sbin/beegfs-setup-meta -c /etc/beegfs/meta3.d/beegfs-meta.conf  -p /data/meta3 -s 3 -m node190
    • 启动元数据服务
    systemctl restart beegfs-meta@meta1
    systemctl restart beegfs-meta@meta2
    systemctl restart beegfs-meta@meta3

    1.2、指定beegfs集群通讯使用网卡

    参考官方文档:Network Configuration

    1)、操作步骤
    • 添加需要使用的网卡名称到配置文件/etc/beegfs/tcp-only-interfaces.conf
      如使用网卡bond0作为beegfs集群通讯使用网卡,echo bond0 > /etc/beegfs/tcp-only-interfaces.conf
    • 添加connInterfacesFile = /etc/beegfs/tcp-only-interfaces.conf配置到所有beegfs服务配置中
    sed -i 's#connInterfacesFile                     =#connInterfacesFile                     = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/beegfs-mgmtd.conf
    systemctl restart beegfs-mgmtd
    
    sed -i 's#connInterfacesFile           =#connInterfacesFile           = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/meta1.d/beegfs-meta.conf
    sed -i 's#connInterfacesFile           =#connInterfacesFile           = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/meta2.d/beegfs-meta.conf
    sed -i 's#connInterfacesFile           =#connInterfacesFile           = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/meta3.d/beegfs-meta.conf
    systemctl restart beegfs-meta@meta1
    systemctl restart beegfs-meta@meta2
    systemctl restart beegfs-meta@meta3
    
    sed -i 's#connInterfacesFile           =#connInterfacesFile           = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/beegfs-storage.conf
    systemctl restart beegfs-storage
    
    sed -i 's#connInterfacesFile            =#connInterfacesFile            = /etc/beegfs/tcp-only-interfaces.conf#' /etc/beegfs/beegfs-client.conf
    systemctl restart beegfs-client
    2)、验证测试
    • 执行beegfs-check-servers命令,查看beegfs集群角色通讯使用IP地址跟指定网卡是否匹配
    [root@node57 ~]# beegfs-check-servers 
    Management
    ==========
    node57 [ID: 1]: reachable at 172.16.33.101:8008 (protocol: TCP)
    
    Metadata
    ==========
    571 [ID: 1]: reachable at 172.16.33.101:8005 (protocol: TCP)
    572 [ID: 2]: reachable at 172.16.33.101:8009 (protocol: TCP)
    573 [ID: 3]: reachable at 172.16.33.101:8007 (protocol: TCP)
    
    Storage
    ==========
    node57 [ID: 57]: reachable at 172.16.33.101:8003 (protocol: TCP)

    2、常用命令

    • 查看集群服务连接情况:beegfs-net
    • 查看集群服务详细信息:beegfs-ctl --listnodes --nodetype={node_type} --details
      注:{node_type}为beegfs集群节点类型,可选mgmtmetastorageclient
    • 查看集群服务状态:beegfs-ctl --listtargets --nodetype={node_type} --state
      注:{node_type}为beegfs集群节点类型,可选metastorage
    • 查看集群存储池状态:beegfs-df
    • 删除集群角色:beegfs-ctl --removenode --nodetype={node_type} {node_id}
      注:{node_id}可通过beegfs-net查看ID值
      删除集群角色不会自动迁移对应数据到其他节点,需谨慎使用!!如需迁移数据后删除,参考官方手册:FAQ#migrate
    • 查看集群目录属性信息:beegfs-ctl --getentryinfo {mount_path}
      注:{mount-path}为beegfs集群挂载路径,当前有RAID0Buddy Mirror两种模式
  • 相关阅读:
    无题
    静心
    随笔
    skynet1.0阅读笔记2_skynet的消息投递skynet.call
    skynet1.0阅读笔记_skynet的启动
    Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
    MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
    MySql: ”Commands out of sync“Error (Connect/C++)
    Connector/c++ 查询Mysql,出现 can't fetch because not on result set 错误
    mysql 修改密码
  • 原文地址:https://www.cnblogs.com/luxf0/p/15798677.html
Copyright © 2020-2023  润新知