如何整合 Oracle ZFS 存储设备上的区域存储

作者:Detlef Drewanz 和 Cindy Swearingen

本文介绍如何在基于 iSCSI 的共享存储上配置 Oracle Solaris 区域以减少 iSCSI 设备所需的管理,并整合 Oracle ZFS 存储设备上的区域基础架构。


2014 年 6 月发布


想对本文发表评论吗?请将链接发布在 Facebook 的 OTN Garage 页面上。有类似文章要分享?请将其发布在 Facebook 或 Twitter 上,我们来进行讨论。
目录
关于共享存储上的区域
组件、流程和架构概述
创建 ISCSI 目标并导出 LU
在第一个 Oracle Solaris 系统上创建并安装区域
分离区域并将其迁移到第二个 Oracle Solaris 系统
向 iSCSI 存储配置添加多路径
控制 iSCSI LU 和目标发现
(可选)使用 ZFS 加密文件系统
另请参见
关于作者

关于共享存储上的区域

Oracle Solaris 11 中引入的共享存储上的区域 (ZOSS) 特性具有以下优点:

  • 基于灵活的 FC、iSCSI 或 SAS 协议在共享存储上托管区域安装和数据可简化存储管理
  • 提供简单的 ZFS 配置:

    • 每个区域一个 rpool (<zonename>_rpool)
    • 数据池 (<zonename>_<zpool>)
  • 使用标准区域命令行界面和存储设置功能:

    • 执行基本区域配置 (zonecfg)
    • 识别存储组件 (suriadm)
    • 创建、导入和导出池 (zoneadm)
  • 使用标准命令行界面分离和附加区域 (zoneadm),可在系统之间轻松迁移区域
  • 使用 iSCSI 启动器组和质询握手身份验证协议 (CHAP) 控制 iSCSI 逻辑单元和目标的发现
  • 使用 ZFS 加密保护存储和数据路径(可选)

组件、流程和架构概述

除了一个 Oracle Solaris 区域外,本文所述配置还包括以下内容:

  • 使用 iSCSI 协议,这是一种 IP 网络上基于块的存储协议。
  • 逻辑单元 (LU) 是由逻辑单元 ID 标识的编号存储组件。
  • iSCSI 启动器 是向 iSCSI 目标发起 iSCSI 请求的客户端(驱动程序)。在本文中,两个 Oracle Solaris 系统是启动器。
  • Oracle ZFS 存储设备托管的 iSCSI 目标 是接收 iSCSI 请求的存储组件。

基本配置步骤如下:

  • 在 Oracle ZFS 存储设备上创建一个 iSCSI 目标并导出 LU。
  • 在第一个 Oracle Solaris 系统上创建并安装一个 Oracle Saris 区域。
  • 分离该 Oracle Solaris 区域并将其迁移到第二个 Oracle Solaris 系统。
  • 启用 iSCSI 多路径。
  • 控制 iSCSI LU 和目标发现。
  • (可选)通过手动创建加密区域 rpool,保护区域的 ZFS 数据。

本文下面几节演示如何在 Oracle ZFS 存储设备 (zfssa) 托管的 iSCSI 设备上配置 Oracle Solaris 区域 (zoss-zone),然后将该区域从一个 Oracle Solaris 系统 (hostA) 迁移到另一个 Oracle Solaris 系统 (hostB)。图 1 显示了其架构:

图 1. 架构图

图 1. 架构图

创建 ISCSI 目标并导出 LU

在 Oracle ZFS 存储设备上执行以下步骤。

  1. 创建 iSCSI 目标,如图 2 所示:

    1. 选择 Configuration->SAN->iSCSI
    2. 单击 Targets 旁边的 +(加号)。
    3. Alias 域中指定区域名称 (zoss-zone),创建一个 iSCSI 目标。
    4. Network interfaces 列表中选择网络接口。

      图 2. 创建 iSCSI 目标

      图 2. 创建 iSCSI 目标

  2. 创建并导出 iSCSI LUN,如图 3 所示:

    1. 选择 Configuration->Shares->LUNs,然后单击 LUNs 旁边的 +(加号)。
    2. 填写 Create LUN 屏幕内容,创建并导出 LUN:

      • Project:default
      • Namezoss-zone-rpool-primary
      • Volume size:10 G
      • Volume block size:8K
      • Target group:All targets
      • Initiator group(s):All initiators
      • LU number:Auto-assign
    3. 单击 Apply

      图 3. 创建并导出 iSCSI LU

      图 3. 创建并导出 iSCSI LU

