文章
服务器与存储管理
作者:Jeff Victor
2013 年 1 月发布(转载自 Jeff Victor 的博客)
Oracle Solaris 11.1 有几个新特性。oracle.com 上提供了详细清单。
|
其中一个重要的新特性,也是与 Oracle Solaris 区域有关的最重要的新特性,俗称“共享存储上的区域”,简称为 ZOSS(与“moss”押韵)。ZOSS 提供了更高的灵活性,因为您可以在共享存储上存储 Oracle Solaris 区域(真是一个惊喜!),这样就可以快速、轻松地将区域从一个系统迁移到另一个系统。本文介绍并演示 ZOSS 的使用。
ZOSS 为“共享存储”上存储的 Oracle Solaris 区域提供全面的支持。在这种情况下,“共享存储”指的是光纤通道 (FC) 或 iSCSI 设备,但是还有一个特例,我稍后会介绍到。其主要目的是让您能够将区域存储在 FC 或 iSCSI 存储上,这样就可以将区域从一台主机迁移到另一台主机上,远比过去更轻松、更安全。
在本文中,我想进行一些简化,以便您自行尝试。我不能假定您已经有可用的 SAN(这当然很好),因为我也没有!那用什么来替代呢?[又来预示了……-编者]撰写本文的过程再次验证了 Oracle VM VirtualBox 可以解决每个实验室问题,它在本文的多个方面提供了重要帮助。它支持在主流系统(如 Microsoft Windows、Mac OS、Oracle Solaris、Oracle Linux 和其他版本的 Linux)上轻松安装多个 Oracle Solaris 来宾操作系统。它还支持创建一个单独的虚拟磁盘驱动器 (VDI),对来宾操作系统显示为本地硬盘。这个虚拟磁盘可以非常轻松地从一个来宾操作系统移至另一个来宾操作系统。换句话说,您可以在一台笔记本电脑上或一台较大型 x86 系统上完成以下步骤。
请注意,对实验室环境来说,能够使用 ZOSS 将区域存储在本地磁盘上是非常有用的,但对于生产环境来说,就没那么有效了。建议不要经常在计算机间移动磁盘驱动器。
在下述方法中,虚拟硬盘将包含将在(虚拟)主机间迁移的区域。在生产环境中,将使用 FC 或 iSCSI LUN 代替。zonecfg(1M) 手册页详细介绍了这三种设备的语法。
虚拟服务器的迁移为何如此重要?以下是一些最常见的原因:
ZOSS 的重要新概念是 rootzpool。可以查阅手册页 zonecfg(1M),以下是其简化版本:它是一种后备存储(硬盘或 LUN),将用于建立一个 ZFS zpool 来容纳区域。此 zpool
这里简要概述在共享存储上创建和迁移区域的步骤。下一节将介绍详细的命令和输出。
zonecfg export 输出复制到另一个系统,用作 zonecfg 的输入。此方法减少了测试出错的几率。(创建区域之前,没有必要在两个系统上都配置区域。您可以随时在多个地方配置此区域,随时将其迁移到其中一处 — 只要这些系统都可以访问该共享存储。)至此,该区域可以正常使用,甚至可以迁移回去或者迁移到另外一个系统。
本文其余部分将介绍这些命令及其输出。两个主机名为 sysA 和 sysB。
注:每个 Oracle Solaris 来宾操作系统可能对其共享的 VDI 使用不同的设备名。我使用如下所示的设备名,但您必须在启动每个来宾操作系统之后发现实际的设备名。在生产环境中,也要先发现设备名,然后再使用该名称配置区域。幸运的是,可以使用命令 zpool import 或 format 发现区域的“新”主机上的设备。
首先要创建 Oracle VM VirtualBox 来宾操作系统和共享磁盘驱动器。在此只介绍这些步骤,并不演示。
pkg install solaris-desktop,等待系统安装这些重要组件。在下面的示例中,我们进行以下假设:
sysA。sysB。sysA 上,共享磁盘名为 /dev/dsk/c7t2d0。sysB 上,共享磁盘名为 /dev/dsk/c7t3d0。第 1 步)确定将在系统间来回移动的磁盘的名称,如清单 1 所示。
root@sysA:~# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c7t0d0
/pci@0,0/pci8086,2829@d/disk@0,0
1. c7t2d0
/pci@0,0/pci8086,2829@d/disk@2,0
Specify disk (enter its number): ^D
清单 1. 确定磁盘名称
第 2 步)首先要对磁盘进行分区和标记,如清单 2 所示。写 EFI 标签所需的技巧并不太复杂。
root@sysA:~# format -e c7t2d0 selecting c7t2d0 [disk formatted] FORMAT MENU: ... format> fdisk No fdisk table exists. The default partition for the disk is: a 100% "SOLARIS System" partition Type "y" to accept the default partition, otherwise type "n" to edit the partition table. n SELECT ONE OF THE FOLLOWING: ... Enter Selection: 1 ... G=EFI_SYS 0=Exit? f SELECT ONE... ... 6 format> label ... Specify Label type[1]: 1 Ready to label disk, continue? y format> quit root@sysA:~# ls /dev/dsk/c7t2d0 /dev/dsk/c7t2d0
清单 2. 磁盘分区和标记
第 3 步)在 sysA 上配置 zone1,如清单 3 所示。
root@sysA:~# zonecfg -z zone1
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
create: Using system default template 'SYSdefault'
zonecfg:zone1> set zonename=zone1
zonecfg:zone1> set zonepath=/zones/zone1
zonecfg:zone1> add rootzpool
zonecfg:zone1:rootzpool> add storage dev:dsk/c7t2d0
zonecfg:zone1:rootzpool> end
zonecfg:zone1> exit
root@sysA:~# zonecfg -z zone1 info
zonename: zone1
zonepath: /zones/zone1
brand: solaris
autoboot: false
bootargs:
file-mac-profile:
pool:
limitpriv:
scheduling-class:
ip-type: exclusive
hostid:
fs-allowed:
anet:
...
rootzpool:
storage: dev:dsk/c7t2d0
清单 3. 在 sysA 上配置 zone1
第 4 步)安装区域,如清单 4 所示。此步骤用时最长,您可以离开去吃些点心或跑上几圈,两者都做也可以!(只要不是同时……)
root@sysA:~# zoneadm -z zone1 install
Created zone zpool: zone1_rpool
Progress being logged to /var/log/zones/zoneadm.20121022T163634Z.zone1.install
Image: Preparing at /zones/zone1/root.
AI Manifest: /tmp/manifest.xml.RXaycg
SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
Zonename: zone1
Installation: Starting ...
Creating IPS image
Startup linked: 1/1 done
Installing packages from:
solaris
origin: http://pkg.us.oracle.com/support/
DOWNLOAD PKGS FILES XFER (MB) SPEED
Completed 183/183 33556/33556 222.2/222.2 2.8M/s
PHASE ITEMS
Installing new actions 46825/46825
Updating package state database Done
Updating image state Done
Creating fast lookup database Done
Installation: Succeeded
Note: Man pages can be obtained by installing pkg:/system/manual
done.
Done: Installation completed in 1696.847 seconds.
Next Steps: Boot the zone, then log into the zone console (zlogin -C)
to complete the configuration process.
Log saved in non-global zone as /zones/zone1/root/var/log/zones/zoneadm.20121022T163634Z.zone1.install
清单 4. 安装区域
第 5 步)启动区域:
root@sysA:~# zoneadm -z zone1 boot
第 6 步)登录区域控制台,填写系统信息说明:
root@sysA:~# zlogin -C zone1
回答常规问题,等待登录提示。然后可以使用常规神奇魔咒“~.”结束控制台会话。
第 7 步)关闭区域,这样才可以“移动”:
root@sysA:~# zoneadm -z zone1 shutdown
第 8 步)分离区域,如清单 5 所示,这样原始全局区域就无法再使用它。
root@sysA:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 installed /zones/zone1 solaris excl root@sysA:~# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 17.6G 11.2G 6.47G 63% 1.00x ONLINE - zone1_rpool 1.98G 484M 1.51G 23% 1.00x ONLINE - root@sysA:~# zoneadm -z zone1 detach Exported zone zpool: zone1_rpool
清单 5. 分离区域
第 9 步)检查结果并关闭 sysA,如清单 6 所示,以便 sysB 可以使用共享磁盘。
root@sysA:~# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 17.6G 11.2G 6.47G 63% 1.00x ONLINE - root@sysA:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 configured /zones/zone1 solaris excl root@sysA:~# init 0
清单 6. 关闭 sysA
第 10 步)现在启动 sysB,使用前面第 1 步中所示参数配置区域。(同样,最安全的方法是对 sysA 使用 zonecfg ... export,如前面的“方法概述”一节所述。)唯一的区别在于 rootzpool 存储设备的名称,如假设清单中所示,必须启动 sysB 并使用 format 或 zpool import 命令来确定。
完成之后,应查看清单 7 所示输出。(在本示例中,我使用相同的区域名 zone1,但您可以选择自己希望的任何有效区域名称。)
root@sysB:~# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / solaris shared
- zone1 configured /zones/zone1 solaris excl
root@sysB:~# zonecfg -z zone1 info
zonename: zone1
zonepath: /zones/zone1
brand: solaris
autoboot: false
bootargs:
file-mac-profile:
pool:
limitpriv:
scheduling-class:
ip-type: exclusive
hostid:
fs-allowed:
anet:
linkname: net0
...
rootzpool:
storage: dev:dsk/c7t3d0
清单 7. 启动 sysB 并配置区域后的输出
第 11 步)连接区域,如清单 8 所示,这将自动导入 zpool。
root@sysB:~# zoneadm -z zone1 attach
Imported zone zpool: zone1_rpool
Progress being logged to /var/log/zones/zoneadm.20121022T184034Z.zone1.attach
Installing: Using existing zone boot environment
Zone BE root dataset: zone1_rpool/rpool/ROOT/solaris
Cache: Using /var/pkg/publisher.
Updating non-global zone: Linking to image /.
Processing linked: 1/1 done
Updating non-global zone: Auditing packages.
No updates necessary for this image.
Updating non-global zone: Zone updated.
Result: Attach Succeeded.
Log saved in non-global zone as /zones/zone1/root/var/log/zones/zoneadm.20121022T184034Z.zone1.attach
root@sysB:~# zoneadm -z zone1 boot
root@sysB:~# zlogin zone1
[Connected to zone 'zone1' pts/2]
Oracle Corporation SunOS 5.11 11.1 September 2012
清单 8. 连接区域
第 12 步)现在我们将区域迁移回 sysA。如清单 9 所示,在 zone1 中创建一个文件,以便在将区域迁移回来之后验证该文件是否存在,然后开始移回区域。
root@zone1:~# ls /opt root@zone1:~# touch /opt/fileA root@zone1:~# ls -l /opt/fileA -rw-r--r-- 1 root root 0 Oct 22 14:47 /opt/fileA root@zone1:~# exit logout [Connection to zone 'zone1' pts/2 closed] root@sysB:~# zoneadm -z zone1 shutdown root@sysB:~# zoneadm -z zone1 detach Exported zone zpool: zone1_rpool root@sysB:~# init 0
清单 9. 在 zone1 中创建文件
第 13 步)返回 sysA,检查状态,如清单 10 所示。
root@sysA:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 configured /zones/zone1 solaris excl root@sysA:~# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 17.6G 11.2G 6.47G 63% 1.00x ONLINE -
清单 10. 检查 sysA 状态
第 14 步)将区域重新连回 sysA,如清单 11 所示。
root@sysA:~# zoneadm -z zone1 attach
Imported zone zpool: zone1_rpool
Progress being logged to /var/log/zones/zoneadm.20121022T190441Z.zone1.attach
Installing: Using existing zone boot environment
Zone BE root dataset: zone1_rpool/rpool/ROOT/solaris
Cache: Using /var/pkg/publisher.
Updating non-global zone: Linking to image /.
Processing linked: 1/1 done
Updating non-global zone: Auditing packages.
No updates necessary for this image.
Updating non-global zone: Zone updated.
Result: Attach Succeeded.
Log saved in non-global zone as /zones/zone1/root/var/log/zones/zoneadm.20121022T190441Z.zone1.attach
root@sysA:~# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 17.6G 11.2G 6.47G 63% 1.00x ONLINE -
zone1_rpool 1.98G 491M 1.51G 24% 1.00x ONLINE -
root@sysA:~# zoneadm -z zone1 boot
root@sysA:~# zlogin zone1
[Connected to zone 'zone1' pts/2]
Oracle Corporation SunOS 5.11 11.1 September 2012
root@zone1:~# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 1.98G 538M 1.46G 26% 1.00x ONLINE -
清单 11. 重新连接区域
第 15 步)检查先前在 sysB 上创建的文件。
root@zone1:~# ls -l /opt total 1 -rw-r--r-- 1 root root 0 Oct 22 14:47 fileA
下面简要列出接下来您可以尝试的一些有趣的操作。
zoneadm 将使用这两个磁盘创建一个镜像池。(三个磁盘的结果是三路镜像,依此类推。)我希望您已经看到现在可以非常轻松地将 Oracle Solaris 区域从一个系统迁移到另一个系统。
Jeff Victor 是 Oracle Corporation 首席销售顾问,也是《Solaris 10 System Virtualization Essentials》一书的主要作者。凭借近 30 年的 UNIX 经验,他在操作系统、虚拟化和资源管理方面拥有丰富的专业知识,经常受邀为各大公司提供帮助。他编写了 Solaris 区域常见问题解答和适用于 Oracle Solaris 10 的 zonestat 开源程序。
Jeff 经常著书、撰稿并在公司或行业活动中发表演讲。他的博客地址为 http://blogs.oracle.com/jeffv。他从纽约州特洛伊市伦斯勒理工学院获得理学学士学位。
修订版 1.0,2013 年 1 月 8 日
|