欢迎使用+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/