QEMU+OCFS2: 使用 OCFS2 作为虚拟机磁盘文件的 SAN 存储文件系统

2021-12-28 17:08:07 +08:00
 Cloudpods

欢迎使用+star ,GItHub: https://github.com/yunionio/cloudpods

OCFS2 是 Oracle Cluster File System Version 2 的缩写,是 Oracle 公司内部开发的共享磁盘文件系统,于 2011 年开源,使用 GNU GPL 协议。

QEMU 通过 OCFS2 使用共享 SAN 存储

QEMU 使用共享 SAN 存储有多种方案。常见方案是在需要新建虚拟机磁盘时,使用 SAN 存储的管理 API ,分配出卷( LUN )之后,直接将卷挂载给 QEMU 虚拟机使用。这种方案的优点是 QEMU 虚拟机直接访问 LUN ,损耗低,性能好。而缺点是需要使用存储设备特定的 API ,和设备绑定,不够通用。

本文介绍通过 OCFS2 共享磁盘文件系统,将一个大容量的 SAN 存储卷作为存储 QEMU 虚拟机虚拟磁盘文件的存储,达到 QEMU 使用共享储存的目的。

OCFS2 文件系统的配置

这一步安装和配置软件

$ wget http://public-yum.oracle.com/public-yum-ol7.repo -O /etc/yum.repos.d/public-yum-ol7.repo
$ rpm --import http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7
$ yum install yum-plugin-downloadonly -y
$ mkdir /tmp/ocfs2 && cd /tmp/ocfs2/
$ yum install --downloadonly --downloaddir=/tmp/ocfs2/ ocfs2-tools net-tools -y

具体操作步骤见官方文档:
https://docs.oracle.com/cd/E52668_01/E54669/E54669.pdf, Chapter 23 Oracle Cluster File System Version 2

由于 OCFS2 使用场景较少,在常见发行版的内核中都不会启用 OCFS2 的内核模块。我们提供了预先编译好的启用了 OCFS2 的内核安装包:

$ yum install -y yum-utils
# 添加 yunion Cloudpods rpm 源
$ yum-config-manager --add-repo https://iso.yunion.cn/yumrepo-3.6/yunion.repo
$ yum install -y kernel-3.10.0-1062.4.3.el7.yn20191203

同时,部署时写配置文件到 /etc/modules-load.d/ocfs2.conf ,确保内核的 ocfs2 模块自动加载

# Load ocfs2.ko at boot
ocfs2

安装内核后需要重启生效,重启后检查新的内核已经生效

$ uname -r
3.10.0-1062.4.3.el7.yn20191203.x86_64

OCFS2 配置简单,只需要在每个要挂载 OCFS2 的节点上都配置相同的配置文件,申明成员节点即可。\

以下为示例配置文件:

$ cat /etc/ocfs2/cluster.conf 
cluster:
        node_count = 3            <== 集群节点数目
        name = ocfs2              <== 集群名字

node:
        ip_port = 7777
        ip_address = 192.168.7.10
        number = 0                <== 节点编号
        name = client01           <== 节点名字
        cluster = ocfs2
node:
        ip_port = 7777
        ip_address = 192.168.7.11
        number = 1
        name = client02
        cluster = ocfs2
node:
        ip_port = 7777
        ip_address = 192.168.7.12
        number = 2
        name = client03


        cluster = ocfs2
$ o2cb.init configure      第一项选 yes ,集群名称填上面配置文件里的,默认是 ocfs2
systemctl enable o2cb ocfs2

至此,OCFS2 的软件和配置完成,下一步将格式化磁盘,挂载 OCFS2 文件系统

这一步使用 OCFS2 格式化网络共享磁盘,并且挂载到各台宿主机上。

在此之前可能要配置 SAN 存储的多路径 multipath(由于行文原因,细节在此省略),在此之后使用 parted 分区,格式化成 ocfs2 (只在一台机器分区格式化,其他机器 partprobe 就能看到格式化后的分区)并挂载到多台机器。 以下命令在第一个节点执行:

# 查看多路径 multipath 磁盘情况
$ multipath -l

使用 mkfs.ocfs2 格式化分区

$ parted /dev/dm-0
$ mkfs.ocfs2 /dev/dm-1
$ mount /dev/dm-1 /data

持久化磁盘挂载到 /etc/fstab

# /etc/fstab
/dev/dm-1  /opt/cloud/workspace/disks  ocfs2     _netdev,defaults  0 0

在其他节点,则只需要执行 partprobe 探测分区变化,并且挂载分区。也应该修改 /etc/fstab ,持久化分区的挂载。

篇幅所限,查看全文: https://www.cloudpods.org/zh/blog/2021/07/02/ocfs2-as-san-filesystem/

GItHub: https://github.com/yunionio/cloudpods

2268 次点击
所在节点    推广
3 条回复
julyclyde
2021-12-29 12:45:01 +08:00
所以,这个和 qemu 有啥关系?
Cloudpods
2021-12-29 15:32:24 +08:00
julyclyde
2021-12-29 15:34:36 +08:00
@Cloudpods 好的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824928

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX