V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cloudpods
V2EX  ›  推广

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

  •  
  •   Cloudpods · 2021-12-28 17:08:07 +08:00 · 2375 次点击
    这是一个创建于 1068 天前的主题,其中的信息可能已经有所发展或是发生改变。

    欢迎使用+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 文件系统的配置

    • 准备环境

    这一步安装和配置软件

    • 下载和安装 ocfs2-tools 的 rpm 包安装(也依赖 net-tools )

    $ 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

    • 安装 Cloudpods 内核,自带编译了 ocfs2 文件系统的内核模块

    由于 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 配置简单,只需要在每个要挂载 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
    
    • 初始化 ocfs2 的配置

    $ o2cb.init configure      第一项选 yes ,集群名称填上面配置文件里的,默认是 ocfs2
    
    • 确保 o2cb ocfs2 服务启动并设置为开机自启

    systemctl enable o2cb ocfs2
    

    至此,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

    3 条回复    2021-12-29 15:34:36 +08:00
    julyclyde
        1
    julyclyde  
       2021-12-29 12:45:01 +08:00
    所以,这个和 qemu 有啥关系?
    Cloudpods
        2
    Cloudpods  
    OP
       2021-12-29 15:32:24 +08:00
    julyclyde
        3
    julyclyde  
       2021-12-29 15:34:36 +08:00
    @Cloudpods 好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:12 · PVG 05:12 · LAX 13:12 · JFK 16:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.