如何使用影子迁移将数据迁移到 Oracle Solaris 11

作者:Dominic Kay

数据迁移是 Oracle Solaris 11 采用策略的一个基本组成元素。本文介绍影子迁移,该技术可将大量数据从一个文件系统移至另一个文件系统,同时数据保持联机且允许用户访问。


2012 年 10 月发布

随着 Oracle Solaris 11 的问世,默认情况下,所有数据均存储在 ZFS 文件系统中。ZFS 也支持其他大部分 Oracle Solaris 11 功能,如引导、根文件系统、升级和更新。

OTN 旨在帮助您充分了解 Oracle 技术,以作出明智决策。本网站提供文章、软件下载、文档等。立即加入,获取完成工作所需的技术资源。

从数据管理的角度看,可针对迁移数据至 ZFS 提出强有力的证据,尤其是在云中所需的数据管理的可扩展性和易用性以及大量可用的免费数据服务方面,如加密、压缩、重复数据删除、快照和远程复制。这些服务以及一定规模的 Oracle Solaris 11 高可用性和性能,是在该平台上进行整合的强烈诱因。

虽然 UFS 文件系统在 Oracle Solaris 11(作为根文件系统)中仍可用,但 ZFS 却是首选的存储机制,相比于 UFS,能够提供更高的可靠性和更强大的功能。

关于影子迁移

影子迁移使您能将数据从旧文件系统迁移到 ZFS 文件系统,同时在此过程中允许访问和修改数据。您可以使用影子迁移将本地或远程文件系统迁移到本地文件系统。具体而言,可以从 Oracle Solaris 11 主机上直接挂载的任意文件系统(UFS、ZFS、VxFS 等)迁移数据,也可以从可设为“只读”并能通过 NFS 挂载到 Oracle Solaris 11 主机上的任意远程文件系统迁移数据。这可延伸到 NetApp 等文件管理系统以及 AIX、HP-UX 和 Linux 等操作系统。

影子迁移的使用案例不仅仅是将数据移至 Oracle Solaris 11。当您要启用 ZFS 服务 — 如压缩、重复数据删除和加密 — 而需要进行数据转换时,在服务器的现有文件系统与新文件系统(随后重新命名)之间进行影子迁移可能是实现数据转换的最佳方法。

以下是影子迁移的主要设计要求:

  • 必须能够根据标准数据协议 (NFS) 从任意数据源进行迁移,源系统无需运行特殊软件。
  • 在完成整个迁移过程之前,迁移数据必须可用,并能提供原生的访问性能。
  • 要迁移文件系统的所有数据必须存储在该文件系统本身内,且不依赖于外部数据库,以确保一致性。(有关设计和实施详情,请参见“另请参见”部分中的参考内容。)

示例

下面快速演示影子迁移,您可以自行尝试。本示例从本地文件系统迁移数据。但是,原理同样适用于挂载在 NFS 上的远程文件系统。管理手册中提供了远程文件系统的语法(请参见“另请参见”部分)。

首先,创建要迁移的文件系统

root@solaris:~# zpool create oldstuff c3t4d0 
root@solaris:~# zfs create oldstuff/forgotten 

然后,填充一些文件:

root@solaris:~# cd /var/adm 
root@solaris:/var/adm# find . -print | cpio -pdv /oldstuff/forgotten

需要安装 shadow-migration 软件包,如清单 1 所示:

root@solaris:~# pkg install shadow-migration
           Packages to install:  1
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  1/1       14/14      0.2/0.2

PHASE                                        ACTIONS
Install Phase                                  39/39

PHASE                                          ITEMS
Package State Update Phase                       1/1 
Image State Update Phase                         2/2 

清单 1. 安装 shadow-migration 软件包

然后,启用 shadowd 服务:

root@solaris:~# svcadm enable shadowd
root@solaris:~# svcs shadowd 
STATE        STIME     FMRI
online       7:16:09   svc:/system/filesystem/shadowd:default

将要迁移的文件系统设为只读:

root@solaris:~# zfs set readonly=on oldstuff/forgotten

创建一个新的 ZFS 文件系统,将 shadow 属性设为要迁移的文件系统:

root@solaris:~# zfs create -o shadow=file:///oldstuff/forgotten   mypool/remembered 

shadowstat (1M) 命令查看迁移进度,如清单 2 所示:

root@solaris:~# shadowstat 
                                EST
                        BYTES   BYTES           ELAPSED
DATASET                 XFRD    LEFT    ERRORS  TIME
mypool/remembered       92.5M   -       -       00:00:59
mypool/remembered       99.1M   302M    -       00:01:09
mypool/remembered       109M    260M    -       00:01:19
mypool/remembered       133M    304M    -       00:01:29
mypool/remembered       149M    339M    -       00:01:39
mypool/remembered       156M    86.4M   -       00:01:49
mypool/remembered       156M    8E      -               (completed)

清单 2. 查看迁移进度

如上所述,如果您已创建 /mypool/remembered 并加密,这将是对现有数据进行加密的首选方法。现有数据的压缩或重复数据删除也是如此。

测试和注意事项

生产数据的迁移需要在实时迁移之前进行备份和全面的测试。特别要注意以下事项:

  • 客户端将通过不同的物理位置访问数据。完善名称服务和网络地址,这样客户端不会因为尝试修改设为只读的“旧”数据而返回错误。
  • 需要迁移用于身份验证的名称服务条目(控制所有权等的用户和组名称),数据也需要迁移。
  • 当“旧”数据集和“新”数据集可能需要备份时,将会有一个过渡阶段。
  • 需要特别注意元数据和设置,尤其是在从非 ZFS 迁移到 ZFS 的时候。尤其需要测试访问控制列表 (ACL)、扩展属性和类似设置。
  • 影子迁移以一对一的方式将数据从一个文件系统移至另一个文件系统。将多个文件系统整合到较少文件系统应作为迁移过程中的一个独立阶段来完成。

性能

影子迁移特性的性能取决于以下各项:

  • 数据性质(小文件天生比大文件慢)
  • 客户端访问新数据的模式
  • 源系统和目标系统的相关磁盘配置
  • 网络媒体的吞吐量和延迟情况

影子迁移的设计目标是弱化转换性能对客户端的重要性,重要的是客户端能继续快速访问所需的数据。但是,如果旧媒体和新媒体之间的转换的原始性能本身很重要,您可能不想使用影子迁移,因为它被设计为无缝且“不可见”,但本身不快。

另请参见

Eric Schrock 在博客中介绍了影子迁移的动机和设计以及工程内部机制。影子迁移的正规处理方法包含在 Oracle Solaris 管理:ZFS 文件系统 手册中。

下面是其他一些资源:

关于作者

Dominic Kay 是 Oracle Solaris 的首席产品经理,专注于 Oracle Solaris 数据管理技术。Dominic 于 2010 年随着 Oracle 收购 Sun Microsystems 而加入 Oracle。

修订版 1.0,2012 年 10 月 22 日

facebook 横幅广告 twitter 横幅广告