在第一个 Oracle Solaris 系统上创建并安装区域

本节介绍如何在第一个 Oracle Solaris 系统 (hostA) 上创建并安装区域。

  1. 运行以下命令,创建一个名为 zoss-zone 的 Oracle Solaris 区域:

    :运行 add storage 命令时,指定图 3 所示的 LU GUID 作为存储标识符。

    root@hostA:~# zonecfg -z zoss-zone
    zonecfg:zoss-zone> create
    zonecfg:zoss-zone> set zonepath=/zones/zoss-zone
    zonecfg:zoss-zone> add rootzpool
    zonecfg:zoss-zone:rootzpool> add storage \
    iscsi://192.168.202.10/luname.naa.600144F0949056290000529625DD001
    zonecfg:zoss-zone:rootzpool> end
    zonecfg:zoss-zone> commit
    zonecfg:zoss-zone> exit
    
  2. 安装区域:

    安装区域将完成以下任务:

    • 配置 iSCSI 启动器
    • 发现 iSCSI 目标和 LU
    • 创建逻辑设备链接
    • 创建区域 rpool
    root@hostA:~# zoneadm -z zoss-zone install
    Configured zone storage resource(s) from:
    iscsi://192.168.202.10/luname.naa.600144F0949056290000529625DD0001
    Created zone zpool: zoss-zone_rpool
    

分离区域并将其迁移到第二个 Oracle Solaris 系统

本节介绍如何从 hostA 分离区域并将其迁移到第二个 Oracle Solaris 系统 (hostB)。

  1. 关闭并分离区域:

    root@hostA:~# zoneadm -z zoss-zone shutdown
    root@hostA:~# zoneadm -z zoss-zone detach
    Exported zone zpool: zoss-zone_rpool
    Unconfigured zone storage resource(s) from:
    iscsi://192.168.202.10/luname.naa.600144F0949056290000529625DD0001
    
  2. 将区域配置从 hostA 传输到 hostB

    admin@hostA:~$ zonecfg -z zoss-zone export | ssh hostB 'cat - > /home/admin/zonecfg.zfg' 
    root@hostB:~# zonecfg -z zoss-zone -f /home/admin/zonecfg.zfg
    
  3. 将区域附加到 hostB

    附加区域将完成以下任务:

    • 配置 iSCSI 启动器
    • 发现 iSCSI 目标和 LU
    • 创建逻辑设备链接
    root@hostB:~# zoneadm -z zoss-zone attach
    

向 iSCSI 存储配置添加多路径

无需对前面各节建立的基本配置进行任何额外的更改。但是,考虑添加多路径可额外获得以下好处:

  • 能够将专用 NIC 和网络链路用于 iSCSI 流量
  • 能够将 iSCSI 目标连接到多个网络
  • 能够将 LU 发现仅限于一个专用的 iSCSI 目标组

图 4 显示本节所述的多路径配置:

图 4. 多路径配置

