当前位置: 首页 > 科技观察

如何用GlusterFS搭建存储池

时间:2023-03-14 23:05:43 科技观察

【.com快速翻译】GlusterFS可以将数据存储在网络上,也可以作为云环境中的存储后端。不久前,软件定义存储还是主要存储解决方案供应商的专属领域,但今天它可以通过开源和免费软件实现。另一个好处是您可以期待在基于硬件的解决方案中找不到的附加功能。GlusterFS允许您构建一个可扩展的虚拟化存储池,该存储池由形成网络RAID的常规存储系统组成,并使用不同的方法来定义描述数据如何在每个存储系统中分布的卷。无论您选择哪种类型的卷,GlusterFS都可以使用单一存储资源构建通用存储阵列,并通过单一命名空间提供给客户(见图1)。客户还可以使用GlusterFS服务器来存储虚拟系统的后端应用程序,例如云软件。与该类型的其他解决方案相比,GlusterFS不需要专门的元数据服务器来查找存储池中的文件。相反,使用哈希算法允许任何存储节点识别存储池中的文件。与其他存储解决方案相比,这是一个很大的优势,因为元数据服务器通常是瓶颈和单点故障。图1:客户端系统通过单个命名空间访问所需的GlusterFS卷如果查看GlusterFS的内部结构,您会惊讶地发现文件系统是在用户空间实现的,访问是通过用户空间的文件系统进行的(FUSE)接口继续。这使得使用文件系统变得非常容易和非常灵活,但代价是性能下降。但是,libgfapi库可以直接访问文件系统。例如,Qemu使用它在GlusterFS上存储虚拟系统的图像,无需通过FUSE挂载绕过。如前所述,文件系统是在可以跨多个系统分布的卷上创建的。各个系统通过TCP/IP或InfiniBand远程直接内存访问(RDMA)连接。然后,通过网络文件系统(NFS)或服务器消息块(SMB)协议,可以通过本机GlusterFS客户端软件访问存储卷。除了镜像数据,GlusterFS还可以使用转换工具将数据分布到单个存储系统中。对于分布式数据和镜像数据,最小单位是文件本身;以条带化为列,文件的每一部分都分布在系统中。该系统扩展性很好,尤其是当您需要管理大文件时。这种模式下的性能几乎与系统数量成线性关系。镜像数据时,GlusterFS会创建一个文件的多个副本。也可以组合来自多种模态的数据。例如,结合分布式数据和镜像数据可以让您平衡性能和数据安全性。分布式模式类似于RAID5配置,比较新。为了容错和高可用性,您还可以通过异地复制将存储卷镜像到远程站点。如果发生灾难,服务器发生故障,分布式存储卷,很容易恢复数据。Gluster卷也可以扩展,可能是立即扩展:要做到这一点,您只需向卷中添加一个额外的砖块。在Gluster术语中,brick是存储系统的一个目录,volume就是由这些目录组成的。单个卷的块通常(但不一定)驻留在不同的系统上。要扩展受信任的存储池,您只需将额外的服务器添加到现有的综合体中。这里的示例基于Fedora22,旨在为基于Qemu/KVM和libvirt虚拟化框架的虚拟化系统提供后端存储。Glusterfs包包含在常规的Fedora软件仓库中,只要使用dnf包管理器就可以安装:dnfinstallglusterfsglusterfs-cliglusterfs-server除了安装GlusterFS社区版,还有另一种方法:你可以也将其分发到Linux发行版商业RedHat购买商业GlusterStorage产品。它具有典型的企业功能(例如,您可以访问Linux发行版经销商的支持服务)。安装GlusterFS为避免示例过于复杂,我的环境由两个系统组成。每个系统提供一个砖块,它将在两个系统之间复制。在这两个系统上,glusterfs服务都是由systemd启动的(代码片段1)。代码片段1GlusterFS服务#systemctlstartglusterd.service#systemctlstatusglusterd.serviceglusterd.service-GlusterFS,aclusteredfile-systemserverLoaded:loaded(/usr/lib/systemd/system/glusterd.service;disabled;vendorpreset:disabled)Active:active(running)sinceThu2015-08-2721:26:45CEST;2min53sagoProcess:1424ExecStart=/usr/sbin/glusterd-p/var/run/glusterd.pid(code=exited,status=0/SUCCESS)MainPID:1425(glusterd)CGroup:/system.slice/glusterd.service??1425/usr/sbin/glusterd-p/var/run/glusterd.pidAug2721:26:45gluster2.example.comsystemd[1]:StartingGlusterFS,aclusteredfile-systemserver...Aug2721:26:45gluster2。example.comsystemd[1]:StartedGlusterFS,集群文件系统服务器。在两台计算机上,专用块设备都安装在/storage/下。然后将在此设备上设置将用于创建GlusterFS卷的砖块。在这个例子中,每个系统只使用一块砖。但是,这只有在您之前将所有存储系统都添加到前面描述的可信存储池时才有可能。您登录哪个存储系统来创建受信任的存储池并不重要。在此示例中,第一个系统(gluster1)用于此目的:#glusterpeerprobegluster2Probesuccessful本地系统自动属于受信任的存储池,不需要添加。glusterpeerstatus的输出现在应该将另一个系统标记为两个系统上的对等体。以下命令在两个存储系统之间创建一个复制卷。在这之后需要启用卷:#glustervolumecreategv0replicagluster1:/storage/brick1/gv0/gluster2:/storage/brick1/gv0/volumecreate:gv0:success:pleasestartthevolumetoaccessdata#g??lustervolumestartgv0volumestart:gv0:success设置为TCP/IP,不需要指定它。如果您更喜欢InfiniBand而不是TCP/IP,只需在创建卷时将rdma传输指定为另一个变量。以这种方式创建的卷为您提供了额外的功能。例如,您可以只允许来自特定网络的访问:#glustervolumesetgv0auth.allow192.168.122.*volumeset:successhere(http://www.admin-magazine.com/Articles/Build-storage-pools-with-GlusterFS/(offset)/3#article_i2)概述了所有可用的Gluster选项。安装卷后,您可以输入卷信息命令以获取详细信息(请参见代码段2)。代码片段2获取卷详细信息#glustervolumeinfogv0VolumeName:gv0Type:ReplicateVolumeID:4f8d25a9-bbee-4e8c-a922-15a7f5a7673dStatus:StartedNumberofBricks:1x2=2Transport-type:tcpBricks:Brick1:gluster1:/storage/brick2:storageg1lu/bagerick/2/gv0OptionsReconfigured:auth.allow:192.168.122.*使用FUSE实现最快的客户端访问可以使用各种方法最终访问以这种方式创建的卷。通过FUSE进行本地访问可提供最佳性能,您还可以为要通过网络访问的卷创建NFS或SMB共享。但是,我建议使用本机客户端软件,这不仅是为了获得更好的性能,而且还可以确保对各个块的透明访问,而不管用于安装卷的存储服务器如何。如果要创建GlusterFS卷,通过NFS-Ganesha或CTDB配置高可用的数据服务器,那么使用NFS或SMB值得关注。如果您按如下方式运行mount命令,则会使用本机客户端软件:mount-tglusterfsgluster1:/gv0/mnt/glusterfs/要提供对该卷的完全访问权限,请在您的etc/fstab文件中添加相应的行。现在值得一提的是,使用哪个存储系统进行访问并不重要,因为它只是用于读取元数据,这些元数据可以准确地告诉您卷的组成方式。您可以在此处找到所有为卷提供砖块的系统。扩展存储池GlusterFS允许用户轻松调整现有的存储池。例如,如果要在存储池中添加一个新的存储系统,可以使用以下命令:glusterpeerprobegluster3glustervolumeadd-brickreplica3gv0gluster3:/storage/brick1/gv0/这里将gluster3系统添加到存储池中,扩展现有的一砖一卷。调用glustervolumeinfo应该确认这一点:该卷现在有三块砖。根据选择的模式,您可能需要向卷中添加额外的块。例如,分布式复制卷需要四块砖。您可以像添加砖块一样轻松地从卷中删除砖块。如果你不再需要一个存储系统,你可以将它从可信存储池中删除:需要重新排序数据,以反映砖块数量发生变化的事实。要启动该过程,请使用此命令:glustervolumerebalancegv0start使用参数status而不是start调用此命令可为您提供有关重组进度的详细信息。GlusterFS作为云存储由于其良好的性能和易于扩展性,GlusterFS经常被用作云环境的存储解决方案。可以部署在纯粹基于libvirt的Qemu/KVM环境中,也可以部署在多个KVM实例并行运行的环境中。oVirt框架和RedHat的商业变体(企业虚拟化)就是两个例子。它们提供了在一段时间内将Gluster卷用作存储池或存储域的能力。得益于GlusterFS3.4版中集成的libgfapi库,Qemu可以直接访问磁盘而无需绕过FUSE挂载。性能测试表明,直接访问GlusterFS卷可以实现与直接访问brick几乎相同的性能。以下示例展示了如何为基于libvirt的KVM实例提供一个简单的存储池。此时,我假设已安装管理程序,并且只需要将之前创建的Gluster卷附加到它。原则上,除了命令行工具外,还可以使用图形化的virt-manager(虚拟机管理器)工具来实现(见图2)。图2:使用virt-manager图形工具,您可以创建GlusterFS存储池,但目前您仍然无法创建卷片段3显示了一个描述Gluster卷的XML文件,然后将其添加到libvirt框架。您只需要指定单个存储系统,并在配置卷时指定使用的卷名。接下来,创建一个新的libvirt存储池并启用它:#virshpool-define/tmp/gluster-storage.xmlPoolglusterfs-pooldefinedfrom/tmp/gluster-storage.xml#virshpool-startglusterfs-poolPoolglusterfs-poolstartedSnippet3Pooldefinitionglusterfs-poolgv0如果这个遇到这种情况,可以输入virshpool-list显示本地hypervisor上已有存储池的概览信息:#virshpool-list--allNameStateAutostart--------------------------------------------defaultactiveyesglusterfs-poolactivenovolumeok分配给虚拟机在此存储池。遗憾的是,截至撰写本文时,libvirt不允许您在GlusterFS池内创建卷,因此需要手动创建卷(参见图2)。以下命令在hypervisor上创建一个4GB的volume用于安装RedHatEnterpriseLinux系统:qemu-imgcreategluster://192.168.122.191/gv0/rhel7.img4GIP地址对应trustedstoragepool中的第一个存储系统,GlusterFS卷之前已在存储池中创建。virshvol-list命令显示卷已正确创建:#virshvol-listglusterfs-poolNamePath----------------------------------------------rhel7.imggluster://192.168.122.191/gv0/rhel7.img***,可以使用virt-manager或者virt-install命令运行该工具,创建所需的虚拟系统,并将刚刚设置的卷定义为存储后端。在GlusterFS卷上安装虚拟系统的一个非常简单的示例如下所示:#virt-install--namerhel7--memory4096--diskvol=glusterfs-pool/rhel7.img,bus=virtio--locationftp://192.168.122.1/pub/products/rhel7/当然,您需要相应地修改对virt-install的调用。这里的目的只是为了展示如何将GlusterFS卷用作安装系统的后端。***,另请注意,GlusterFS3.3版带来了另一项创新,即统一文件和对象(UFO)转换工具,它使文件系统能够将POSIX文件处理为对象,反之亦然。在OpenStack环境中,文件系统是内置OpenStack存储组件Swift名副其实的替代品,因为它支持所有OpenStack存储协议(文件、块和对象)。结论GlusterFS可以构建一个基于免费软件和商业硬件的水平可扩展存储系统。管理员可以在数据安全和/或性能之间进行选择。原标题:BuildstoragepoolswithGlusterFS,作者:ThorstenScherf