LINSTOR
4.基本管理任务/设置
LINSTOR是用于在Linux系统上存储的配置管理系统。它管理节点群集上的LVM逻辑卷和/或ZFS ZVOL。它利用DRBD在不同节点之间进行复制,并为用户和应用程序提供块存储设备。它通过bcache管理SSD中HDD支持的数据的快照,加密和缓存。
4.1。概念和术语
本节介绍了您需要熟悉的核心概念和术语,以了解LINSTOR如何工作和部署存储。本节以“基础”方法进行布局。
4.1.1。可安装的组件
线性控制器
LINSTOR设置至少需要一个活动控制器和一个或多个卫星。
该linstor控制器包含一个适用于整个集群的所有配置信息的数据库。它做出需要查看整个集群的所有决策。控制器通常使用Pacemaker和DRBD部署为HA服务,因为它是系统的关键部分。LINSTOR可以使用多个控制器,但是只能激活一个。
卫星linstor
该linstor卫星,其中LINSTOR占用本地存储或提供存储到服务的每个节点上运行。它是无状态的;它从控制器接收它需要的所有信息。它运行诸如lvcreate和的程序drbdadm。它就像一个节点代理。
linstor客户端
该linstor客户端是你用来向系统发出的命令,并探讨了系统的状态的命令行工具。
4.1.2。对象
对象是LINSTOR呈现给最终用户或应用程序的最终结果,例如;Kubernettes / OpenShift,复制块设备(DRBD),NVMeOF目标等
节点
节点是参与LINSTOR群集的服务器或容器。该节点 属性定义:
- 确定节点参与哪个LINSTOR集群
- 设置节点的角色:控制器,卫星,辅助
- NetInterface对象定义节点的连接性
网络接口
顾名思义,这就是定义节点网络接口的接口/地址的方式。
定义
定义定义对象的属性,可以将它们视为配置文件或模板。创建的对象将继承定义中定义的配置。在创建关联对象之前,必须先定义一个定义。例如; 您必须在创建资源 之前创建一个ResourceDefinition
存储池定义
- 定义存储池的名称
资源定义
资源定义定义资源的以下属性:
- DRBD资源的名称
- DRBD用于资源连接的TCP端口
体积定义
卷定义定义以下内容:
- DRBD资源量
- 卷的大小
- DRBD资源的卷的卷号
- 卷的元数据属性
- 与DRBD卷关联的DRBD设备使用的次设备号
储存池
所述StoragePool标识LINSTOR的上下文存储。它定义:
- 特定节点上存储池的配置
- 用于群集节点(LVM,ZFS等)上的存储池的存储后端驱动程序
- 传递给存储支持的驱动程序的参数和配置
资源资源
LINSTOR现在已经扩展了其功能,以管理除DRBD之外的更广泛的存储技术。一个资源:
- 表示在ResourceDefinition中定义的DRBD资源的位置
- 将资源放置在集群中的节点上
- 定义资源定义在节点上的位置
体积
卷是Resource的子集。一个资源可以有多个卷,例如,你可能希望存储在除了在你的MySQL集群的日志存储速度较慢的数据库。通过将卷保留在单个资源下,您实际上是在创建一致性组。该卷属性还可以定义更细化的级别定义属性。
4.2。广阔的背景
尽管可以使用LINSTOR来简化DRBD的管理,但它通常与更高级别的软件集成在一起。Kubernetes,OpenStack,OpenNebula和Proxmox已经存在这种集成。本指南中包含有关在这些环境中部署LINSTOR的特定章节。
LINSTOR使用的南行驱动程序是LVM,thinLVM和ZFS,并且正在支持Swordfish。
4.3。配套
LINSTOR打包在.rpm和.deb变体中:
- linstor-client包含命令行客户端程序。它取决于通常已经安装的python。在RHEL 8系统中,您将需要符号链接python
- linstor-controller 和linstor-satellite都包含服务的systemd单元文件。它们取决于Java运行时环境(JRE)版本1.8(无头)或更高版本。
有关这些软件包的更多详细信息,请参见上面的“可 安装组件”部分。
如果您订阅了LINBIT,则可以通过我们的存储库访问我们的认证二进制文件。 |
4.4。安装
如果要在容器中使用LINSTOR,请跳过本主题,并使用下面的“容器”部分进行安装。 |
4.4.1。Ubuntu Linux的
如果要选择使用DRBD创建复制存储,则需要安装drbd-dkms和drbd-utils。这些软件包将需要安装在所有节点上。您还需要选择一个卷管理器(ZFS或LVM),在这种情况下,我们使用的是LVM。
#apt install -y drbd-dkms drbd-utils lvm2
根据您的节点是LINSTOR控制器,是卫星,还是同时是两者(合并),将确定该节点上需要哪些软件包。对于组合类型的节点,我们将需要控制器和卫星LINSTOR软件包。
组合节点:
#apt安装linstor-controller linstor-satellite linstor-client
这将使我们其余的节点成为Satellite,因此我们需要在其上安装以下软件包:
#apt安装linstor-satellite linstor-client
4.4.2。SUSE Linux Enterprise Server
SLES高可用性扩展(HAE)包括DRBD。
在SLES上,通常通过YaST2的软件安装组件来安装DRBD。它与“高可用性”包装选项捆绑在一起。
当我们下载DRBD的最新模块时,我们可以检查LVM工具是否也是最新的。喜欢命令行安装的用户只需发出以下命令即可获取最新的DRBD和LVM版本:
#zypper安装drbd lvm2
根据您的节点是LINSTOR控制器,是卫星,还是同时是两者(合并),将确定该节点上需要哪些软件包。对于组合类型的节点,我们将需要控制器和卫星LINSTOR软件包。
组合节点:
#zypper安装linstor-controller linstor-satellite linstor-client
这将使我们其余的节点成为Satellite,因此我们需要在其上安装以下软件包:
#zypper install linstor-satellite linstor-client
4.4.3。CentOS的
CentOS从发行5开始就拥有DRBD8。对于DRBD 9,您需要查看EPEL和类似的资源。另外,如果您与LINBIT有有效的支持合同,则可以使用我们的RHEL 8存储库。可以使用安装DRBD yum。我们也可以检查LVM工具的最新版本。
如果您希望复制存储,则 LINSTOR 需要 DRBD 9。这需要配置一个外部存储库,无论是LINBIT还是第三方。 |
#yum install drbd kmod-drbd lvm2
根据您的节点是LINSTOR控制器,是卫星,还是同时是两者(合并),将确定该节点上需要哪些软件包。对于组合类型的节点,我们将需要控制器和卫星LINSTOR软件包。
在RHEL 8系统上,您需要安装python2才能使linstor-client运行。 |
组合节点:
#yum install linstor-controller linstor-satellite linstor-client
这将使我们其余的节点成为Satellite,因此我们需要在其上安装以下软件包:
#yum install linstor-satellite linstor-client
4.5。货柜
LINSTOR也可用作容器。基本映像位于LINBIT的容器注册表中drbd.io。
为了访问图像,您首先必须登录到注册表(请访问sales@linbit.com获取凭据):
#docker登录drbd.io
此仓库中可用的容器是:
- drbd.io/drbd9:rhel8
- drbd.io/drbd9:rhel7
- drbd.io/drbd9:bionic
- drbd.io/linstor-csi
- drbd.io/linstor-controller
- drbd.io/linstor-satellite
- drbd.io/linstor-client
可以通过在浏览器中打开http://drbd.io来检索具有版本的可用图像的最新列表。确保通过“ http”访问主机,因为注册表的映像本身是通过“ https”提供的。
要加载仅LINSTOR卫星所需的内核模块,您需要以drbd9特权模式运行容器。内核模块容器要么从客户存储库中检索正式的LINBIT软件包,要么尝试从源代码构建内核模块。如果您打算从源代码进行构建,则需要kernel-devel在主机上安装相应的内核头文件(例如)。有3种方法可以执行这种模块加载容器:
- 指定LINBIT节点哈希和分布。
- 绑定安装现有存储库配置。
- 不执行上述任何一项操作以从源代码触发构建。
使用哈希和分布的示例:
#docker run -it --rm --privileged -v / lib / modules:/ lib / modules \
-e LB_DIST = rhel7.7 -e LB_HASH = ThisIsMyNodeHash \
drbd.io/drbd9:rhel7
使用现有回购配置的示例。
#docker run -it --rm --privileged -v / lib / modules:/ lib / modules \
-v /etc/yum.repos.d/linbit.repo:/etc/yum.repos.d/linbit.repo:ro \
drbd.io/drbd9:rhel7
在这两种情况下(哈希+分发以及绑定安装),哈希或配置都必须来自具有特殊属性集的节点。随时联系我们的支持,我们设置了此属性。 |
从发货来源(基于RHEL)构建的示例:
#docker run -it --rm --privileged -v / lib / modules:/ lib / modules \
-v / usr / src:/ usr / src:ro \
drbd.io/drbd9:rhel7
从发货来源(基于Debian)构建示例:
#docker run -it --rm --privileged -v / lib / modules:/ lib / modules \
-v / usr / src:/ usr / src:ro -v / usr / lib:/ usr / lib:ro \
drbd.io/drbd9:bionic
不要不绑定贴装/usr/lib基于RHEL系统!而且也不能忘了结合,将其安装在基于Debian的。
现在(即DRBD 9之前的版本“ 9.0.17”),您必须使用容器化的DRBD内核模块,而不是将内核模块加载到主机系统上。如果打算使用容器,则不应在主机系统上安装DRBD内核模块。对于9.0.17或更高版本的DRBD,您可以照常在主机系统上安装内核模块,但是需要确保使用usermode_helper=disabled参数(例如modprobe drbd usermode_helper=disabled)加载模块。 |
然后,将还具有特权的LINSTOR卫星容器作为守护程序运行:
#docker run -d --name = linstor-satellite --net = host --privated drbd.io/linstor-satellite
net=host必须使容器化的容器drbd-utils能够通过netlink与主机内核进行通信。 |
要运行LINSTOR控制器容器作为后台进程,映射端口 3370,3376和3377主机到容器上:
#docker run -d --name = linstor-controller -p 3370:3370 -p 3376:3376 -p 3377:3377 drbd.io/linstor-controller
要与容器化的LINSTOR群集进行交互,可以使用通过软件包安装在系统上的LINSTOR客户端,也可以使用容器化的LINSTOR客户端。要使用LINSTOR客户端容器,请执行以下操作:
#docker run -it --rm -e LS_CONTROLLERS = <控制器主机IP地址> drbd.io/linstor-client节点列表
从这一点开始,您将使用LINSTOR客户端初始化集群并开始使用典型的LINSTOR模式创建资源。
要停止并删除守护程序容器和图像:
#docker stop linstor-controller
#docker rm linstor-控制器
4.6。初始化集群
我们假设在所有群集节点上完成以下步骤:
- DRBD9内核模块已安装并加载
- drbd-utils 已安装
- LVM 工具已安装
- linstor-controller和/或其linstor-satellite依赖项已安装
- 将linstor-client安装在linstor-controller节点上
在已安装的主机上启动并启用linstor-controller服务:
#systemctl enable --now linstor-controller
如果确定linstor-controller服务在安装时自动启用,则也可以使用以下命令:
#systemctl启动linstor-controller
4.7。使用LINSTOR客户端
每当您运行LINSTOR命令行客户端时,它都需要知道您的linstor-controller在哪里运行。如果您未指定它,它将尝试到达在IP 127.0.0.1端口上监听的本地运行的linstor-controller 3376。因此,我们将linstor-client在与相同的主机上使用linstor-controller。
在linstor-satellite需要端口3366和3367.的linstor-controller 要求端口3376和3377.请确保您有这些端口可以在你的防火墙。 |
#linstor节点列表
应该给您一个空列表,而不是错误消息。
您可以linstor在任何其他机器上使用该命令,但是随后您需要告诉客户端如何找到linstor-controller。如图所示,可以将其指定为命令行选项,环境变量或全局文件:
#linstor --controllers = alice节点列表
#LS_CONTROLLERS = alice linstor节点列表
或者,您可以创建/etc/linstor/linstor-client.conf 文件并按如下所示填充它。
[全球]
控制器=驴友
如果您配置了多个linstor-controller,则只需在逗号分隔的列表中全部指定它们即可。linstor-client将仅按照列出的顺序尝试它们。
通过仅写入参数的起始字母,也可以以更快,更方便的方式使用linstor-client命令,例如:linstor node list→linstor n l |
4.8。将节点添加到集群
下一步是将节点添加到LINSTOR集群。您需要提供:
- 节点名称必须与的输出匹配uname -n
- 节点的IP地址。
#linstor节点创建bravo 10.43.70.3
使用时,linstor node list您会看到新节点被标记为离线。现在,在该节点上启动并启用linstor-satellite,以便该服务也可以在重新启动时启动:
#systemctl enable --now linstor-satellite
systemctl start linstor-satellite 如果您确定该服务已默认启用并在重新启动时启动,则也可以使用。
大约10秒钟后,您将看到linstor node list 在线状态。当然,可以在控制器知道卫星节点的存在之前开始卫星处理。
如果托管控制器的节点也应为LINSTOR群集提供存储,则必须将其添加为节点并同时启动linstor-satellite。 |
4.9。储存池
StoragePools在LINSTOR上下文中标识存储。要对来自多个节点的存储池进行分组,只需在每个节点上使用相同的名称。例如,一种有效的方法是为所有SSD命名,而为所有HDD命名。
在每个提供存储的主机上,您需要创建LVM VG或ZFS zPool。用一个LINSTOR存储池名称标识的VG和zPool在主机上可能具有不同的VG或zPool名称,但是请您帮忙,并在所有节点上使用相同的VG或zPool名称。
#vgcreate vg_ssd / dev / nvme0n1 / dev / nvme1n1 [...]
然后需要向LINSTOR注册这些:
#linstor存储池创建lvm alpha pool_ssd vg_ssd
#linstor存储池创建lvm bravo pool_ssd vg_ssd
存储池名称和公共元数据称为 存储池定义。列出的命令将隐式创建存储池定义。您可以使用查看linstor storage-pool-definition list。明确创建存储池定义是可能的,但不是必需的。 |
要列出您的存储池,可以使用:
#linstor存储池列表
或使用简短版本
#linstor sp l
如果存储池的VG / zPool出了问题,例如VG已重命名或以某种方式变为无效,则可以使用以下命令删除LINSTOR中的存储池,因为只有资源及其所有卷在所谓的“丢失的存储池已连接。从LINSTOR v0.9.13开始,此功能可用。
#linstor存储池丢失了alpha pool_ssd
或使用简短版本
#linstor sp lo alpha pool_ssd
如果由于附加的资源或快照(其某些卷位于另一个仍在运行的存储池中)而防止删除存储池,则将在相应的list-command(例如linstor resource list)的“状态”列中给出提示。在手动删除丢失的存储池中的LINSTOR对象之后,可以再次执行lost-command以确保完全删除存储池及其剩余对象。
4.9.1。每个后端设备的存储池
在只有一种存储并且具有热修复存储设备功能的群集中,可以选择一个模型,在该模型中为每个物理后备设备创建一个存储池。此模型的优点是将故障域限制为单个存储设备。
4.10。资源组
资源组是资源定义的父对象,其中对资源组所做的所有属性更改都将由其资源定义子级继承。资源组还存储自动放置规则的设置,并可以根据存储的规则生成资源定义。
简单来说,资源组就像模板一样,定义了从它们创建的资源的特征。对这些伪模板的更改将追溯应用到从资源组创建的所有资源。
使用资源组来定义您希望如何配置资源,应该被视为部署LINSTOR所配置的卷的实际方法。接下来的章节描述了根据资源定义和 卷定义创建每个资源的过程,仅应在特殊情况下使用。 |
即使您选择不在LINSTOR集群中创建和使用资源组,所有通过资源定义和卷定义创建的 资源都将存在于'DfltRscGrp' 资源组中。 |
使用资源组部署资源的简单模式如下所示:
#linstor resource-group创建my_ssd_group-存储池pool_ssd --place-count 2
#linstor volume-group创建my_ssd_group
#linstor resource-group spawn-resources my_ssd_group my_ssd_res 20G
上面的命令将导致名为'my_ssd_res'的资源(具有20GB的卷被复制两次)自动从参与名为'pool_ssd'的存储池的节点中进行配置。
一个更有用的模式可能是使用确定为您的用例最佳的设置来创建资源组。也许您必须每晚进行一次在线一致性验证,在这种情况下,您可以创建一个资源组,并选择已设置的“ verify-alg”,以便从该组产生的资源预先配置为“ verify” -alg'设置:
#linstor resource-group创建my_verify_group-存储池pool_ssd --place-count 2
#linstor资源组drbd-options --verify-alg crc32c my_verify_group
#linstor volume-group创建my_verify_group
#为{00..19}中的i;做
linstor资源组生成资源my_verify_group res $ i 10G
完成
上面的命令导致创建了20个10GiB资源,每个资源都预先配置了'crc32c''verify-alg'。
您可以通过在各自的resource-definition或volume-definition上设置选项来调整从资源组产生的单个资源或卷的设置 。例如,如果上面示例中的“ res11”被一个非常活跃的数据库使用,该数据库接收大量小的随机写入,则您可能希望增加该特定资源的“范围”:
#linstor资源定义drbd-options --al-extents 6007 res11
如果配置的设置资源的定义是在已配置资源组它是从,在设定值产生了资源的定义将覆盖父设置的值 的资源组。例如,如果在验证中使用相同的“ res11”来使用速度较慢但更安全的“ sha256”哈希算法,则在资源定义中 为“ res11” 设置“ verify-alg ”将覆盖在“ res11”上设置的值资源组:
#linstor资源定义drbd-options --verify-alg sha256 res11
继承设置的层次结构的经验法则是值“更接近”资源或卷获胜:卷定义 设置优先于卷组设置,而 资源定义设置优先于资源组 设置。 |
4.11。集群配置
4.11.1。可用的存储插件
撰写本文时,LINSTOR具有以下受支持的存储插件:
- 厚LVM
- 具有单个精简池的精简LVM
- 厚ZFS
- 薄ZFS
4.12。创建和部署资源/卷
在以下情况下,我们假定目标是创建一个大小为“ 500 GB”的资源“备份”,该资源在三个群集节点之间复制。
首先,我们创建一个新的资源定义:
#linstor资源定义创建备份
其次,我们在该资源定义中创建一个新的卷定义:
#linstor卷定义创建备份500G
如果要更改音量定义的大小,只需执行以下操作即可:
#linstor卷定义集大小备份0 100G
该参数0是资源中卷的数量backups。您必须提供此参数,因为资源可以具有多个卷,并且它们由所谓的卷号标识。可以通过列出卷定义找到该数字。
如果没有资源,则只能减小卷定义的大小。尽管如此,即使部署了资源也可以增加大小。 |
到目前为止,我们仅在LINSTOR的数据库中创建了对象,在存储节点上尚未创建单个LV。现在,您可以选择将放置任务委托给LINSTOR还是自己完成。
4.12.1。手动放置
使用该resource create命令,您可以为命名节点显式分配资源定义。
#linstor资源创建alpha备份--storage-pool pool_hdd
#linstor资源创建bravo备份--storage-pool pool_hdd
#linstor资源创建charlie备份--storage-pool pool_hdd
4.12.2。自动放置
自动放置后的值告诉LINSTOR您想要多少个副本。存储池选项应该很明显。
#linstor资源创建备份-自动放置3-存储池pool_hdd
也许不是很明显,就是您可以忽略该--storage-pool选项,然后LINSTOR可以自己选择一个存储池。选择遵循以下规则:
- 忽略当前用户无权访问的所有节点和存储池
- 忽略所有无盘存储池
- 忽略所有没有足够可用空间的存储池
LINSTOR当前从剩余的存储池中选择可用空间最大的一个。
如果一切顺利,则LINSTOR已创建了DRBD资源。可以通过使用lsblk 看起来drbd0000相似的命令查找DRBD块设备来进行检查。 |
现在,我们应该能够安装资源的块设备并开始使用LINSTOR。
5.其他LINSTOR任务
5.1。DRBD客户
通过使用--diskless选项代替,--storage-pool您可以在节点上拥有永久性的无磁盘DRBD设备。这意味着资源将显示为“块设备”,并且可以在没有现有存储设备的情况下挂载到文件系统。在具有相同资源的另一个节点上通过网络访问资源的数据。
#linstor资源创建增量备份-无盘
5.2。LINSTOR-DRBD一致性组/多个卷
所谓的一致性组是DRBD的一项功能。由于LINSTOR的主要功能之一是使用DRBD管理存储集群,因此在本用户指南中进行了提及。一个资源中的多个卷是一个一致性组。
这意味着一种资源在不同卷上的更改将按相同的时间顺序复制到另一颗卫星上。
因此,如果在资源中的不同卷上具有相互依赖的数据,则不必担心时间安排。
要在LINSTOR资源中部署多个卷,您必须创建两个具有相同名称的卷定义。
#linstor卷定义创建备份500G
#linstor卷定义创建备份100G
5.3。一种资源到不同存储池的数量
这可以通过StorPoolName在将资源部署到节点之前将属性设置为卷定义来实现:
#linstor资源定义创建备份
#linstor卷定义创建备份500G
#linstor卷定义创建备份100G
#linstor卷定义设置属性备份0 StorPoolName pool_hdd
#linstor卷定义设置属性备份1 StorPoolName pool_ssd
#linstor资源创建Alpha备份
#linstor资源创建bravo备份
#linstor资源创建查理备份
由于该volume-definition create命令没有使用--vlmnr选项LINSTOR分配从0开始的卷号。在以下两行中,0和1指的是这些自动分配的卷号。 |
这里的“资源创建”命令不需要--storage-pool选项。在这种情况下,LINSTOR使用“备用”存储池。查找该存储池后,LINSTOR会按以下顺序查询以下对象的属性:
- 体积定义
- 资源资源
- 资源定义
- 节点
如果这些对象都不包含StorPoolName属性,则控制器将退回到硬编码的“ DfltStorPool”字符串作为存储池。
这也意味着,如果在部署资源之前忘记定义存储池,则会收到一条错误消息,提示LINSTOR找不到名为“ DfltStorPool”的存储池。
5.4。没有DRBD的LINSTOR
LINSTOR也可以在没有DRBD的情况下使用。如果没有DRBD,则LINSTOR能够从LVM和ZFS支持的存储池中调配卷,并在LINSTOR群集中的各个节点上创建这些卷。
当前,LINSTOR支持创建LVM和ZFS卷,并可以选择在这些卷之上分层放置LUKS,DRBD和/或NVMe-oF / NVMe-TCP的某些组合。
例如,假设我们在LINSTOR集群中定义了一个由Thin LVM支持的存储池,名称为thin-lvm:
#linstor --no-utf8存储池列表
+ ------------------------------------------------- ------------- +
| 储存池| 节点| 驱动程序 池名| ... |
| ------------------------------------------------- ------------- |
| 薄lvm | linstor-a | LVM_THIN | drbdpool / thinpool | ... |
| 薄lvm | linstor-b | LVM_THIN | drbdpool / thinpool | ... |
| 薄lvm | linstor-c | LVM_THIN | drbdpool / thinpool | ... |
| 薄lvm | linstor-d | LVM_THIN | drbdpool / thinpool | ... |
+ ------------------------------------------------- ------------- +
我们可以使用LINSTOR linstor-d通过以下命令在大小为100GiB的基础上创建Thin LVM :
#linstor资源定义创建rsc-1
#linstor卷定义创建rsc-1 100GiB
#linstor资源创建-层列表存储\
-存储池Thin-LVM Linstor-D RSC-1
然后,您应该看到上有一个新的Thin LVM linstor-d。您可以通过列出--machine-readable设置了标志的linstor资源来从LINSTOR中提取设备路径:
#linstor-机器可读的资源列表| grep device_path
“ device_path”:“ / dev / drbdpool / rsc-1_00000”,
如果要将DRBD放在该卷之上(这是--layer-listLINSTOR中ZFS或LVM支持的卷的默认 选项),则可以使用以下资源创建模式:
#linstor资源定义创建rsc-1
#linstor卷定义创建rsc-1 100GiB
#linstor资源创建-层列表drbd,存储\
-存储池Thin-LVM Linstor-D RSC-1
然后,您将看到有一个新的Thin LVM在以下位置支持DRBD卷linstor-d:
#linstor-机器可读的资源列表| grep -e device_path -e backing_disk
“ device_path”:“ / dev / drbd1000”,
“ backing_disk”:“ / dev / drbdpool / rsc-1_00000”,
当前支持的--layer-list组合的完整列表如下:
- drbd,lus,存储
- drbd,存储
- 储存
- nvme,存储
- 存储
有关该luks层的先决条件的信息,请参阅本《用户指南》的“加密卷”部分。 |
5.4.1。NVMe-oF / NVMe-TCP LINSTOR层
NVMe-oF / NVMe-TCP允许LINSTOR将无盘资源连接到节点,该节点与通过NVMe架构存储数据的资源相同。这带来的优点是,可以通过网络访问数据而无需使用本地存储就可以装载资源。在这种情况下,LINSTOR不使用DRBD,因此不会复制LINSTOR提供的NVMe资源,数据存储在一个节点上。
NVMe-oF仅在支持RDMA的网络上工作,而NVMe-TCP在每个可以承载IP流量的网络上工作。如果您想了解有关NVMe-oF / NVMe-TCP 的更多信息,请访问 https://www.linbit.com/cn/nvme-linstor-swordfish/以获取更多信息。 |
要将NVMe-oF / NVMe-TCP与LINSTOR一起使用,nvme-cli需要在充当卫星的每个节点上安装该软件包,并将对资源使用NVMe-oF / NVMe-TCP:
如果您不使用Ubuntu,请使用合适的命令在您的OS上安装软件包-SLES:zypper-CentOS:yum |
#apt安装nvme-cli
要创建使用NVMe-oF / NVMe-TCP的资源,在创建资源定义时必须提供一个附加参数:
#linstor资源定义创建nvmedata -l nvme,存储
缺省情况下,drbd, storage使用DRBD时-l(层堆栈)参数设置为。如果要使用NVMe或DBRD创建LINSTOR资源,则必须将-l参数设置为only storage。 |
为我们的资源创建体积定义:
#linstor volume-definiton创建nvmedata 500G
在节点上创建资源之前,必须知道数据将在本地存储在哪里以及哪个节点通过网络访问它。
首先,我们在将存储数据的节点上创建资源:
#linstor资源创建alpha nvmedata-存储池pool_ssd
在将通过网络访问资源数据的节点上,必须将资源定义为无盘:
#linstor资源创建beta nvmedata -d
该-d参数在该节点上将资源创建为无盘资源。
现在,您可以将资源挂载到nvmedata您的节点之一上。
如果您的节点有多个NIC,则应强制使用它们之间的路由进行NVMe-of / NVME-TCP,否则,多个NIC可能会引起麻烦。 |
5.5。管理网络接口卡
LINSTOR可以处理一台机器中的多个网络接口卡(NIC),netif以LINSTOR的名义被称为。
创建卫星节点时,第一个节点netif将使用名称隐式创建default。使用 命令的--interface-name选项,node create可以给它一个不同的名称。 |
像这样创建其他网卡:
#linstor节点接口创建alpha 100G_nic 192.168.43.221
#linstor节点接口创建alpha 10G_nic 192.168.43.231
NIC的IP地址只认,该名称是任意的,并 没有涉及到Linux使用接口名称。可以将NIC分配给存储池,以便无论何时在该存储池中创建资源,DRBD通信都将通过指定的NIC进行路由。
#linstor存储池设置属性alpha pool_hdd PrefNic 10G_nic
#linstor存储池设置属性alpha pool_ssd PrefNic 100G_nic
FIXME描述了如何通过特定的路由路由控制器<->客户端通信netif。
5.6。加密卷
LINSTOR可以处理drbd卷的透明加密。dm-crypt用于加密从存储设备提供的存储。
使用加密的基本步骤:
- 禁用控制器上的用户安全性(一旦验证成功,这将作废)
- 创建主密码
- 添加luks到图层列表
- 控制器重启后,请不要忘记重新输入主密码。
5.6.1。禁用用户安全
禁用Linstor控制器上的用户安全性是一次操作,此后仍然存在。
- 通过systemd停止正在运行的linstor-controller: systemctl stop linstor-controller
- 在调试模式下启动linstor-controller: /usr/share/linstor-server/bin/Controller -c /etc/linstor -d
- 在调试控制台中,输入: setSecLvl secLvl(NO_SECURITY)
- 使用debug shutdown命令停止linstor-controller: shutdown
- 使用systemd重新启动控制器: systemctl start linstor-controller
5.6.2。加密命令
以下是有关命令的详细信息。
在LINSTOR可以加密任何卷之前,需要创建一个主密码。这可以通过linstor-client完成。
#linstor加密创建密码
crypt-create-passphrase 将等待用户输入初始主密码(因为所有其他crypt命令将不带参数)。
如果您想更改主密码,可以使用以下方法完成:
#linstor加密Modify-Passphrase
luks可以在创建资源定义或资源本身时添加该层,而建议使用前一种方法,因为它将自动应用于根据该资源定义创建的所有资源。
#linstor资源定义create crypt_rsc --layer-list luks,storage
要输入主密码(在控制器重启后),请使用以下命令:
#linstor加密输入密码
每当重新启动linstor-controller时,用户都必须将主密码发送给控制器,否则LINSTOR无法重新打开或创建加密的卷。 |
5.7。检查集群状态
LINSTOR提供了各种命令来检查集群的状态。这些命令以“ list-”前缀开头,并提供各种过滤和排序选项。'--groupby'选项可用于对输出进行多维分组和排序。
#linstor节点列表
#linstor存储池列表--groupby大小
5.8。管理快照
精简LVM和ZFS存储池支持快照。
5.8.1。创建快照
假设已在某些节点上放置了名为“ resource1”的资源定义,则可以按以下方式创建快照:
#linstor快照创建resource1 snap1
这将在存在该资源的所有节点上创建快照。即使资源处于活动使用状态,LINSTOR也会确保拍摄一致的快照。
5.8.2。恢复快照
以下步骤将快照还原到新资源。即使从拍摄快照的节点中删除了原始资源,这也是可能的。
首先用与快照中的卷匹配的卷定义新资源:
#linstor资源定义创建resource2
#linstor快照卷定义还原--from-resource resource1 --from-snapshot snap1 --to-resource2
此时,如有必要,可以应用其他配置。然后,准备好后,根据快照创建资源:
#linstor快照资源还原--from-resource resource1 --from-snapshot snap1 --to-resource resource2
这会将新资源放置在存在快照的所有节点上。也可以显式选择放置资源的节点。请参阅帮助(linstor snapshot resource restore -h)。
5.8.3。回滚快照
LINSTOR可以将资源回滚到快照状态。该资源不得处于使用状态。也就是说,它可能不会安装在任何节点上。如果资源正在使用中,请考虑是否可以通过还原快照来实现目标 。
回滚执行如下:
#linstor快照回滚resource1 snap1
资源只能回滚到最新快照。要回滚到较早的快照,请首先删除中间快照。
5.8.4。删除快照
可以按以下方式删除现有快照:
#linstor快照删除resource1 snap1
5.9。设置资源选项
使用LINSTOR命令设置DRBD选项。/etc/drbd.d/global_common.confLINSTOR不管理的文件中的配置将被忽略。以下命令显示用法和可用选项:
#linstor控制器drbd-options -h
#linstor资源定义drbd-options -h
#linstor音量定义drbd-options -h
#linstor资源drbd-peer-options -h
例如,很容易为名为的资源设置DRBD协议 backups:
#linstor资源定义drbd-options-协议C备份
5.10。添加和删除磁盘
LINSTOR可以在无盘和有磁盘之间转换资源。这可以通过resource toggle-disk命令来实现,该命令的语法类似于resource create。
例如,将磁盘添加到backups“ alpha”上的无盘资源中:
#linstor资源切换磁盘Alpha备份-存储池pool_ssd
再次删除该磁盘:
#linstor资源切换磁盘alpha备份--diskless
5.10.1。迁移磁盘
为了在节点之间移动资源而又不减少冗余,可以使用LINSTOR的磁盘迁移功能。首先在目标节点上创建无盘资源,然后使用该--migrate-from选项添加磁盘。这将等待,直到数据已同步到新磁盘,然后再删除源磁盘。
例如,要将资源backups从“ alpha” 迁移到“ bravo”:
#linstor资源创建bravo备份--diskless
#linstor资源切换磁盘Bravo备份--storage-pool pool_ssd --migrate-from alpha
5.11。具有LINSTOR的DRBD代理
LINSTOR可用于为远程复制配置DRBD代理。必须首先按照使用DRBD代理中的说明安装和许可 DRBD代理。
LINSTOR期望DRBD代理在相关连接所涉及的节点上运行。它当前不支持通过单独节点上的DRBD代理进行连接。
假设我们的集群由本地网络中的节点“ alpha”和“ bravo”以及远程站点中的“ charlie”组成,并且将资源定义命名backups 部署到每个节点。然后可以为DRCHAR代理启用到“ charlie”的连接,如下所示:
#linstor drbd-proxy启用alpha查理备份
#linstor drbd-proxy启用bravo charlie备份
可以使用以下命令定制DRBD代理配置:
#linstor drbd-proxy选项备份--memlimit 100000000
#linstor drbd-proxy压缩zlib备份-级别9
LINSTOR不会自动为远程复制优化DRBD配置,因此您可能需要设置一些配置选项,例如协议:
#linstor资源连接drbd-options alpha查理备份-协议A
#linstor资源连接drbd-options bravo charlie备份-协议A
请与LINBIT联系以获得优化配置的帮助。
5.12。外部资料库
LINSTOR可能与外部数据库提供程序(如Postgresql或MariaDB)一起使用。要使用外部数据库,需要配置一些其他步骤。
- 需要将数据库的JDBC数据库驱动程序下载并安装到LINSTOR库目录。
- 该/etc/linstor/linstor.toml配置文件需要editied为你的数据库设置。
5.12.1。PostgreSQL
可以在这里下载Postgresql JDBC驱动程序:
https://jdbc.postgresql.org/download.html
然后复制到: /usr/share/linstor-server/lib/
一个示例Postgresql linstor.toml看起来像这样:
[D b]
用户=“ linstor”
密码=“ linstor”
connection_url =“ jdbc:postgresql:// localhost / linstor”
5.12.2。MariaDB / MySQL
可以在此处下载MariaDB JDBC驱动程序:
https://downloads.mariadb.org/connector-java/
然后复制到: /usr/share/linstor-server/lib/
样本MariaDB linstor.toml如下所示:
[D b]
用户=“ linstor”
密码=“ linstor”
connection_url =“ jdbc:mariadb:// localhost / LINSTOR?createDatabaseIfNotExist = true”
LINSTOR架构/数据库已创建,LINSTOR因此请确保mariadb连接字符串引用了该LINSTOR架构,如上例所示。 |
5.13。LINSTOR REST-API
为了使LINSTOR的管理任务更易于访问并且也可用于Web前端,已创建了REST-API。REST-API嵌入在linstor控制器中,并且由于LINSTOR 0.9.13是通过linstor.toml配置文件进行配置的。
[http]
启用=真
端口= 3370
listen_addr = 127.0.0.1#禁用远程访问
如果要使用REST-API,可以在以下链接上找到当前文档:https : //app.swaggerhub.com/apis-docs/Linstor/Linstor/
5.13.1。LINSTOR REST-API HTTPS
HTTP REST-API也可以由HTTPS保护运行,如果您使用任何需要授权的功能,则强烈建议使用。为此,您必须使用有效的证书创建一个Java密钥库文件,该证书将用于加密所有HTTPS流量。
这是一个简单的示例,说明如何keytool使用Java运行时中包含的来创建自签名证书:
keytool -keyalg rsa -keysize 2048 -genkey -keystore ./keystore_linstor.jks \
-alias linstor_controller \
-dname“ CN =本地主机,OU =安全单元,O =示例组织,L =维也纳,ST =奥地利,C = AT”
keytool会要求输入密码以保护生成的密钥库文件,这对于LINSTOR控制器配置是必需的。在linstor.toml文件中,您必须添加以下部分:
[http]
keystore =“ /path/to/keystore_linstor.jks”
keystore_password =“ linstor”
现在(重新)启动linstor-controller,HTTPS REST-API应该在端口3371上可用。
可以在以下位置找到有关如何导入其他证书的更多信息:https : //docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html
启用HTTPS时,对HTTP / v1 / REST-API的所有请求都将重定向到HTTPS重定向。 |
5.14。记录中
Linstor使用带有Logback的SLF4J作为绑定。这给Linstor的possibilty日志级别来区分,,,和 (增加冗长的顺序)。在当前的linstor版本(1.1.2)中,用户具有以下四种控制日志记录级别的方法,按优先级排序(第一种具有最高优先级):ERRORWARNINFODEBUGTRACE
- TRACE模式可以是enabled或disabled使用调试控制台:
- 命令==> SetTrcMode MODE(已启用)
- SetTrcMode设置TRACE级别的日志记录模式
新的TRACE级别日志记录模式:已启用
- 启动控制器或卫星时,可以传递命令行参数:
- java ... com.linbit.linstor.core.Controller ... --log级信息
java ... com.linbit.linstor.core.Satellite ... --log级信息
- 推荐的位置是文件中的logging部分/etc/linstor/linstor.toml:
- [记录中]
level =“ INFO”
- 由于Linstor使用Logback作为实现,/usr/share/linstor-server/lib/logback.xml因此也可以使用。当前,只有这种方法支持不同组件的不同日志级别,如下面的示例所示:
- <?xml版本=“ 1.0”编码=“ UTF-8”?>
- <configuration scan =“ false” scanPeriod =“ 60秒”>
- <!-
- scanPeriod的值可以以毫秒,秒,分钟或小时为单位指定
- https://logback.qos.ch/manual/configuration.html
- ->
- <appender name =“ STDOUT” class =“ ch.qos.logback.core.ConsoleAppender”>
- <!-编码器已分配类型
- ch.qos.logback.classic.encoder.PatternLayoutEncoder默认为->
- <编码器>
- <pattern>%d {HH:mm:ss.SSS} [%thread]%-5level%logger-%msg%n </ pattern>
- </ encoder>
- </ appender>
- <appender name =“ FILE” class =“ ch.qos.logback.core.rolling.RollingFileAppender”>
- <file> $ {log.directory} / linstor-$ {log.module} .log </ file>
- <append> true </ append>
- <encoder class =“ ch.qos.logback.classic.encoder.PatternLayoutEncoder”>
- <Pattern>%d {yyyy_MM_dd HH:mm:ss.SSS} [%thread]%-5level%logger-%msg%n </ Pattern>
- </ encoder>
- <rollingPolicy class =“ ch.qos.logback.core.rolling.FixedWindowRollingPolicy”>
- <FileNamePattern> logs / linstor-$ {log.module}。%i.log.zip </ FileNamePattern>
- <MinIndex> 1 </ MinIndex>
- <MaxIndex> 10 </ MaxIndex>
- </ rollingPolicy>
- <triggeringPolicy class =“ ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy”>
- <MaxFileSize> 2MB </ MaxFileSize>
- </ triggeringPolicy>
- </ appender>
- <logger name =“ LINSTOR / Controller” level =“ INFO” additivity =“ false”>
- <appender-ref ref =“ STDOUT” />
- <!-<appender-ref ref =“ FILE” />->
- </ logger>
- <logger name =“ LINSTOR / Satellite” level =“ INFO” additivity =“ false”>
- <appender-ref ref =“ STDOUT” />
- <!-<appender-ref ref =“ FILE” />->
- </ logger>
- <root level =“ WARN”>
- <appender-ref ref =“ STDOUT” />
- <!-<appender-ref ref =“ FILE” />->
- </ root>
</ configuration>
请参阅《Logback手册》以找到有关的更多详细信息logback.xml。
如果不使用上述任何一种配置方法,Linstor将默认为INFO日志级别。
5.15。安全卫星连接
LINSTOR可能在控制器和卫星连接之间使用SSL安全TCP连接。在不进一步讨论Java SSL引擎如何工作的详细信息的情况下,我们将使用keytoolJava运行时环境中的from Java运行时环境为您提供命令行摘要,以介绍如何使用安全连接配置3节点设置。节点设置如下所示:
节点alpha只是控制器。节点bravo和节点charlie只是卫星。
这是生成此类密钥库设置的命令,当然应该为您的环境编辑值。
#创建目录以保存密钥文件
mkdir -p / tmp / linstor-ssl
光盘/ tmp / linstor-ssl
mkdir alpha布拉沃·查理
#为所有节点创建私钥
keytool -keyalg rsa -keysize 2048 -genkey -keystore alpha / keystore.jks \
-storepass linstor -keypass linstor \
-alias alpha \
-dname“ CN = Max Mustermann,OU = alpha,O = Example,L = Vienna,ST = Austria,C = AT”
keytool -keyalg rsa -keysize 2048 -genkey -keystore bravo / keystore.jks \
-storepass linstor -keypass linstor \
-alias bravo \
-dname“ CN = Max Mustermann,OU = bravo,O = Example,L = Vienna,ST = Austria,C = AT”
keytool -keyalg rsa -keysize 2048 -genkey -keystore charlie / keystore.jks \
-storepass linstor -keypass linstor \
-alias charlie \
-dname“ CN = Max Mustermann,OU = charlie,O = Example,L = Vienna,ST = Austria,C = AT”
#导入alpha的信任库证书(需要所有卫星证书)
keytool -importkeystore \
-srcstorepass linstor -deststorepass linstor -keypass linstor \
-srckeystore bravo / keystore.jks -destkeystore alpha / certificates.jks
keytool -importkeystore \
-srcstorepass linstor -deststorepass linstor -keypass linstor \
-srckeystore charlie / keystore.jks -destkeystore alpha / certificates.jks
#将控制器证书导入卫星信任库
keytool -importkeystore \
-srcstorepass linstor -deststorepass linstor -keypass linstor \
-srckeystore alpha / keystore.jks -destkeystore bravo / certificates.jks
keytool -importkeystore \
-srcstorepass linstor -deststorepass linstor -keypass linstor \
-srckeystore alpha / keystore.jks -destkeystore charlie / certificates.jks
#现在将密钥库文件复制到其主机目标位置
ssh root @ alpha mkdir / etc / linstor / ssl
scp alpha / * root @ alpha:/ etc / linstor / ssl /
ssh root @ bravo mkdir / etc / linstor / ssl
scp bravo / * root @ bravo:/ etc / linstor / ssl /
ssh root @ charlie mkdir / etc / linstor / ssl
scp charlie / * root @ charlie:/ etc / linstor / ssl /
#生成卫星ssl配置条目
回声'[netcom]
type =“ ssl”
端口= 3367
server_certificate =“ ssl / keystore.jks”
trust_certificates =“ ssl / certificates.jks”
key_password =“ linstor”
keystore_password =“ linstor”
truststore_password =“ linstor”
ssl_protocol =“ TLSv1.2”
'| ssh root @ bravo“ cat> /etc/linstor/linstor_satellite.toml”
回声'[netcom]
type =“ ssl”
端口= 3367
server_certificate =“ ssl / keystore.jks”
trust_certificates =“ ssl / certificates.jks”
key_password =“ linstor”
keystore_password =“ linstor”
truststore_password =“ linstor”
ssl_protocol =“ TLSv1.2”
'| ssh root @ charlie“ cat> /etc/linstor/linstor_satellite.toml”
现在,只需启动控制器和卫星,并使用添加节点--communication-type SSL。
5.16。获得帮助
5.16.1。从命令行
在命令行上列出可用命令的快速方法是键入 linstor。
关于子命令(例如,列表节点)的更多信息可以通过两种方式检索:
#linstor节点列表-h
#linstor帮助节点列表
当以交互模式(linstor interactive)执行LINSTOR时,使用'help'子命令特别有用。
LINSTOR的最有用的功能之一就是其丰富的制表符完成功能,该功能可用于基本完成LINSTOR知道的每个对象(例如,节点名称,IP地址,资源名称等)。在以下示例中,我们显示了一些可能的完成及其结果:
#linstor节点创建alpha 1 <tab>#如果可以解析主机名,则完成IP地址
#linstor资源创建b <tab> c <tab>#linstor分配资源备份charlie
如果Tab-completion无法立即使用,请尝试获取适当的文件:
#源/etc/bash_completion.d/linstor#或
#源/ usr / share / bash_completion / completions / linstor
对于zsh shell用户,linstor-client可以生成一个zsh编译文件,该文件具有对命令和参数完成的基本支持。
#linstor gen-zsh-completer> / usr / share / zsh / functions / Completion / Linux / _linstor
5.16.2。来自社区
要获得社区的帮助,请订阅我们的邮件列表,网址为:https : //lists.linbit.com/listinfo/drbd-user
5.16.3。的GitHub
要提交错误或功能请求,请查看我们的GitHub页面https://github.com/linbit
5.16.4。有偿支持和发展
另外,如果您想购买远程安装服务,24/7支持,访问经过认证的存储库或进行功能开发,请与我们联系:+ 1-877-454-6248(1-877-4LINBIT),国际:+ 43-1 -8178292-0 | sales@linbit.com