图 4. 多路径配置

  1. 将 iSCSI 目标分配给 Oracle ZFS 存储设备上的多个 NIC:

    1. 选择 Configuration->SAN,创建一个名为 zoss-zone 的目标组。

      • 选择 LU 并将其拖到 Target Groups 框上。
      • 单击 edit 按钮。
      • 添加 zoss-zone 名称。
    2. 将多个网络接口分配到该目标组:

      • 选择 LU 目标。
      • 选择网络接口。
  2. 将 LU 发现仅限于 Oracle ZFS 存储设备上的 zoss-zone 目标组,如图 5 所示:

    1. 选择 Configuration->Shares,然后选择 zoss-zone LU。
    2. 单击 edit 按钮。
    3. 单击 Protocols 选项卡。
    4. 选择 zoss-zone 目标组。

      图 5. 限制 LU 发现

      图 5. 限制 LU 发现

  3. 在第一个 Oracle Solaris 启动器 (hostA) 上配置专用 iSCSI 网络链路。

    如果为 Oracle ZFS 存储设备配置了多个地址,将自动配置多个发现地址。

    root@hostA:~# cat /etc/hosts | grep zfssa
    192.168.202.10	zfssa-iscsi
    192.168.203.10	zfssa-iscsi
    root@hostA:~# zonecfg -z zoss-zone info rootzpool
    rootzpool:
           storage: iscsi://zfssa-iscsi/luname.naa.600144F0949056290000529625DD0001
    root@hostA:~# ipadm create-ip net1
    root@hostA:~# ipadm create-ip net2
    root@hostA:~# ipadm create-addr -T static -a 192.168.202.7 net1/iscsi202
    root@hostA:~# ipadm create-addr -T static -a 192.168.203.7 net2/iscsi203
    root@cantaloup:~# iscsiadm modify discovery -t enable
    root@cantaloup:~# iscsiadm list discovery-address
    Discovery Address: 192.168.202.7:3260
    Discovery Address: 192.168.203.7:3260
    
  4. 列出 Oracle Solaris 启动器上禁用多路径(通过 stmsboot -d -D iscsi)的目标。
    root@hostA:~# iscsiadm list target -S
    
    Target: iqn.1986-03.com.sun:02:12c5dc60-1854-62c4-8f61-aa78d0815dc2
        Alias: zoss-zone
        TPGT: 3
        ISID: 4000002a0000
        Connections: 1
        LUN: 0
             Vendor:  SUN     
             Product: Sun Storage 7000
             OS Device Name: /dev/rdsk/c1t6d0s2
    
    Target: iqn.1986-03.com.sun:02:12c5dc60-1854-62c4-8f61-aa78d0815dc2
        Alias: zoss-zone
        TPGT: 2
        ISID: 4000002a0000
        Connections: 1
        LUN: 0
             Vendor:  SUN     
             Product: Sun Storage 7000
             OS Device Name: /dev/rdsk/c1t3d0s2
    
  5. 启用 iSCSI 多路径并列出 Oracle Solaris 启动器上的 iSCSI 目标:

    root@hostA:~# stmsboot -e -D iscsi
    root@hostA:~# iscsiadm list target -S
    
    Target: iqn.1986-03.com.sun:02:12c5dc60-1854-62c4-8f61-aa78d0815dc2
        Alias: zoss-zone
        TPGT: 3
        ISID: 4000002a0000
        Connections: 1
        LUN: 0
             Vendor:  SUN     
             Product: Sun Storage 7000
             OS Device Name: /dev/rdsk/c0t600144F0949056290000529625DD0001d0s2
    
    Target: iqn.1986-03.com.sun:02:12c5dc60-1854-62c4-8f61-aa78d0815dc2
        Alias: zoss-zone
        TPGT: 2
        ISID: 4000002a0000
        Connections: 1
        LUN: 0
             Vendor:  SUN     
             Product: Sun Storage 7000
             OS Device Name: /dev/rdsk/c0t600144F0949056290000529625DD0001d0s2
    

控制 iSCSI LU 和目标发现

您可以控制 iSCSI 目标或 LU 的发现。如果目标或 LU 未发现,它不可见且不可访问。

