基于drbd + ocfs2的小型Web集群的集群存储

我们将谈论的是:
如何基于drbd + ocfs2解决方案为两个服务器快速部署共享存储。

对谁有用:
本教程对系统管理员以及选择存储实现方法或想要尝试解决方案的任何人都是有用的。

我们拒绝了什么决定,为什么


通常,我们面临这样一种情况,我们需要在小型Web群集上实现具有良好读写性能的通用存储。 我们尝试了各种方法来为我们的项目实施一个通用存储库,但是几乎没有几个指标能使我们满意。 现在让我们解释一下原因。

  • Glusterfs的读写性能不适合我们,同时读取大量文件存在问题,CPU负载很高。 可以通过直接在模块中申请文件来解决读取文件的问题,但这并不总是适用的,并且通常是不正确的。

  • Ceph不喜欢过多的复杂性,这对于具有2-4个服务器的项目可能是有害的,尤其是在随后为项目提供服务的情况下。 同样,还有严重的性能限制,迫使您像glusterfs一样构建单独的存储集群。

  • 使用一台nfs服务器实现共享存储会引起容错问题。

  • s3是用于某些任务的极佳的流行解决方案,但它不是文件系统,因此缩小了范围。

  • lsyncd。 如果我们已经开始谈论“非文件系统”,那么值得尝试这种流行的解决方案。 它不仅不适合双向交换(但是如果您确实愿意,那么可以),它还不能在大量文件上稳定运行。 所有内容的一个不错的补充就是它是单线程的。 原因在于程序的体系结构:它使用inotify监视程序在启动和重新扫描期间挂起的工作对象。 Rsync用作传输介质。

教程:如何基于drbd + ocfs2部署共享存储


对我们来说最方便的解决方案之一是一堆ocfs2 + drbd 。 现在,我们将向您展示如何基于解决方案数据库为两个服务器快速部署共享存储。 但首先,要了解一些组件:

DRBD是标准的Linux存储系统,它允许在服务器块之间复制数据。 主要应用是构建容错存储。

OCFS2是一个文件系统,提供了多个系统共享使用同一存储的功能。 Linux发行版中包含一个内核模块和用于FS的用户空间工具。 OCFS2不仅可以在DRBD之上使用,而且可以在具有多个连接的iSCSI之上使用。 在我们的示例中,我们使用DRBD。

所有操作均以最小配置在ubuntu服务器18.04上执行。

步骤1.配置DRBD:

在文件/etc/drbd.d/drbd0.res中,我们描述了虚拟块设备/ dev / drbd0:

resource drbd0 { syncer { rate 1000M; } net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on drbd1 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.192:7789; } on drbd2 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.193:7789; } } 

内部元磁盘 -使用相同的块设备存储元数据
设备/ dev / drbd0-使用/ dev / drbd0作为drbd卷的路径。
磁盘/ dev / vdb1-使用/ dev / vdb1
同步器{速率1000M; } -使用千兆通道带宽
allow-two-primaries-一个重要的选项,允许接受两个主服务器上的更改
after-sb-0pri,after-sb-1pri,after-sb-2pri-当检测到裂脑时负责节点操作的选项。 有关更多详细信息,请参见文档。
都成为primary-on-将两个节点都设为primary。

在我们的案例中,我们有两个绝对相同的VM,专用的虚拟网络带宽为10吉比特。

在我们的示例中,两个群集节点的网络名称为drbd1和drbd2。 为了正确操作,必须映射/ etc / hosts中节点的名称和ip地址。

 10.10.10.192 drbd1 10.10.10.193 drbd2 

步骤2.配置节点:

在两台服务器上,我们执行:
 drbdadm create-md drbd0 

图片

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

我们得到以下内容:

图片

您可以开始同步。 在第一个节点上,您需要执行以下操作:
 drbdadm primary --force drbd0 

我们来看一下状态:
 cat /proc/drbd 

图片

很好,同步已经开始。 我们正在等待结尾,看图片:

图片

步骤3.在第二个音符上开始同步:

 drbdadm primary --force drbd0 

我们得到以下内容:

图片

现在我们可以从两台服务器写入drbd了。

步骤4.安装并配置ocfs2。

我们将使用相当简单的配置:

 cluster: node_count = 2 name = ocfs2cluster node: number = 1 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.192 name = drbd1 node: number = 2 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.193 name = drbd2 

它需要在两个节点上的/etc/ocfs2/cluster.conf中编写。

在任何节点上的drbd0上创建FS:
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

在这里,我们使用默认设置在drbd0上创建了一个标记为testVol的文件系统。

图片

必须在/ etc / default / o2cb中进行设置(如我们的配置文件中所示)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

并在每个节点上执行:
 o2cb register-cluster ocfs2cluster 

在那之后,打开并将我们需要的所有单元添加到启动中:
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

在安装过程中,其中一部分已经运行。

步骤5.将安装点添加到两个节点上的fstab中:

 /dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0 

必须预先创建/ media / shared目录。

在这里,我们使用noauto选项,这意味着将在启动时不挂载FS(我更喜欢通过systemd挂载网络FS),并且heartbeat = local,这意味着在每个节点上使用心跳服务。 还有一个全局心跳,它更适合大型集群。

接下来,您可以挂载/ media / shared并检查内容的同步。

做完了! 结果,我们获得了或多或少的容错存储,并具有可扩展性和良好的性能。

Source: https://habr.com/ru/post/zh-CN445612/


All Articles