我们将讨论什么:
如何基于drbd+ocfs2方案快速部署两台服务器共享存储。
对谁有用:
本教程对于系统管理员和任何选择存储实现方法或想要尝试该解决方案的人都非常有用。
我们拒绝了哪些决定以及为什么?
我们常常面临这样的情况,需要在小型Web集群上实现具有良好读写性能的共享存储。 我们尝试了各种方案来为我们的项目实施共享存储,但很少有人能够同时满足我们的多个指标。 现在我们将告诉你原因。
- Glusterfs的读写性能并没有让我们满意;同时读取大量文件存在问题,CPU负载较高。读取文件的问题可以通过直接从brick访问文件来解决,但这并不总是适用,而且通常是不正确的。
- 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; } — 使用千兆位通道带宽
允许二选 - 一个重要的选项,允许在两个主服务器上接受更改
after-sb-0pri、after-sb-1pri、after-sb-2pri — 检测到裂脑时负责节点操作的选项。 更多详细信息可以在文档中找到。
成为两者的主要 — 将两个节点设置为主节点。
在我们的例子中,我们有两个完全相同的虚拟机,具有吞吐量为 10 GB 的专用虚拟网络。
在我们的示例中,两个集群节点的网络名称为 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
目录 /媒体/共享 它必须提前创建。
这里我们使用noauto选项,这意味着启动时不会挂载该文件(我更喜欢通过systemd挂载网络文件)和heartbeat=local,这意味着在每个节点上使用心跳服务。 还有全局心跳,比较适合大型集群。
接下来就可以挂载了 /媒体/共享 并检查内容同步。
完成! 因此,我们或多或少获得了具有可扩展性和良好性能的容错存储。
来源: habr.com