要控制 LU 发现,请将 LU 分配到启动器组,然后指定允许哪个启动器组发现该 LU。要控制目标发现,请启用单向 CHAP 控制允许哪些启动器发现目标。

  1. 识别第一个 Oracle Solaris 启动器上的 iSCSI 限定名称 (IQN):
    root@hostA:~# iscsiadm list initiator-node
    Initiator node name: iqn.1986-03.com.sun:01:e00000000000.5295332b
    
  2. 在 Oracle ZFS 存储设备上,通过将允许的启动器拖入新启动器组可创建一个启动器组,然后将该启动器组分配给该 LU,如图 6 所示。

    1. 选择该启动器并将其拖到新启动器组 zoss-zone-hosts
    2. 选择 Configuration->Shares,然后选择 zoss-zone 目标 LU。
    3. 单击 edit 按钮。
    4. 单击 Protocols 选项卡。
    5. 单击 Initiator 组旁边的 edit 按钮,选择 zoss-zone-hosts 启动器组。

      图 6. 创建启动器组

      图 6. 创建启动器组

  3. 在第一个 Oracle Solaris 启动器上启用单向 CHAP:

    root@hostA:~# iscsiadm modify initiator-node --authentication CHAP
    root@hostA:~# iscsiadm modify initiator-node --CHAP-secret
    Enter secret: ************
    Re-enter secret: ************
    
    root@hostA:~# iscsiadm list initiator-node
    Initiator node name: iqn.1986-03.com.sun:01:e00000000000.5295332b
    Initiator node alias: hostA
        Authentication Type: CHAP
        CHAP Name: iqn.1986-03.com.sun:01:e00000000000.5295332b
    
  4. 在 Oracle ZFS 存储设备上,启用启动器和目标的 CHAP,如图 7 所示:

    1. 选择 Configuration->SAN->Initiators,然后选择启动器并单击 edit 按钮。
    2. 单击 Use CHAP 按钮。
    3. 输入 CHAP 名称,即 IQN。
    4. 输入 CHAP 密码。
    5. 选择 Configuration->SAN->Targets,然后选择目标并单击 edit 按钮。
    6. 对于 Initiator authentication node,选择 CHAP 选项。

      图 7. 启用 CHAP

      图 7. 启用 CHAP

  5. 在第一个 Oracle Solaris 启动器上禁用发现,然后重新启用发现:

    root@hostA:~# iscsiadm modify discovery -t disable
    root@hostA:~# iscsiadm modify discovery -t enable
    

(可选)使用 ZFS 加密文件系统

创建 ZFS 文件系统或卷时启用 ZFS 加密,可以保护存储和数据路径。为此,选择一个封装密钥;密钥可以来自提示符、文件、HTTPS 或 PKCS#1。系统将选择随机加密密钥。

在以下步骤中,因为 ZOSS 框架只创建未加密的数据集,需要重新创建 zoss-zone rpool。重新创建 rpool 之后,ZOSS 会找到并使用重新创建的 rpool。

  1. 识别现有 zoss-zone rootzpool 设备的 iSCSI 设备:

    root@hostA:~# zonecfg -z zoss-zone info rootzpool
    rootzpool:
        storage: iscsi://zfssa-iscsi/luname.naa.600144F0949056290000529625DD0001
    
  2. 识别与映射设备名对应的区域 iSCSI 设备:

    root@hostA:~# suriadm map iscsi://zfssa-iscsi/luname.naa.600144F0949056290000529625DD0001
    PROPERTY     VALUE
    mapped-dev   /dev/dsk/c0t600144F0949056290000529625DD0001d0s0
    
  3. 使用 pktool 命令生成 AES256 加密密钥,据此创建区域 rpool (zoss-zone_rpool) 的加密密钥:

    root@hostA:~# pktool genkey keystore=file outkey=/etc/zones/zoss-zonekey.file keytype=aes keylen=256
    root@hostA:~# chmod 600 /etc/zones/zoss-zonekey.file  
    
  4. 创建区域的 rpool (zoss-zone_rpool) 并指定应加密顶层池文件系统。同时指定加密密钥文件和第 2 步中映射的设备:

    root@hostA:~# zpool create -m /zones/zoss-zone -O encryption=on 
    -O keysource=raw,file:///etc/zones/zoss-zonekey.file zoss-zone_rpool  c0t600144F0949056290000529625DD0001d0
    
  5. 导出 zoss-zone rpool 并重新安装 zoss-zone:

    root@hostA:~# zpool export zoss-zone_rpool
    root@hostA:~# zoneadm -z zoss-zone install 
    

另请参见

关于作者

Detlef Drewanz 是德国 Oracle 系统销售咨询团队的首席销售顾问大师。他是 Oracle Solaris 和虚拟化专家。

Cindy Swearingen 是一名 Oracle Solaris 产品经理,擅长 ZFS 和存储特性。

修订版 1.0,2014 年 6 月 18 日

关注我们:
博客 | Facebook | Twitter | YouTube